1.在微服务架构中,注册中心是核心的基础服务之一
2.服务治理的实现主要依靠的就是注册中心,用来进行服务的发现与注册
3.什么是注册中心
(1)注册中心可以说是微服务架构中的”通讯录“
<1>记录了服务和服务地址的映射关系
<2>在分布式架构中,服务会注册到服务注册中心
<3>当服务需要调用其它服务时,就到这里找到服务的地址,进行调用
4.为什么需要注册中心
(1)在分布式系统中,不仅仅是需要在注册中心找到服务和服务地址的映射关系
(2)还需要考虑更多更复杂的问题:
<1>服务注册后,如何被及时发现
<2>服务宕机后,如何及时下线
<3>服务如何有效的水平扩展
<4>服务发现时,如何进行路由
<5>服务异常时,如何进行降级
<6>注册中心如何实现自身的高可用
5.常见的注册中心
(1)Dubbo中的注册中心
<1>Dubbo支持多种注册中心的实现,常用的是:Redis,Zookeeper
<2>以上的实现主要是为了集中存储服务的信息
(2)SpringCloud中的注册中心
<1>在SpringCloud中,也是支持多种注册中心的:
Spring Cloud Netflix Eureka
Spring Cloud Zookeeper
Spring Cloud Consul
<2>以上三种,最常用的主要是Eureka
6.注册中心规则
(1)每一个微服务启动的时候,都需要去注册中心注册(eureka或zookeeper)
(2)同类服务注册的服务名必须相同,不同类服务注册的服务名一定不能相同
<1>订单服务:
部署5台服务器,那么这5台微服务在注册中心中注册的服务名必须一致,例如ORDER
<2>商品服务:
部署4台服务器,那么这4台微服务在注册中心中注册的服务名必须一致,例如GOODS
<3>订单服务和商品服务注册的服务名一定不能相同,不能同为ORDER或者GOODS
6.Eureka、Zookeeper区别
(1)Eureka是什么
<1>作为分布式系统的注册中心,主要作用是用于服务治理
<2>Eureka使用的是C/S架构:
2.1. Eureka Server,注册中心
2.2. Eureka Client,服务消费者和服务提供者
(2)Eureka原理
<1>每一个微服务中都有eureka client,用于服务的注册与发现
1.1. 服务的注册:把自己注册到eureka server
1.2.服务的发现:从eureka server获取自己需要的服务列表
<2>每一个微服务启动的时候,都需要去eureka server注册
2.1.当A服务需要调用B服务时,需要从eureka服务端获取B服务的服务列表
2.2.然后把列表缓存到本地
2.3.根据ribbon的客户端负载均衡规则,从服务列表中取到一个B服务
2.4.然后去调用此B服务
2.5.当A服务下次再此调用B服务时,如果发现本地已经存储了B的服务列表
2.6.就不需要再从eureka服务端获取B服务列表
2.7.直接根据ribbon的客户端负载均衡规则,从服务列表中取到一个B服务
2.8.然后去调用B服务
<3>默认每30秒,就会从eureka服务端获取一次最新的服务列表
<4>如果某台微服务down机,或者添加了几台机器
4.1.eureka server会通知订阅他的客户端,并让客户端更新服务列表
4.2.还会通知其他eureka server更新此信息
<5>心跳检测,微服务每30秒向eureka server发送心跳
5.1.eureka server若90s之内都没有收到某个客户端的心跳,则认为此服出了问题
5.2.会从注册的服务列表中将其删除,并通知订阅它的客户端更新服务列表
5.3.还会通知其他eureka server更新此信息
<6>eureka server保护机制
6.1.如果一段时间内,85%的服务都没有发送心跳,则此server进入保护状态
6.2.此状态下,可以正常接受注册,可以正常提供查询服务,但是不与其他server同步信息
6.3.不会通知订阅它的客户端,这样就不会误杀其他微服务
(3)zookeeper原理
<1>zookeeper也可以作为注册中心,用于服务治理
1.1.还有其他用途,例如:分布式事务锁等
<2>每启动一个微服务,就会去zk中注册一个临时子节点
2.1.5台订单服务在zk中的订单目录下创建的5个临时节点
2.2.4台商品服务在zk中的商品目录下创建的4个临时接点
<3>每当有一个服务down机,由于是临时接点,此节点会立即被删除
3.1.通知订阅该服务的微服务更新服务列表
3.2.zk上有watch,每当有节点更新,都会通知订阅该服务的微服务更新服务列表
<4>每当有一个新的微服务注册进来,就会在对应的目录下创建临时子节点
4.1.通知订阅该服务的微服务更新服务列表
4.2.zk上有watch,每当有节点更新,都会通知订阅该服务的微服务更新服务列表
<5>每个微服务30s向zk获取新的服务列表
7.CAP基本概念
(1)分布式系统的三个指标
<1>Consistency 一致性
<2>Availability 可用性
<3>Partition tolerance 分区容错性
(2)eureka基于AP
(3)zookeeper基于CP
(4)由于作为注册中心可用性的需求要高于一致性,所以eureka要比zookeeper合理一些