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



目录
相关文章
|
6月前
|
Linux Go iOS开发
IDA 9.2 发布:Golang 改进、新 UI 组件、类型解析等
IDA Pro 9.2 (macOS, Linux, Windows) - 强大的反汇编程序、反编译器和多功能调试器
1212 0
|
运维 监控 负载均衡
动态服务管理平台:驱动微服务架构的高效引擎
动态服务管理平台:驱动微服务架构的高效引擎
302 17
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
运维 监控 负载均衡
探索微服务架构下的服务治理:动态服务管理平台深度解析
探索微服务架构下的服务治理:动态服务管理平台深度解析
|
运维 监控 安全
探索微服务架构下的服务治理:动态服务管理平台的力量
探索微服务架构下的服务治理:动态服务管理平台的力量
|
11月前
|
JSON API Go
Golang工程组件:自定义HTTP规则的grpc-gateway选项
总的来说,grpc-gateway提供了一种简单有效的方式来为你的gRPC服务提供RESTful风格的API。通过自定义HTTP规则,你可以灵活地定义你的API的行为,以满足你的应用的需求。
291 27
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####
|
NoSQL 前端开发 测试技术
👀探秘微服务:从零开启网关 SSO 服务搭建之旅
单点登录(Single Sign-On,简称SSO)是一种认证机制,它允许用户只需一次登录就可以访问多个应用程序或系统。本文结合网关和SaToken快速搭建可用的Session管理服务。
1315 8
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
机器学习/深度学习 运维 监控
动态服务管理平台:构建高效、灵活的微服务架构基石
动态服务管理平台:构建高效、灵活的微服务架构基石
279 17

推荐镜像

更多