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服务等。

Nacos注册中心和配置中心

2.1 Nacos注册中心简易架构

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服务注册表结构

Nacos注册中心和配置中心

3.配置中心

Nacos除了可以作为注册中心以外,还可以作为配置中心,我们公司现在也在用Nacos作为配置管理中心, 我们将Namespace作为隔离开发、生成环境的标准,groupId作为隔离项目,dataId就是我们具体的配置了。

Nacos注册中心和配置中心

3.1 Client端获取配置信息

  1. Client发起获取配置的请求,首先检查本地是否有副本,如果没有则通过HTTP GET请求从Server端拉取配置信息,然后保存副本到本地。如果拉取配置信息失败或超时,Client有两种熔断策略:1.最大超时时间。2.最大重试次数3次。
  2. 注册配置监听器
  3. Client长轮询拉取配置信息,按批次(3000个一组)通过线程池执行拉取任务。

3.2 Server端发布配置信息

  1. Server端启动的时候就会执行初始化方法,从数据库中加载配置信息到Node本地,这服务端节点会做数据的检查,判断心跳时间和现在间隔超过6小时,那么就从数据库全量加载,否则是增量加载。
  2. 配置的发布:当操作者发布了一个配置信息,那么服务节点就会将这个配置信息保存到DB,然后发布一个ConfigDataChangeEvent事件给其它服务节点。
  3. 服务端专门有一个线程池来处理Client的长轮询任务,将配置信息高速客户端。