1.微服务架构
微服务架构是由单体架构向SOA服务化架构之后提出的一种去中心化、服务化的架构模式。微服务的特点是业务边界划分明确、独立的部署、服务之间通过RPC进行通信。 优点:
- 服务职责单一,高内聚,低耦合。
- 领域边界清晰。
- 弹性扩缩容方便,部署便捷。
缺点:
- 直线增加运维成本。
- 耦合度降低所带来的通信成本。
- 容灾性降低、性能监控问题变得复杂。
- 分布式问题,例如事务、一致性等。
1.1 SpringCloud Netflix组件
- Eureka:服务的注册和发现,目前Eureka的地位正在下降,取而代之的是Nacos。
- Zuul:微服务网关,负责网关的智能、负载、路由等。
- Ribbon:客户端调用负载。
- Feign:RPC框架,进行服务调用,内部集成了Ribbon。
- Hystrix:熔断器,进行对调用接口的监控和熔断。
- zipkin:分布式链路追踪。
- 等等
1.2 SpringCloud Alibaba组件
- Nacos:服务的注册与发现、配置中心。
- Sentinel:流量控制、熔断、限流。
- Dubbo:RPC框架。
- Seata:分布式微服务解决方案。
- 等等
2.Nacos入门
Nacos提供了服务发现与路由、健康检查、配置中心、动态DNS服务等。
2.1 Nacos注册中心简易架构
- `服务注册`:依赖了Nacos Client的业务服务,在启动的时候就会通过HTTP的方式向Nacos Server注册自己,将自己的ip、端口等元数据信息注册到注册中心上,Nacos Server会将这些元数据保存到一个嵌套的Map集合中,注册的时候并不是同步,而是客户端通过HTTP接口调用Naocs Server后直接返回,然后服务端将这个实例写入一个队列,后台有一个单线程线程池来进行实例的注册,修改注册表基于读写分离模式CopyOnWrite方式进行。
- `心跳`:Nacos Client会在后台维护一个定时器来和Nacos Server进行通信,上报自己的存活信息防止被路由剔除,默认定时器是5s一次。
- `元数据同步`:Nacos Server端集群模式下,节点之间会进行元数据的同步,保证一致性。
- `服务发现`:业务服务在调用其他服务时,会通过Nacos Client向Nacos Server拉取注册表清单,并且缓存到本地。并且后台有线程定时来拉取Nacos Server最新的注册表清单。
- `健康检查`:Nacos Server后台会有一个定时任务线程来检查这些服务的健康状况,如果某个服务超过15s没有上报自己的心跳,那么就将这个服务的`healthy`属性置为false,那么客户端就不会拉取到这个服务。如果超过30s没有收到服务的心跳,那么将这个服务直接剔除下线。
2.2 Nacos服务注册表结构
3.配置中心
Nacos除了可以作为注册中心以外,还可以作为配置中心,我们公司现在也在用Nacos作为配置管理中心, 我们将Namespace作为隔离开发、生成环境的标准,groupId作为隔离项目,dataId就是我们具体的配置了。
3.1 Client端获取配置信息
- Client发起获取配置的请求,首先检查本地是否有副本,如果没有则通过HTTP GET请求从Server端拉取配置信息,然后保存副本到本地。如果拉取配置信息失败或超时,Client有两种熔断策略:1.最大超时时间。2.最大重试次数3次。
- 注册配置监听器
- Client长轮询拉取配置信息,按批次(3000个一组)通过线程池执行拉取任务。
3.2 Server端发布配置信息
- Server端启动的时候就会执行初始化方法,从数据库中加载配置信息到Node本地,这服务端节点会做数据的检查,判断心跳时间和现在间隔超过6小时,那么就从数据库全量加载,否则是增量加载。
- 配置的发布:当操作者发布了一个配置信息,那么服务节点就会将这个配置信息保存到DB,然后发布一个
ConfigDataChangeEvent
事件给其它服务节点。 - 服务端专门有一个线程池来处理Client的长轮询任务,将配置信息高速客户端。