01介绍
在 2016 年底,我开始接触 Golang 语言和微服务,在过去的 5 年中,微服务架构变得越来越流行,目前中型及以上规模的公司几乎已经全部抛弃单体架构。
本文我们主要介绍 Golang 语言微服务的服务注册与发现组件 consul。在介绍 Consul 之前,我们先简单了解一下服务注册与发现和 CAP 定理。
02服务注册与发现
微服务架构与单体架构不同,微服务架构按照业务需求拆分为多个微服务,每个微服务都可以动态部署。
服务注册与发现组件负责管理拆分的各个微服务,其中服务注册是指微服务实例启动时,将其信息注册到服务注册与发现组件;服务发现是指微服务实例通过请求服务注册与发现组件,获取其需要远程调用的其他微服务实例的信息。
服务注册与发现组件的功能包括管理当前注册到服务注册与发现组件的微服务实例;心跳检测注册到服务注册与发现组件的微服务实例;为调用方的微服务实例提供被调用的微服务实例的信息。
03CAP 定理
CAP 定理由加州大学柏克莱分校的 Eric Brewer 教授提出,它是描述分布式系统下节点数据同步的基本定理。
其核心是告诉我们,在分布式系统中有三方面需要彼此权衡,分别是一致性(consistency)、可用性(availability)和分区容忍性(partition tolerance),CAP 定理告诉我们,以上三个指标最多只能满足其中两个指标。
其中,一致性是当访问多个节点时能得到同样的值;可用性意味着每个请求都能获得响应;分区容忍性是指集群中的某些节点在无法通信后,集群整体还能继续提供服务。
微服务架构实际上就是分布式系统的一种落地实践。
04Consul
目前业界已经开源出很多服务注册与发现组件,例如 Java 语言开发的致力于为分布式系统提供一致性服务的 zookeeper,使用 Golang 语言开发的主要用于服务发现与配置共享的 etcd 和 consul。
其中,Consul 是以服务发现与配置作为主要功能目标,附带提供了 Key/Value 存储,仅从服务注册与发现组件的需求考虑,Consul 更适合。
Consul 是一个服务网格解决方案,满足 CAP 定理中的 CP,提供服务发现和配置共享的功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建完整的服务网格。
Consul 附带了一个简单的内置代理,因此一切都开箱即用,但也支持第三方代理集成,如 Envoy。
Consul 主要特性:
- 服务发现
- 健康检查
- KV 存储
- 安全服务通信
- 多数据中心
Consul 是一个高可用的分布式系统,支持多数据中心部署,每个数据中心都运行一个 Consul 集群。一个 Consul 集群由部署和运行 Consul Agent 的节点组成。
Consul Agent 负责服务注册、运行检查和响应查询(将查询请求转发到 Consul server 中进行处理),服务发现或读写 Key/Value 数据不需要运行 Consul Agent。
Consul 集群包含 Consul server 和 Consul client,Consul server 负责存储和复制数据。多个 Consul server 之间基于 Raft 协议选举一个 leader。虽然 Consul 可以只使用一个 Consul server,但官方建议使用 3 到 5 个 Consul server,以避免数据丢失。
Consul client 负责将请求转发给同一数据中心的 Consul server 处理。当发出跨数据中心服务发现或配置请求时,本地 Consul server 会将请求转发到远程数据中心并返回结果。
05总结
本文我们先简单认识一下 Consul,同时介绍了服务注册与发现是什么,微服务作为分布式系统的一种落地实践,也需要遵循 CAP 定理,并列举了业界目前开源的满足 CP 的服务注册与发现组件有哪些。
本文转载自微信公众号「 Golang语言开发栈」,可以通过以下二维码关注。转载本文请联系 Golang语言开发栈公众号。