微服务之注册中心和配置中心Consul详解

目录
  • 概述
  • 注册中心
    • 注册中心选型
    • CAP原理
    • Consul介绍
    • Consul Raft算法
  • Consul 基本使用
    • 注册服务

概述

上篇说到构建良好的架构,依托于基础设施建设(自动化测试、自动化部署、服务监控,服务发现、配置中心等等),决定成败的往往是基础设施建设,所以从搭建一个注册中心和配置中心开始我们新一阶段的启程。

注册中心

注册中心选型

你有没有思考过这样一个问题,为什么会有这么多的注册中心(etcd/ZooKeeper/Consul),选用那个最适合自己,是不是在选用的时候会眼花缭乱?

我在开始做的时候,自己也有很多困惑,将近3年的时候里我都在不停的学习,但是还是有很多不同的框架和产品,后来我明白了其中的原因,他们就像生活中的可乐、果汁、和牛奶一样,你在使用的时候选取你的编程语言(Java、Go、PHP),程序易接入的就好了。

产生注册中心五花八门的原因是因为语言很多,都想打造最适合自己的体系生态,我选择Consul为大家讲解,因为它安装和接入都比较方便。

不用被这些假象所困扰,多学习网络和系统的底层原理,万变不离其宗,技术人应该是给出解决方案。

CAP原理

  • 一致性: 所有节点在同一时间具有相同的数据
  • 可用性:保证每个请求不管成功或者失败都有响应
  • 分区容错:系统中任意信息的丢失或失败不会影响系统的继续运作
Feature Consul ZooKeeper etcd
服务健康检查 服务状态、内存、硬盘 长链接、Keepalive 链接心跳
多数据中心 支持
K/V存储服务 支持 支持 支持
一致性 Raft Paxos Raft
CAP定理 CP CP CP
使用接口(多语言能力) Http/Dns 客户端 Http/Grpc
安全 acl/https acl Https支持

Consul介绍

使用PHP、和Go编写,使用Consul作为注册中心和配置中心比较方便,所以我选用的是Consul。

  • 采用Raft算法实现,有服务发现,Key/Value存储,可以做配置中心使用,有健康检查,并提供了web管理页面。

Consul 内部端口说明:

  • TCP/8300:8300端口用于服务器节点,客户端通过RPC协议调用服务端节点。
  • TCP/UDP/8301: 8301端口用于单个数据中心所有节点之间的互相通信,即对LAN池信息的同步,它使得整个数据中心能够自动的发现服务器地址,分布式监测点的故障,事件广播。
  • TCP/UDP/8302: 8302端口用于单个或多个数据中心之间的服务器节点的信息同步(WAL池信息的同步),它针对互联网的高延迟进行了优化,能够实现跨数据中心请求。
  • HTTP/8500: 8500端口基于Http服务,用于Api接口和Ui访问。
  • DNS/8600: 8600端口作为DNS服务器,它使得我们可以通过节点查询节点信息。

Consul Raft算法

  • 解决了分布式中领导选举和一致性问题
  • Raft算法是比较出名的共识算法,比如Redis的哨兵、Consul

Consul 集群的特点:

  • 任期机制,Raft是终身任期的,它永远都是领导者
  • 心跳机制,它决定领导者是否能有效的和跟随者通信
  • 随机的选举超时时间,因为是随机的所以决定了不会再同一时间进行选举
  • 先到先得,一届任期内,先收到谁的投票就会给谁,剩下的请求一律拒绝
  • 过半机制,收到一半的投票才会

Consul 集群的角色:

  • Followers 追随者:接受到领导者发送的消息,当心跳超时时,主动推荐自己成为候选人。
  • Candidate 候选人:发送Rpc消息,让其它节点投票给自己,当投票超过半数时,成为领导者。
  • Leader 领导者:向其他节点发送心跳,只要心跳不超时,一直为领导者。

算法的详情可以点击官网视频查看

Consul 基本使用

注册服务

1.注册服务是Consul最基础的服务,点击查看官网Api

PUT 192.168.88.144:8500/v1/agent/service/register
{
    "Name":"audio",
    "Id":"audio",
    "Tags":[
        "v2",
        "primary"
    ],
    "Address":"192.168.88.144",
    "Port":8500,
    "Check":{
        "HTTP":"http://192.168.88.144:8500",
        "Interval":"10s"
    }
}
{
  "id": "web",
  "name": "web",
  "port": 80,
  "check": {
    "name": "ping check",
    "args": ["ping", "-c1", "test.stark.com"],
    "interval": "30s",
    "status": "passing"
  }
}

2.发现服务

