注册中心-consul
1|0一、注册中心
1|11.1 服务注册与发现
-
在使用微服务后,调用都变成了服务间的调用。
-
服务间调用需要知道IP、端口等信息。
-
在没有微服务之前,我们的调用信息一般都是写死在调用方的配置文件里(有的公司把这些信息写到数据库等公共的地方,以方便维护)。
-
由于业务的复杂,每个服务可能依赖N个其他服务,如果某个服务的IP,端口等信息发生变更,那么所有依赖该服务的服务的配置文件都要去修改,这样显然太麻烦了。
-
有些服务为了负载是有个多个实例的,而且可能是随时会调整实例的数量。如果每次调整实例数量都要去修改其他服务的配置并重启那太麻烦了。
-
为了解决这个问题,就有了注册中心
-
假设我们有服务A需要调用服务B,并且有服务注册发现组件R。整个大致流程将变成3步:
- 服务B启动时,向注册中心注册资金
- 服务A从从注册中心拉取服务B的信息
- 服务A调用服务B
- 有了服务注册发现组件之后,当修改A服务信息的时候再也不用去修改其他相关服务了
1|21.2 分布式一致性算法
-
一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的
-
一致性协议算法主要有:Paxos、Raft、ZAB、Gossip
-
Paxos算法是Leslie Lamport在1990年提出的一种基于消息传递的一致性算法,非常难以理解,基于Paxos协议的数据同步与传统主备方式最大的区别在于:Paxos只需超过半数的副本在线且相互通信正常,就可以保证服务的持续可用,且数据不丢失。
-
Raft是斯坦福大学的Diego Ongaro、John Ousterhout两个人以易理解为目标设计的一致性算法,已经有了十几种语言的Raft算法实现框架,较为出名的有etcd,Google的Kubernetes也是用了etcd作为他的服务发现框架。
-
Raft是Paxos的简化版,与Paxos相比,Raft强调的是易理解、易实现,Raft和Paxos一样只要保证超过半数的节点正常就能够提供服务。这篇文章 《ETCD教程-2.Raft协议》 详细讲解了Raft原理,非常有意思,感兴趣的同学可以看看。
-
ZooKeeper Atomic Broadcast (ZAB, ZooKeeper原子消息广播协议)是ZooKeeper实现分布式数据一致性的核心算法,ZAB借鉴Paxos算法,但又不像Paxos算法那样,是一种通用的分布式一致性算法,它是一种特别为ZooKeeper专门设计的支持崩溃恢复的原子广播协议
1|31.3 注册中心选型
-
5种常用的注册中心,分别为Zookeeper、Eureka、Nacos、Consul和ETCD
-
具体参照:https://blog.csdn.net/lml200701158/article/details/123153513
2|0二、Consul
2|12.1 介绍
-
Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。
-
Consul 使用起来也较为简单,使用 Go 语言编写,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合
Consul 主要特征
2|22.2 consul特点
2|32.3 安装
(1)普通安装
i. win
ii. mac
(2)docker安装
3|0三、常用API
3|13.1 服务注册
(1)使用postman注册演示
(2)Go 语言注册
3|23.2 服务删除
(1)使用postman注册演示
(2)go代码
3|33.3 设置健康检查
3|43.4 获取服务
(1)获取所有
(2)过滤服务
3|53.5 同一个服务注册多次
name一样,id不一样会把name一样的放到一起
3|63.6 gRPC注册服务和健康检查
gRPC预留了健康检查的proto接口,并且实现了,我们只需要引入注册到微服务中即可
https://github.com/grpc/grpc/blob/master/doc/health-checking.md
通过proto生成的go文件路径:google.golang.org/grpc/health/grpc_health_v1
健康检查代码路径:google.golang.org/grpc/health
4|0四、案例(gin-grpc-consul)
(1)整体流程和目录结构
(2)gin_web/main.go
(3)grpc_srv/proto/hello.proto
(4)生成go文件
(5)grpc_srv/server/main.go
__EOF__

本文链接:https://www.cnblogs.com/Mcoming/p/18080577.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!