微服务学习总结(二)

注册中心:简单说就是记录部署服务机器地址的一个服务

在分布式系统里,就有一个类似的概念,不过它的名字可不是叫什么地图,而是叫注 册中心。但原理和地图其实差不多,就是将部
 
署服务的机器地址记录到注册中心,服务消费 者在有需求的时候,只需要查询注册中心,输入提供的服务名,就可以得到地址,从
 
而发起 调用。
 
 
注册中心原理:
在微服务架构下,主要有三种角色,服务提供者(RPC Server),服务消费者(RPC client)和服务注册中心(Registry),三者的交互关系如下
 
RPC Server 提供服务,在启动时,根据服务发布文件server.xml中的配置的信息,向Registry 注册自身服务,并向Registry定期发送心跳汇报存货状态。
 
RPC Client 调用服务(服务消费者),在启动时,根据服务引用文件client.xml 中的配置信息,向Registry 订阅服务,把Registry 返回的服务节点列表缓存在本地内存中,并与RPC Server 建立连接。
 
当 RPC Server 节点发生变更时,Registry 会同步变更,RPC Client 感知后会刷新本地 内存中缓存的服务节点列表。 RPC Client 从本地缓存的服务节点列表中,基于负载均衡算法选择一台 RPC Sever 发起 调用
 
 
微服务学习总结(二)
 
 

注册中心实现方式

 
注册中心的实现主要涉及几个问题:注册中心需要提供哪些接口,该如何部署;如何存储服 务信息;如何监控服务提供者节点的存活;如果服务提供者节点有变化如何通知服务消费 者,以及如何控制注册中心的访问权限。
 
 

1. 注册中心 API

 
根据注册中心原理的描述,注册中心必须提供以下最基本的 API,例如:
 
服务注册接口:服务提供者通过调用服务注册接口来完成服务注册。
 
服务反注册接口:服务提供者通过调用服务反注册接口来完成服务注销。
 
心跳汇报接口:服务提供者通过调用心跳汇报接口完成节点存活状态上报。
 
服务订阅接口:服务消费者通过调用服务订阅接口完成服务订阅,获取可用的服务提供者 节点列表。
 
服务变更查询接口:服务消费者通过调用服务变更查询接口,获取最新的可用服务节点列 表。
 
除此之外,为了便于管理,注册中心还必须提供一些后台管理的 API,例如:
 
服务查询接口:查询注册中心当前注册了哪些服务信息。
 
服务修改接口:修改注册中心中某一服务的信息。
 

2. 集群部署

 
 
注册中心作为服务提供者和服务消费者之间沟通的桥梁,它的重要性不言而喻。所以注册中心一般都是采用集群部署来保证高可
 
用性,并通过分布式一致性协议来确保集群中不同节点 之间的数据保持一致
 
 
 

分布式一致性协议

一致性协议描述了特定一致性模型的实际实现。一致性模型就像是接口,而一致性协议就像是接口的具体实现。一致性模型提供了分布式系统中数据复制时保持一致性的约束,为了实现一致性模型的约束,需要通过一致性协议来保证
 
 
单主协议(不允许数据分歧):整个分布式系统就像一个单体系统,所有写操作都由主节点处理并且同步给其他副本。例如主备同步、2PC、Paxos 都属于这类协议。
 
多主协议(允许数据分歧):所有写操作可以由不同节点发起,并且同步给其他副本。例如 Gossip、POW。
 
可以发现,它们的核心区别在于是否允许多个节点发起写操作,单主协议只允许由主节点发起写操作,因此它可以保证操作有序性,一致性更强。而多主协议允许多个节点发起写操作,因此它不能保证操作的有序性,只能做到弱一致性。
 

 

单主协议

单主协议的共同点在于都会用一个主节点来负责写操作,这样能够保证全局写的顺序一致性,它有另一个名字叫定序器,非常的形象。

 

主备复制

主备复制可以说是最常用的数据复制方法,也是最基础的方法,很多其他协议都是基于它的变种。 主备复制要求所有的写操作都在主节点上进行,然后将操作的日志发送给其他副本。可以发现由于主备复制是有延迟的,所以它实现的是最终一致性。

主备复制的实现方式:主节点处理完写操作之后立即返回结果给客户端,写操作的日志异步同步给其他副本。这样的好处是性能高,客户端不需要等待数据同步,缺点是如果主节点同步数据给副本之前数据缺失了,那么这些数据就永久丢失了。MySQL 的主备同步就是典型的异步复制。

 
 

两阶段提交

两阶段提交(2PC)是关系型数据库常用的保持分布式事务一致性的协议,它也属于同步复制协议,即数据都同步完成之后才返回客户端结果。可以发现 2PC 保证所有节点数据一致之后才返回给客户端,实现了顺序一致性。

2PC 把数据复制分为两步:

表决阶段:主节点将数据发送给所有副本,每个副本都要响应提交或者回滚,如果副本投票提交,那么它会将数据放到暂存区域,等待最终提交。

提交阶段:主节点收到其他副本的响应,如果副本都认为可以提交,那么就发送确认提交给所有副本让它们提交更新,数据就会从暂存区域移到永久区域。只要有一个副本返回回滚就整体回滚。可以发现 2PC 是典型的 CA 系统,为了保证一致性和可用性,2PC 一旦出现网络分区或者节点不可用就会被拒绝写操作,把系统变成只读的。由于 2PC 容易出现节点宕机导致一直阻塞的情况,所以在数据复制的场景中不常用,一般多用于分布式事务中(注:实际应用过程中会有很多优化)。

 

今天有点忙,去讨论了一下工作中的问题,现在接着学习吧---嘿嘿