一、微服务注册中心
一、微服务注册中心简介
1 什么是微服务注册中心
提供者将自己提供服务的名称及自己主机详情(IP、端口等)写入到另一台主机中的一个列表中,这个列表称为服务注册表;所有消费者需要调用微服务时,首先从这台主机中将服务注册表下载到本地,然后根据消费者本地设置好的负载均衡策略选择一个服务提供者进行调用。那么,这台主机就称为微服务注册中心。2、注册中心架构
3、注册中心的功能
- 实现provider与consumer间的解耦合。提供者对于消费者来说是透明的,不固定的
- 使消费者调用提供者实现负载均衡成为可能
- 通过微服务注册中心的Dashboard监控微服务的运行状态
4、常见的注册中心
一般情况下,不同的微服务生态,使用不同的注册中心。- Dubbo,一般使用Zookeeper
- Spring Cloud,一般使用Eureka或Consul
- Spring Cloud Alibaba,一般使用Nacos
二、常见注册中心简介
1、Zookeeper
ZooKeeper由雅虎研究院开发,后来捐赠给了Apache。ZooKeeper是一个开源的分布式应用程序协调服务器,其为分布式系统提供一致性服务。其一致性是通过基于Paxos算法的ZAB协议完成的。其主要功能包括:配置维护、命名服务、分布式同步、集群管理、DNS服务、Master选举、分布式锁、分布式队列等。其中DNS服务就是提供的注册中心服务。2、Eureka
Eureka是Net? ix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-net? ix中,实现SpringCloud的服务发现功能。3、Consul
Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。使用Go语言编写,使用Key/Value存储,采用Raft一致性协议,支持多数据中心。4、Nacos
Nacos,Dynamic Naming and Configuration Service,动态命名与配置服务。
Nacos是阿里巴巴开源的一款支持服务注册与发现,配置管理以及微服务管理的组件。用来取代以前常用的注册中心(zookeeper , eureka等等),以及配置中心(spring cloud config等)。Nacos是集成了注册中心和配置中心的功能,做到了二合一。
Nacos = 服务注册中心 + 服务配置中心 = Eureka + Spring Cloud Con? g + Spring Cloud Bus +Kafka/RabbitMQ5、对比
CAP:C(一致性),A(可用性),P(分区容错)
三、Eureka源码解析预备知识
1、Eureka的异地多活
异地多活一般是指在不同城市建立独立的数据中心。
活是相对于主备关系中的热备而言的。热备是指备份机房随时全量备份着主机房中的数据,但平时不支撑业务需求,即不对外提供服务。只有在主机房出现故障时才会切换到备份机房,由备份机房对外提供服务。也就是说,平时只有主机房是活的。多活则是指这些机房间属于主从关系,即这些机房平时都支撑业务需求,都对外提供服务,相互备份。
2、Region与Zone
Eureka中具有Region与Availability Zone(简称AZ)概念,都是云计算中的概念。为了方便不同地理区域中用户的使用,大型云服务提供商一般会根据用户需求量在不同的城市、省份、国家或洲创建不同的大型云计算机房。这些不同区域机房间一般是不能“内网连通”的。这些区域就称为一个Region。
这里存在一个问题:同一Region机房是如何实现同域容灾的?为了增强容灾能力,在一个Region中又设置了不同的Availability Zone。这些AZ间实现了内网连通,且用户可以根据自己所在的具体位置自动选择同域中的不同AZ。当用户所要访问的AZ出现问题后,系统会自动切换到其它可用的AZ。例如,AWS将全球划分为了很多的Region,例如美国东部区、美国西部区、欧洲区、非洲开普敦区、亚太区等。像Eureka系统架构图中的us-east-1c、us-east-1d、us-east-1e就是us-east-1这个Region中的c、d、e三个AZ。
再如,阿里云在我国境内的Region有杭州、北京、深圳、青岛、香港等,境外Region有亚太东南1区(新加坡)、亚太东南2区(悉尼)、亚太东北1区(东京)等。3、Eureka中的Region与Zone配置
需求
假设某公司的服务器有Beijing、Shanghai等多个Region。Beijing这个Region中存在两个AZ,分别是bj-1与bj-2,每个AZ中有三台Eureka Server。h-1与h-2两台主机提供的都是相同的Service服务,根据地理位置的不同,这两台主机分别注册到了距离自己最近的不同AZ的Eureka Server。
Server AZ bj-1配置
Server AZ bj-2配置Zuul AZ bj-1配置
Zuul AZ bj-2配置
Service AZ bj-1配置
Service AZ bj-2配置
优先选择同zone服务配置
当一个region有多个zone时,微服务调用应用时优先调用同zone内的应用。原因是eureka client有个配置prefer-same-zone-eureka,默认为true。当同zone中的应用均不可用时,才会调用其它zone中的服务。
指定远程Region配置
对于本地Region中的所有服务均不可用时,可以指定从远程Region获取。不过这种情况获取到的结果可能与从本地Region获取的结果不同,除非这些Region实现了跨域数据复制。若要想从远程Region获取服务,客户端需要通过设置如上属性指定远程Region,并在defaultZone中指出这些远程域中EurekaServer的地址。