GET http://192.168.88.144:8500/v1/health/service/audio
[
    {
        "Node": {
            "ID": "38779dca-bffd-e399-6597-266aff68132c",
            "Node": "server01-virtual-machine",
            "Address": "127.0.0.1",
            "Datacenter": "dc1",
            "TaggedAddresses": {
                "lan": "127.0.0.1",
                "lan_ipv4": "127.0.0.1",
                "wan": "127.0.0.1",
                "wan_ipv4": "127.0.0.1"
            },
            "Meta": {
                "consul-network-segment": ""
            },
            "CreateIndex": 13,
            "ModifyIndex": 17
        },
        "Service": {
            "ID": "audio",
            "Service": "audio",
            "Tags": [
                "v2",
                "primary"
            ],
            "Address": "192.168.88.144",
            "TaggedAddresses": {
                "lan_ipv4": {
                    "Address": "192.168.88.144",
                    "Port": 8500
                },
                "wan_ipv4": {
                    "Address": "192.168.88.144",
                    "Port": 8500
                }
            },
            "Meta": null,
            "Port": 8500,
            // ...
}
]

Service API Service 相关的 API 都在 /v1/agent/service 下:

  • /agent/services:该端点返回在本地代理程序中注册的所有服务;
  • /agent/service/{service_id}:返回在本地代理上注册的单个服务实例的完整服务定义;
  • /agent/health/service/name/{service_name}/
  • /agent/health/service/id/{service_id}:通过名称或id检索本地代理上的聚合服务状态;
  • /agent/service/register:注册服务;
  • /agent/service/deregister/{service_id} :注销服务;
  • /agent/service/maintenance/{service_id}:该端点将给定的服务置于“维护模式”,在维护模式下,该服务将被标记为不可用,并且不会出现在DNS或API查询中。

关于更多Consul的使用,查询官方文档吧。

以上就是微服务之注册中心和配置中心Consul详解的详细内容,更多关于微服务注册配置Consul的资料请关注我们其它相关文章!

(0)

相关推荐

  • go学习笔记读取consul配置文件详解

    目录 新建yaml文件 读取远程配置 新建yaml文件 在上文我们的 go学习笔记:使用 consul 做服务发现和配置共享 这里我们单独来用viper实现读取consul的配置, 我习惯与用yaml格式, 所以 首先 新建yaml文件 store: book: - author: john price: 10 - author: ken price: 12 bicycle: color: red price: 19.95 读取远程配置 可以直接调用viper.AddRemoteProvider

  • 详解go-micro微服务consul配置及注册中心

    目录 一 Consul介绍 1. 注册中心Consul基本介绍 2.注册中心Consul关键功能 3.注册中心Consul两个重要协议 二 Consul安装 1.使用docker拉取镜像 三 Config配置 四 Consul代码编写 1.设置consul配置中心 2.获取consul配置中心的数据 3.consul可视化界面数据编写 4. main.go代码编写 五 最后 一 Consul介绍 Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置. Consu

  • 配置管理和服务发现之Confd和Consul使用场景详解

    目录 Confd和Consul是什么鬼? Confd Consul Confd Consul Confd+Consul 案例1 案例2 Confd和Consul是什么鬼? Confd和Consul都是用于配置管理和服务发现的工具. https://www.consul.io/ https://www.tail-f.com/confd-basic/ Confd Confd是一个轻量级的工具,用于管理分布式系统中的配置文件.它通过将配置文件和模板分离来解决配置管理的挑战.Confd监视由Etcd.Z

  • go使用consul实现服务发现及配置共享实现详解

    目录 使用consul四大特性 通过docker安装consul 实现代码 运行结果 使用consul四大特性 1. 服务发现:利用服务注册,服务发现功能来实现服务治理. 2. 健康检查:利用consul注册的检查检查函数或脚本来判断服务是否健康,若服务不存在则从注册中心移除该服务,减少故障服务请求. 3. k/v数据存储:存储kv数据,可以作为服务配置中心来使用. 4. 多数据中心:可以建立多个consul集群通过inter网络进行互联,进一步保证数据可用性. 通过docker安装consul

  • SpringCloud微服务开发基于RocketMQ实现分布式事务管理详解

    目录 消息队列实现分布式事务原理 RocketMQ的事务消息 代码实现 基础配置 发送半消息 执行本地事务与回查 Account-Service消费消息 测试 小结 消息队列实现分布式事务原理 首先让我们来看一下基于消息队列实现分布式事务的原理方案. 柔性事务 发送消息的服务有个OUTBOX数据表,在进行INSERT.UPDATE.DELETE 业务操作时也会给OUTBOX数据表INSERT一条消息记录,这样可以保证原子性,因为这是基于本地的ACID事务. OUTBOX表充当临时消息队列,然后我

  • 微服务架构设计RocketMQ进阶事务消息原理详解

    目录 前言 RocketMQ事务流程概要 RocketMQ事务流程关键 实现 基础配置 引入组件 添加配置 发送半消息 执行本地事务与回查 消费消息 测试 总结 前言 分布式消息选型的时候是否支持事务消息是一个很重要的考量点,而目前只有RocketMQ对事务消息支持的最好.今天我们来唠唠如何实现RocketMQ的事务消息! Apache RocketMQ在4.3.0版中已经支持分布式事务消息,这里RocketMQ采用了2PC的思想来实现了提交事务消息,同时增加一个补偿逻辑来处理二阶段超时或者失败

  • Go微服务项目配置文件的定义和读取示例详解

    目录 前言 场景 定义配置 配置文件 加载配置文件 实现原理 总结 项目地址 前言 我们在写应用时,基本都会用到配置文件,从各种 shell 到 nginx 等,都有自己的配置文件.虽然这没有太多难度,但是配置项一般相对比较繁杂,解析.校验也会比较麻烦.本文就给大家讲讲我们是怎么简化配置文件的定义和解析的. 场景 如果我们要写一个 Restful API 的服务,配置项大概有如下内容: Host,侦听的 IP,如果不填,默认用 0.0.0.0 Port,侦听的端口,必填,只能是数字,大于等于80

  • 微服务之注册中心和配置中心Consul详解

    目录 概述 注册中心 注册中心选型 CAP原理 Consul介绍 Consul Raft算法 Consul 基本使用 注册服务 概述 上篇说到构建良好的架构,依托于基础设施建设(自动化测试.自动化部署.服务监控,服务发现.配置中心等等),决定成败的往往是基础设施建设,所以从搭建一个注册中心和配置中心开始我们新一阶段的启程. 注册中心 注册中心选型 你有没有思考过这样一个问题,为什么会有这么多的注册中心(etcd/ZooKeeper/Consul),选用那个最适合自己,是不是在选用的时候会眼花缭乱

  • Spring Cloud Alibaba使用Nacos作为注册中心和配置中心

    目录 前言 Nacos简介 使用Nacos作为注册中心 安装并运行Nacos 创建应用注册到Nacos 负载均衡功能 使用Nacos作为配置中心 创建nacos-config-client模块 在Nacos中添加配置 Nacos的动态刷新配置 使用到的模块 前言 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案,Nacos 作为其核心组件之一,可以作为注册中心和配置中心使用,本文将对其用法进行详细介绍. Nacos简介 Nacos 致力于帮助您发现.配置和管理微服务

  • 详解Nacos中注册中心和配置中心的实现

    目录 1.Nacos 简介 Nacos 特性介绍 2.注册中心实现 2.1 创建服务提供者 2.2 创建服务消费者 3.配置中心实现 3.1 新建项目并添加依赖 3.2 配置 Nacos Config 信息 3.3 编写代码读取配置文件 3.4 Nacos 控制台添加配置信息 3.5 动态刷新功能 4.项目源码 小结 Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官方收录.而 Nacos 作为 Spring Cloud A

  • SpringBoot集成Nacos实现注册中心与配置中心流程详解

    目录 SpringBoot整合Nacos 引入Maven依赖 增加配置 示例代码 SpringBoot整合Nacos 引入Maven依赖 首先,我们还是要引入 Maven 依赖 <!--注册中心的依赖--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-discovery-spring-boot-starter</artifactId> <v

  • Java nacos动态配置实现流程详解

    目录 一.前言 二.在nacos上创建配置文件 创建配置文件 配置说明 发布并检查配置文件 三. 修改项目配置与动态读取配置文件 添加 nacos 动态配置依赖 在controller与service中使用动态配置 四. 动态配置网关的使用 一.前言 使用动态配置的原因: properties 和 yaml 是写到项目中的,好多时候有些配置需要修改,每次修改就要重新启动项目,不仅增加了系统的不稳定性,也大大提高了维护成本,非常麻烦,且耗费时间. 使用动态配置,则可以避免这些麻烦,可以动态的修改配

  • windows版本下mysql的安装启动和基础配置图文教程详解

    下载: 第一步 : 打开网址(进入官网下载) :https://www.mysql.com ,点击downloads之后跳转到https://www.mysql.com/downloads 第二步 :跳转至网址https://dev.mysql.com/downloads/,选择Community选项 第三步 :点击MySQL Community Server进入https://dev.mysql.com/downloads/mysql/页面,再点击5.6版本的数据库 第四步:windows操作

随机推荐