问题1:Nacos 和 Eureka的区别?
问题2:Nacos 和 Zookeeper 的区别?
1、注册中心:实际就是存放服务的地址信息,能够实现动态感知。常见的是Zookeeper、Eureka、Consul、Nacos、Redis等。
实现原理:
被调服务(生产者)在项目启动的时候主动将信息(服务名称,地址等)注册到注册中心;
主调服务(消费者)从注册中心获取被调服务的信息;
主调服务对被调服务进行负载均衡,选择一个地址在本地进行接口调用。
2、负载均衡器
本地负载均衡器
我们的消费者从注册中心上获取接口调用地址列表,在本地实现负载均衡算法(轮询、随机、hash一致性、权重)等原理。总结:获取接口地址列表,采用算法选择一个接口地址实现本地的rpc 远程调用。
常见的本地负载均衡器:ribbon(spring cloud 第一代)、loadbalancer(spring cloud 第二代)
本地实现负载均衡器 与 Nginx 实现负载均衡的区别
- Nginx 属于服务器端负载均衡器,客户端所有的请求都统一发送到Nginx,再由Nginx转发到真实服务,以达到负载均衡的目的;
- 本地负载均衡器:属于客户端负载均衡器;
本地负载均衡器 与 Nginx实现负载均衡器的应用场景区别
- Nginx负载均衡器一般用于 tomcat/jetty 服务器
- 本地负载均衡器一般用于微服务rpc 远程调用服务,如dubbo、restTemplate、openFeign或者rpc远程调用框架
3、OpenFeign 客户端
springCloud第一代采用 feign,第二代采用 openFeign;
OpenFeign客户端租用:是一个Web 声明式的 Http 客户端远程调用工具,底层封装了HttpClient技术;
OpenFeign属于SpringCloud 自己研发,而Feign 是 netflix。
4、分布式配置中心
介绍
分布式配置中心可以实现不需要重启我们的服务器,动态的修改我们的配置文件内容;-
常见的配置中心有携程的阿波罗、SpringCloud Config、Nacos轻量级的配置中心等。
原理
- 本地应用首次读取云端分布式配置中心文件(建立长连接)
- 本地应用读取到配置文件后,立刻在本地jvm 和 硬盘中缓存一份
- 当分布式配置中心的配置文件发生变化(MD5|版本号),将变化结果通知到本地应用,使本地应用及时刷新配置
5、Nacos对比Zookeeper、Eureka之间的区别
CAP定律
这个定理的内容是指的是在一个分布式系统中、Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
一致性©:在分布式系统中,如果服务器集群,每个节点在同时刻访问必须要保持数据的一致性。
可用性(A):集群节点中,部分节点出现故障后任然可以使用 (高可用)。
分区容错性§:在分布式系统中网络会存在脑裂的问题,部分Server与整个集群失去节点联系,无法组成一个群体。
注:只有在CP和AP选择一个平衡点
Zookeeper
采用CP 保证数据一致性问题。原理:采用Zab 原子广播协议。当我们的 zk 领导者因为某种原因宕机时,会自动触发,重新选择一个新的领导角色。整个选举的过程中,为了保证数据一致性,zk环境无法使用(本地缓存除外)。
Eureka
采用 AP的设计理念架构注册中心,完全去中心化的思想,也就是没有主从之分。每个节点都是均等,采用相互注册原理,只要有一个eureka 节点存活,就可以保证整个微服务的通讯。
Nacos 与 Eureka 区别
Nacos 的1.0 版本支持 CP 和 AP 混合模式集群,默认是采用 AP保证服务可用性。CP 的形式底层集群通过 raft 协议保证数据的一致性的问题。
如果我们采用 AP 模式,注册服务的实例仅支持临时注册形式(内存),在网络分区产生抖动的情况下,仍然可以继续注册服务列表。
如果我们采用 CP 模式,则必须保证数据的强一致性的问题;而在网络分区产生抖动的情况下,是无法继续注册服务。选择 CP 模式可以支持注册实例持久化。
Nacos切换集群模式
Nacos_server:port/nacos/v1/ns/operator/switches?entry=serverModel&value=CP
注:必须是 PUT 请求
2021-05-23 BILIBILI学习余胜军视频记录。