go语言服务注册与发现 golang consul服务发现和注册( 二 )


Cancel:服务下线
Eureka客户端在程序关闭时向Eureka服务器发送取消请求 。发送请求后,该客户端实例信息将从服务器的实例注册表中删除 。该下线请求不会自动完成,它需要调用以下内容:
DiscoveryManager.getInstance().shutdownComponent();
Eviction 服务剔除
在默认的情况下,当Eureka客户端连续90秒没有向Eureka服务器发送服务续约 , 即心跳 , Eureka服务器会将该服务实例从服务注册列表删除,即服务剔除 。
自我保护机制:
既然Eureka Server会定时剔除超时没有续约的服务 , 那就有可能出现一种场景,网络一段时间内发生了 异常,所有的服务都没能够进行续约,Eureka Server就把所有的服务都剔除了,这样显然不太合理 。所以,就有了 自我保护机制,当短时间内,统计续约失败的比例,如果达到一定阈值,则会触发自我保护的机制,在该机制下,Eureka Server不会剔除任何的微服务 , 等到正常后 , 再退出自我保护机制 。自我保护开关(eureka.server.enableself-preservation: false)
3.Consul
consul推荐的架构图:
Consul不像Euraka的部署那么简单 , 他是go语言开发的,需要运维单独部署 , 有提供java的客户端连接,采用的是CAP的CP 。
4.Nacos
Euraka是Spring Cloud Netflix早期版本中推荐使用的,后来euraka1.0版本不再维护,euraka2.0已经闭源,导致很多新项目基于Spring Cloud Netflix 开发的选型变迁为Consul.
Nacos是阿里开源的服务注册中心 , 它可以与spring cloud aliaba集成使用 。
Nacos的官方介绍:
Nacos 致力于帮助您发现、配置和管理微服务 。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理 。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台 。Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施 。
Nacos 地图
Nacos 生态图
如 Nacos 全景图所示,Nacos 无缝支持一些主流的开源生态,例如
Spring Cloud
Apache Dubbo and Dubbo Mesh TODO
Kubernetes and CNCF TODO
三、服务注册与发现技术选型
以下是来自网上的一个分享:
除了上述的几种以外,笔者更推荐使用Nacos作为服务注册中心 。
推荐理由:
Nacos服务注册表结构Mapnamespace, Mapgroup::serviceName, Service采用多层次Map结构,控制的颗粒度更细,支持金丝雀模式发布,心跳同步机制也更快速 , 服务更新更及时 。
consul入门篇 consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务 。内置了服务注册与发现框架(类似zookeeper)、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案 。服务部署简单,只有一个可运行的二进制的包 。每个节点都需要运行agent , 他有两种运行模式server和client 。每个节点为以下三种状态的一种:
上图来源于 Consul  , 很好的解释了 Consul 的工作原理 。consul是一个服务管理软件,主要功能如下:
有些人可能对服务注册和发现还没有概念 , 有些人可能使用过其他服务发现的工具 , 比如 ZooKeeper,etcd,会有一些先入为主的经验 。本文谈一下 Consul 做服务发现的实践和原理 。
下面这张图描述了服务发现的完整流程,先大致看一下:
首先需要有一个正常的 Consul 集群,有 Server,有 Leader 。这里在服务器 Server1、Server2、Server3 上分别部署了 Consul Server 。
假设他们选举了 Server2 上的 Consul Server 节点为 Leader 。这些服务器上最好只部署 Consul 程序,以尽量维护 Consul Server 的稳定 。

推荐阅读