服务发现框架Consul的使用

简介: 服务发现框架Consul的使用

分布式系统的三个指标

  • Consistency
  • Availability
  • Partition tolerance

它们的第一个字母分别是 C、A、P。

由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容错性是我们必须需要实现的

一致性和可用性,不可能同时成立。这个结论就叫做 CAP 定理。

 

服务发现框架的比较

 

Feature    Consul    zookeeper    etcd     euerka
服务健康检查     服务状态,内存,硬盘等    (弱)长连接,keepalive     连接心跳    可配支持
多数据中心    支持    —    —    —
kv存储服务     支持     支持     支持    
一致性    raft     paxos raft    —
cap   cp   cp cp  ap
使用接口(多语言能力)     支持http和dns     客户端    http/grpc     http(sidecar)
watch支持    全量/支持long polling     支持     支持 long polling    支持 long polling/大部分增量
自身监控    metrics    —     metrics     metrics
安全    acl /https    acl     https支持(弱)    

Consul和Eureka最大的区别:Eureka保证AP, Consul为CP。

Consul强一致性(C)带来的是:

服务注册相比Eureka会稍慢一些。因为Consul的raft协议要求必须过半数的节点都写入成功才认为注册成功

Leader挂掉时,重新选举期间整个consul不可用。保证了强一致性但牺牲了可用性。

Eureka保证高可用(A)和最终一致性:

服务注册相对要快,因为不需要等注册信息replicate到其他节点,也不保证注册信息是否replicate成功

当数据出现不一致时,虽然A, B上的注册信息不完全相同,但每个Eureka节点依然能够正常对外提供服务,这会出现查询服务信息时如果请求A查不到,但请求B就能查到。如此保证了可用性但牺牲了一致性。

Eureka就是个servlet程序,跑在servlet容器中; Consul则是go编写而成

 

为什么要选择Consul

与其他分布式服务注册与发现的方案,Consul的方案更"一站式",内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案。ZK拥有的功能它几乎都支持,但是健康检查和服务安全性方面优于ZK。使用起来也较 为简单。Consul用Golang实现,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。

什么是多数据中心

这里存在两个数据中心:DATACENTER1、DATACENTER2。每个数据中心有着 3 到 5 台 server(该数量使得在故障转移和性能之间达到平衡)。

一个数据中心的网络连接问题或故障不影响其他数据中心的可用性。每个数据中心都是独立运行,并且拥有私有的LAN gossip pool。

数据中心中包含客户节点和服务节点,通常建议三到五个服务节点。因为随着节点的增加,服务同步会变得相对更慢,同时考虑到服务失败和性能要求等方面因素。但是对于客户节点数量,则没有限制。利用Gossip协议用来向集群广播消息,节点之间利用Raft协议选举领导者,领导者负责处理所有的查询和事务请求。

 

Spring Cloud Consul特性

Spring Cloud Consul项目是针对Consul的服务治理实现。Consul是一个分布式高可用的系统,它包含多个组件,但是作为一个整体,在微服务架构中为我们的基础设施提供服务发现和服务配置的工具。它包含了下面几个特性:

  • 服务发现
  • 健康检查
  • Key/Value存储
  • 多数据中

Consul引入

由于Spring Cloud Consul项目的实现,我们可以轻松的将基于Spring Boot的微服务应用注册到Consul上,并通过此实现微服务架构中的服务治理。

以之前实现的基于Eureka的示例(eureka-client)为基础,我们如何将之前实现的服务提供者注册到Consul上呢?方法非常简单,我们只需要在pom.xml中将eureka的依赖修改为如下依赖:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

接下来再修改一下application.properites,将consul需要的配置信息加入即可,比如:(下面配置是默认值)

spring.cloud.consul.host=localhost
spring.cloud.consul.port=85001. spring.cloud.consul.host=localhost
2. spring.cloud.consul.port=8500

到此为止,我们将eureka-client转换为基于consul服务治理的服务提供者就完成了

