Golang 语言微服务的服务注册与发现组件 Consul

简介: Golang 语言微服务的服务注册与发现组件 Consul

介绍

在 2016 年底,我开始接触 Golang 语言和微服务,在过去的 5 年中,微服务架构变得越来越流行,目前中型及以上规模的公司几乎已经全部抛弃单体架构。本文我们主要介绍 Golang 语言微服务的服务注册与发现组件 consul。在介绍 Consul 之前,我们先简单了解一下服务注册与发现和 CAP 定理。

服务注册与发现

微服务架构与单体架构不同,微服务架构按照业务需求拆分为多个微服务,每个微服务都可以动态部署。服务注册与发现组件负责管理拆分的各个微服务,其中服务注册是指微服务实例启动时,将其信息注册到服务注册与发现组件;服务发现是指微服务实例通过请求服务注册与发现组件,获取其需要远程调用的其他微服务实例的信息。服务注册与发现组件的功能包括管理当前注册到服务注册与发现组件的微服务实例;心跳检测注册到服务注册与发现组件的微服务实例;为调用方的微服务实例提供被调用的微服务实例的信息。

03

CAP 定理

CAP 定理由加州大学柏克莱分校的 Eric Brewer 教授提出,它是描述分布式系统下节点数据同步的基本定理。其核心是告诉我们,在分布式系统中有三方面需要彼此权衡,分别是一致性(consistency)、可用性(availability)和分区容忍性(partition tolerance),CAP 定理告诉我们,以上三个指标最多只能满足其中两个指标。其中,一致性是当访问多个节点时能得到同样的值;可用性意味着每个请求都能获得响应;分区容忍性是指集群中的某些节点在无法通信后,集群整体还能继续提供服务。微服务架构实际上就是分布式系统的一种落地实践。

04

Consul

目前业界已经开源出很多服务注册与发现组件,例如 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 语言该用命名返回值吗?

参考资料:

https://zh.wikipedia.org/wiki/CAP定理

https://www.consul.io/docs/intro



目录
相关文章
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
566 0
|
Linux Go iOS开发
IDA 9.2 发布:Golang 改进、新 UI 组件、类型解析等
IDA Pro 9.2 (macOS, Linux, Windows) - 强大的反汇编程序、反编译器和多功能调试器
1712 0
|
中间件 Go
Golang | Gin:net/http与Gin启动web服务的简单比较
总的来说,`net/http`和 `Gin`都是优秀的库,它们各有优缺点。你应该根据你的需求和经验来选择最适合你的工具。希望这个比较可以帮助你做出决策。
754 35
|
JSON API Go
Golang工程组件:自定义HTTP规则的grpc-gateway选项
总的来说,grpc-gateway提供了一种简单有效的方式来为你的gRPC服务提供RESTful风格的API。通过自定义HTTP规则,你可以灵活地定义你的API的行为,以满足你的应用的需求。
425 27
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
33925 8
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
372 5
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
486 4
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
396 3
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
1032 3
|
XML Java 数据库
在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂
【9月更文挑战第8天】在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂。日志作为系统行为的第一手资料,传统记录方式因缺乏全局视角而难以满足跨服务追踪需求。本文通过一个电商系统的案例,介绍如何在Spring Boot应用中手动实现日志链路追踪,提升调试效率。我们生成并传递唯一追踪ID,确保日志记录包含该ID,即使日志分散也能串联。示例代码展示了使用过滤器设置追踪ID,并在日志记录及配置中自动包含该ID。这种方法不仅简化了问题定位,还具有良好的扩展性,适用于各种基于Spring Boot的微服务架构。
368 3

推荐镜像

更多