社区编辑申请
注册/登录
Golang 语言微服务的服务注册与发现组件 Consul
开发 后端
在 2016 年底,我开始接触 Golang 语言和微服务,在过去的 5 年中,微服务架构变得越来越流行,目前中型及以上规模的公司几乎已经全部抛弃单体架构。

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语言开发栈公众号。

 

责任编辑:武晓燕 来源: Golang语言开发栈
相关推荐

2022-01-26 09:36:53

2022-04-05 13:10:15

consul分布式高可用

2022-03-10 08:24:17

Docker容器SaaS

2022-04-23 16:58:24

微服务微服务架构

2022-04-20 07:48:09

微服务链路服务器

2022-04-28 09:36:51

微服务性能云原生

2022-04-26 05:36:42

2022-03-31 08:15:38

微服务服务拆分架构

2022-04-19 11:23:26

release3.1子系统鸿蒙

2022-04-30 08:43:52

Spring模块化框架

2022-02-20 23:15:46

gRPCGolang语言

2022-04-19 08:15:53

DDD领域建模实战

2022-04-13 08:23:31

Golang并发

2022-03-11 10:53:32

UML建模语言

2022-04-21 10:49:30

智慧城市物联网

2022-04-09 14:45:02

2022-04-24 16:00:15

LinuxLinux命令ls命令

2022-04-11 07:34:46

OAuth2UAA节点

2022-04-10 23:02:08

GoRust语言

2022-01-05 08:00:00

框架Golang开源

同话题下的热门内容

Python 字符串总结,建议收藏!这份Java日志格式规范,拿走不谢!Mybatis-Plus官方发布分库分表神器,一个依赖轻松搞定!后端思维篇:如何应用设计模式优化代码改变 Python 对象规则的黑魔法 Metaclass几种限流算法的Go语言实现JMeter关联之正则表达式提取器在 Go 中实现一个支持并发的 TCP 服务端

编辑推荐

使用Kotlin做开发一个月后的感想面试官问你什么是消息队列?把这篇甩给他!五大自动化测试的Python框架图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)2018年最流行的十大编程语言,其中包括你用的语言吗?
我收藏的内容
点赞
收藏

51CTO技术栈公众号