Nacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心)、动态配置服务(可以做配置中心)、动态 DNS 服务。
支持AP/CP/CAP
Zookeeper支持CP,而Eureka支持AP,nacos支持全部。
官方网址:http://nacos.io
nacos作为注册中心
1.先在官网上下载nacos中间件
服务注册中心原理:
心跳检查:每一个实例都会有心跳任务,会不断的发送实例的信息,nacos注册中心有一个健康检查任务,会轮循服务的上一次更新时间,若时间间隔大于15秒,则状态改为false,若间隔时间大于30秒,则删除服务。
Ribbon 做负载均衡:它只支持参数拼接调用,借助 Feign (实现远程调用接口使用就像本地接口一样调用,它本质上就是实现了参数的自动拼接),它底层还是依赖ribbon来实现真正的服务调用。
Ribbon依据服务名称使用动态代理去本地缓存中拉取服务,从而实现了远程接口的本地调用。
服务单会定时把服务放入本地缓存。所以就算注册中心挂掉,服务也能继续使用。图示如下:
sentinel服务降级和熔断:
对于订单链路里非核心的服务,若出现异常,使用服务降级类记录日志,并在后续补偿任务中重新补偿而并不终止流程,比如积分服务等。
在Feign的配置中把sentinel enabled打开为true.
执行降级和熔断的服务必须实现被执行降级和熔断的服务,实现其内部方法。
可以配置实现,也可以注解实现
Seat 实现分布式锁:
分布式锁实现的三种方式:
1)基于数据库实现分布式锁; 排他锁。
2)基于缓存(Redis等)实现分布式锁;
3)基于Zookeeper实现分布式锁;
二、分布式锁应该具备哪些条件
在分析分布式锁的三种实现方式之前,先了解一下分布式锁应该具备哪些条件:
1、在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行;
2、高可用的获取锁与释放锁;
3、高性能的获取锁与释放锁;
4、具备可重入特性;
5、具备锁失效机制,防止死锁;
6、具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败。
三、分布式锁的三种实现方