注册中心整理
1、zookeeper
① 一个leader,多个follower,观察者(observer)。
» 领导者(leader),负责进行投票的发起和决议,更新系统状态
» 学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票
» Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度
» 客户端(client),请求发起方
② 遵循CP设计思想,Zookeeper需保证高可用和强一致性。
③ Zookeeper的核心是原子广播,这个机制保证了各个server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式和广播模式。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数server的完成了和leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和server具有相同的系统状态。一旦leader已经和多数的follower进行了状态同步后,他就可以开始广播消息了,即进入广播状态。这时候当一个server加入zookeeper服务中,它会在恢复模式下启动,发现leader,并和leader进行状态同步。待到同步结束,它也参与消息广播。Zookeeper服务一直维持在Broadcast状态,直到leader崩溃了或者leader失去了大部分的followers支持。
④ Znode有四种形式的目录节点
» PERSISTENT(持久的)
» EPHEMERAL(暂时的)
» PERSISTENT_SEQUENTIAL(持久化顺序编号目录节点)
» EPHEMERAL_SEQUENTIAL(暂时化顺序编号目录节点)
⑤ zk的一致性算法ZAB与Paxos算法类似,ZAB协议增加了崩溃恢复的功能,。
zookeeper提供了“心跳检测”功能:它会定时向各个服务提供者发送一个请求(实际上建立的是一个 socket 长连接),如果长期没有响应,服务中心就认为该服务提供者已经“挂了”,并将其剔除。
Zookeeper的Watch机制其实就是一种推拉结合的模式:
服务消费者会去监听相应路径,一旦路径上的数据有任务变化(增加或减少),Zookeeper只会发送一个事件类型和节点信息给关注的客户端,而不会包括具体的变更内容,所以事件本身是轻量级的,这就是推的部分。
收到变更通知的客户端需要自己去拉变更的数据,这就是拉的部分。
2、Eureka
Eureka的基本架构,由3个角色组成:
»、Eureka Server: 提供服务注册和发现功能;
»、Service Provider 服务提供方,将自身服务注册到Eureka,从而使服务消费方能够找到;
»、Service Consumer 服务消费方,从Eureka获取注册服务列表,从而能够消费服务
① Eureka 在设计时就紧遵AP 原则,Eureka Server 可以运行多个实例来构建集群,解决单点问题,实例之间通过彼此互相注册来提高可用性,是一种去中心化的架构,无 master/slave 之分,每一个实例 都是对等的,每个节点都可被视为其他节点的副本。
② 默认情况下,如果 Eureka Server 在一定时间内没有接收到某个服务实例的心跳(默认周期为30秒),Eureka Server 将会注销该实例(默认为90秒, eureka.instance.lease-expiration-duration-in-seconds 进行自定义配置)。
3、Nacos
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
① Nacos除了服务的注册发现之外,还支持动态配置服务。
② Nacos服务发现和服务健康监测,Nacos 支持基于 DNS 和基于 RPC 的服务发现。
③ Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。
④ 设计来说支持CP也支持AP,对他来说只是一个命令的切换。
4、Consul
Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点。Consul是分布式的、高可用的、 可横向扩展的用于实现分布式系统的服务发现与配置。
① Consul提供了通过DNS或者HTTP接口的方式来注册服务和发现服务。
② Consul的Client可以提供任意数量的健康检查。
③ Consul支持多数据中心,在单个数据中心中,Consul分为Client和Server两种节点(所有的节点也被称为Agent),Server节点保存数据,Client负责健康检查及转发数据请求到Server;Server节点有一个Leader和多个Follower,Leader节点会将数据同步到Follower,Server的数量推荐是3个或者5个,在Leader挂掉的时候会启动选举机制产生一个新的Leader。
5、etcd
etcd是一个Go言编写的分布式、高可用的一致性键值存储系统,用于提供可靠的分布式键值存储、配置共享和服务发现等功能。
ETCD 特点
易使用:基于HTTP+JSON的API让你用curl就可以轻松使用;
易部署:使用Go语言编写,跨平台,部署和维护简单;
强一致:使用Raft算法充分保证了分布式系统数据的强一致性;
高可用:具有容错能力,假设集群有n个节点,当有(n-1)/2节点发送故障,依然能提供服务;
持久化:数据更新后,会通过WAL格式数据持久化到磁盘,支持Snapshot快照;
快速:每个实例每秒支持一千次写操作,极限写性能可达10K QPS;
安全:可选SSL客户认证机制;
ETCD 3.0:除了上述功能,还支持gRPC通信、watch机制。
ETCD 框架
etcd主要分为四个部分:
HTTP Server:用于处理用户发送的API请求以及其它etcd节点的同步与心跳信息请求。
Store:用于处理etcd支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是etcd对用户提供的大多数API功能的具体实现。
Raft:Raft强一致性算法的具体实现,是etcd的核心。
WAL:Write Ahead Log(预写式日志),是etcd的数据存储方式。除了在内存中存有所有数据的状态以及节点的索引以外,etcd就通过WAL进行持久化存储。WAL中,所有的数据提交前都会事先记录日志。Snapshot是为了防止数据过多而进行的状态快照;Entry表示存
6、Kubernetes
Kubernetes是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过Kubernetes能够进行应用的自动化部署和扩缩容。
①
②
③
④