Consul介绍
什么是consul
Consul是一个服务网格解决方案,提供了一个功能齐全的控制台、具有服务注册发现、配置中心和分段功能。Consul的每一个特性既可以根据需要单独使用,又可以一起使用来构建完成的服务网格。Consul拥有一个数据层且支持代理和本地集成模型。Consul提供了一个简易的内置代理以方便开箱即用,同事也支持第三方代理集成例如[Envoy](https://www.envoyproxy.io)。
关键特性:
1. 服务发现:客户端可以通过Consul注册一个服务,例如 api 或 mysql,并且其他客户端可以通过Consul发现服务提供者。通过DNS或HTTP,应用程序可以方便的找到她们依赖的其他服务。
2. 健康检查:Consul客户端可以提供任意数量的健康状况检查,这些检查要么与给定的服务相关(“web服务器是否返回200 OK”),要么与本地节点相关(“内存利用率是否低于90%”)。管理员可以使用这些信息监视群集运行状况,服务发现组件也可以使用此信息将请求路由到远离不健康的主机。
3. KV存储:应用程序可以将Consul的KV存储用于任何目的,包括动态配置、功能标记、协调、leader选举等。并提供了简易的HTTP API使其易于使用。
4. 安全机制:Consul可以生成和颁发服务的TLS证书,以建立TLS连接。原型(Intentions)是定义允许哪些服务进行通信。使用可以随时变更的Intentions,而不是使用复杂的网络拓扑和静态防火墙规则,可以轻松地管理服务分段。
5. 多数据中心:Consul提供开箱即用的多数据中心支持。这意味着Consul的用户不必担心构建额外的抽象层来应对多区域中心扩展。
Consul的设计对DevOps社区和应用开发人员都非常友好,非常适合现代的、弹性的基础设施。
基础架构:
Consul是一个分布式,高可用系统。本节只覆盖Consul的基本概念,更多的细节请[点击](https://www.consul.io/docs/connect/intentions.html)
Consul提供服务的每个节点都运行着一个consul代理。发现其他服务或获取/设置密钥/值数据不需要运行代理。代理负责检查节点上的服务以及节点本身的运行状况。
代理与一到多个Consul服务对话。Consul服务负责数据存储和复制,这些服务选举出一个leader(raft)。虽然Consul可以在一台服务器上运行,但建议使用3到5台服务器避免鼓掌导致数据丢失。每个数据中心建议搭建一套Consul集群。
基础设施中的组件通过任何Consul服务器或其代理可以访问到其他服务或检点。代理会将请求路由到Consul服务器。
每一个数据中心运行着一个Consul集群。当发起一个跨数据中心服务发现或配置变更,本地Consul服务器会转发请求到远程数据中心并返回结果。
vs. 其他软件
类型 |
CAP |
集成 |
KV存储 |
健康检查 |
安全 |
多数据中心支持 |
一致性 |
zookeeper |
CP |
SDK |
支持 |
长连接,keepalive |
ACL |
NO |
Paxos |
doozerd |
CP |
sdk |
支持 |
-- |
-- |
NO |
Paxos |
etcd |
CP |
http/grpc |
支持 |
连接心跳 |
https支持(弱) |
NO |
raft |
consul |
CP |
http/dns |
支持 |
服务状态,内存,硬盘等 |
https/acl |
支持 |
raft |