默认自带负载均衡
因为是自带ribbon :1.支持负载均衡 2.支持restTemplate风格的远程调用
Nacos服务注册表结构:
为什么Nacos这么火?
- 背景强大,而且没有停更
- Eureka和Zookeeper都不支持大量的服务实例,Eureka因为所有的服务实例在每一台EurekaService中都保存了,大量的服务实例会产生大量的心跳检测信息,
导致Eureka Service无法支持高并发的操作
Zookeeper的话,会将服务实例的上线下线通知到每一台服务实例,如果频繁上下线的话,会去通知大量的服务实例,导致短时间网络压力增大,性能下降
而Nacos 在开源版本中,服务实例注册的支撑量约为 100 万,服务的数量可以达到 10 万以上
- 可以少维护一些组件,如果用config的话 需要用bus总线来实时刷新
Nacos服务注册发现步骤:
1、服务提供者将注册信息写入到Nacos注册中心的服务注册表中,是在spring 容器初试完之后会进行节点注册
2、服务注册中心将服务提供者的实例交给Service Holder(服务持有容器)处理,服务实例将会挂载在Service Holder的空间下
3、服务注册成功后,提供者将与服务中心维持心跳,未能及时发送心跳的服务将会被剔除, 超过15s没有检测到客户端的心跳就会把它的healthy属性设置为false,这个时候客户端请求服务实例数据的时候就不会发现这个实例了,而如果是超过30s都没有收到这个实例数据,就会剔除
4、服务发现支持两种场景
消费者可以直接向注册中心发送获取某个服务实例的请求,这种情况下注册中心将返回所有可用的服务实例给消费者,但是一般不推荐这种情况
服务的消费者向注册中心订阅某个服务,并提交一个监听器,当注册中心中服务发生变更时,监听器会收到通知,这时消费者更新本地的服务实例列表,以保证所有的服务均是可用的
Eureka 和 Nacos 都支持 AP
但是Nacos还可以支持CP
切换的命令:
curl -X PUT `$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
Nacos的好处:
- 注册中心,配置中心合二为一
Eureka 闭源了
Distro协议(AP)
称为临时数据的一致性协议
Raft算法(CP)
eureka对于提高并发读写利用的是 二级缓存的思想,但是
nacos对于提高并发读写的话就是用了copyOnWrite的思想:
读直接读注册表,写的话先加锁然后对于注册表进行复制一份
写入,最后把新的内容复制上去