Consul 角色

  • client: 客户端, 无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群。
  • server: 服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其它数据中心通讯。 每个数据中心的 server 数量推荐为 3 个或是 5 个。

Consul常用指令

 

Consul 工作原理

  • 1、当 Producer 启动的时候,会向 Consul 发送一个 post 请求,告诉 Consul 自己的 IP 和 Port
  • 2、Consul 接收到 Producer 的注册后,每隔10s(默认)会向 Producer 发送一个健康检查的请求,检验Producer是否健康
  • 3、当 Consumer 发送 GET 方式请求 /api/address 到 Producer 时,会先从 Consul 中拿到一个存储服务 IP 和 Port 的临时表,从表中拿到 Producer 的 IP 和 Port 后再发送 GET 方式请求 /api/address
  • 4、该临时表每隔10s会更新,只包含有通过了健康检查的 Producer

Consul的key/value数据持久化

dev模式下不会持久化数据

cmd启动:

consul agent -config-file=config.json

{

"bind_addr": "127.0.0.1",

"server": true,

"bootstrap_expect": 1,

"client_addr": "0.0.0.0",

"data_dir": "D:\\tool\\consul_1.4.4_windows_amd64\\data",

"log_level": "info",

"ui": true,

"rejoin_after_leave": true

}

 

Consul注册向windows注册服务

1、向path里添加D:\tool\consul_1.4.4_windows_amd64

2、以管理员身份启动命令提示符,执行

3、sc.exe create "Consul" binPath="consul agent -config-file=D:\\tool\\consul_1.4.4_windows_amd64\\config.json"

4、“运行“输入services.msc进入系统服务,将Consul服务设置为自动启动

 

windows删除Consul服务

通过管理员权限运行CMD,输入如下命令

1、Net Stop consul

2、sc delete consul

 

参考文章:

http://blog.didispace.com/spring-cloud-starter-dalston-1/


相关文章
|
Go 数据中心 微服务
Golang 语言微服务的服务发现组件 Consul 的系统架构介绍
Golang 语言微服务的服务发现组件 Consul 的系统架构介绍
104 0
|
存储 运维 网络协议
服务发现组件:Consul简易攻略
本篇作为Consul攻略的入门导引,帮助小伙伴了解Consul全貌,包含特性、命令操作、架构原理、介绍了Raft、Gossip协议等。
896 0
服务发现组件:Consul简易攻略
|
3月前
|
Prometheus 监控 Cloud Native
[prometheus]基于consul的服务发现
[prometheus]基于consul的服务发现
|
3月前
|
存储 Ubuntu Linux
在Ubuntu 14.04上使用Consul服务发现系统的介绍
在Ubuntu 14.04上使用Consul服务发现系统的介绍
25 0
|
Prometheus 监控 Cloud Native
Prometheus基于consul服务发现
Prometheus基于consul服务发现
|
缓存 中间件 开发工具
go-micro使用Consul做服务发现的方法和原理
go-micro使用Consul做服务发现的方法和原理
218 0
|
存储 负载均衡 Kubernetes
配置管理和服务发现之Confd和Consul
配置管理和服务发现之Confd和Consul
251 0
|
存储 负载均衡 监控
SpringCloud Day02---服务发现与注册(Eureka+zookeeper+Consul(四)
SpringCloud Day02---服务发现与注册(Eureka+zookeeper+Consul
SpringCloud Day02---服务发现与注册(Eureka+zookeeper+Consul(四)
|
JSON 安全 Java
SpringCloud Day02---服务发现与注册(Eureka+zookeeper+Consul(三)
SpringCloud Day02---服务发现与注册(Eureka+zookeeper+Consul
SpringCloud Day02---服务发现与注册(Eureka+zookeeper+Consul(三)
|
缓存 负载均衡 网络协议
SpringCloud Day02---服务发现与注册(Eureka+zookeeper+Consul(二)
SpringCloud Day02---服务发现与注册(Eureka+zookeeper+Consul)
SpringCloud Day02---服务发现与注册(Eureka+zookeeper+Consul(二)