spring-cloud-3

2023-12-24  本文已影响0人  hemiao3000

分布式服务治理

服务治理中心

服务治理中心是微服务(分布式)架构中最基础和最核心的功能组件,它主要对各个服务实例进行管理,包括服务注册和服务发现等。

搭建 Eureka 服务治理中心

  1. 创建项目,引入依赖
  2. 配置 application.yml
  3. 启动项目

服务发现

  1. 创建新项目,引入依赖
  2. 配置 applicaiton.yml
  3. 启动项目
  4. 验证

多个服务治理中心实例

为了避免“单个服务治理中心宕机后服务不可用”问题,我们希望服务治理中心也能有多个实例。

为服务治理中心添加 eureka.client.service-url.defaultZone 配置项。

为各微服务实例添加 eureka.client.service-url.defaultZone 配置项。

Eureka 治理机制

所谓服务调用,就是一个服务调用另外一个服务的过程。要

解释 Eureka 作为服务治理中心的服务调用过程,需要讨论其基础架构的 3 个重要概念。

(1)服务治理中心:指 Eureka 服务器,在教材代码清单3-19中,使用 FUND 代替了服务器名称(或者地址)和端口。之所以可以这样,是因为 FUND 这个名称是在 Eureka 服务治理中心注册的微服务名称,它下面存在 7001 和 7002 两个端口资金微服务实例,所以可以轮询选择其中一个。这便是服务治理中心的作用之一。 此外,服务治理中心还会提供服务注册、失败剔除、服务续约和服务下线等功能,用来治理各个微服务实例。

(2)服务提供者:在教材代码清单 3-17 到代码清单 3-19 中,是理财产品微服务调用资金微服务,所以资金微服务是我们例子中的服务提供者。在微服务系统中,服务提供者主要是以 REST 风格的端点被服务消费者调用的,而服务提供者是注册在 Eureka 中的,所以 Eureka 可以对其进行治理。

(3)服务消费者:这里的服务消费者是理财产品微服务(Product), 它会解析类似 FUND 这样的微服务名称。解析的过程是,首先根据这个名称从服务治理中心获取服务提供者的实例列表,保存在本地,然后通过特定的负载均衡的策略确定具体的实例,最后通过请求该实例获取数据。教材的例子中使用了 Ribbon 来实现服务消费,在未来还有更为简便的 OpenFeign 需要介绍。

服务治理中心工作原理

分 3 个维度来讨论:

(1)微服务实例和服务治理中心的关系:注册、续约、下线。
(2)微服务治理中心:相互复制、服务剔除、自我保护。
(3)微服务之间的相互调用:服务获取、服务调用。

Region 和 Zone

Region 和 Zone 是来自亚马逊云技术服务(Amazon Web Services, AWS)平台的概念。亚马逊之所以提出这样的概念,是因为亚马逊是全球服务的公司,它的站点是全球范围的。

假设你在北京调用亚马逊在纽约的站点服务,那么至少会有以下两个问题:距离问题和地区差异问题。

为了解决这两个问题,亚马逊提出了 Region 和 Zone 的概念。Region 是个更大的地理范围,在同一个 Region在 中内法律、语言和文化等是接近的,这就解决了地区差异问题;Zone 代表一个从大的区域(Region)切分出来的更小的区域(Zone)。同一个 Zone 中相互之前的地理位置应该是临近的,这就解决了距离问题。

Eureka 关键源码解读

(1)@EnableDiscoveryClient 注解;
(2)DiscoveryClient 接口;
(3)EndpointUtils.getServiceUrlsFromConfig() 方法
(4)DiscoveryClient.initScheduledTasks() 方法
(5)DiscoveryClient.register() 方法
(6)RestTemplateTransportClientFactory.register() 方法

Eureka 使用注意点

(1)对于服务注册,启动 Eureka 客户端,它不会马上注册到 Eureka 服务器。
(2)对于服务发现,客户端存在自己的缓存清单。

Eureka 配置

Eureka 的配置主要集中的客户端。它们都以 eureka.client 开头。

(1)enabled:是否启用 Eureka 客户端。默认值 true 。

(2)registry-fetch-interval-seconds:从Eurda服务器获取注册服务实例清单的时间间隔(单位秒) 。默认值 30 。

(3)instance-info-replication-interval-scconds :从更新服务实例信息到Eureka同步的时间间隔(单位秒) 。默认值 30 。

(4)initial-instace-info-replication-interval-seconds:将实例信息 初始化到Eurcka服务端的时间间隔(单位秒)。默认值 40 。

(5)eureka-servic-url-poll-interval-seconds:轮询Eureka服务地址更新的时间间隔(单位秒),在使用 Spring Cloud Config后,可以动态刷新serviceUrl。默认值 300 。

(6)eureka-server-read-timeout-seconds:读取Eureka服务器信息的超时时间(单位秒)。 默认值 8 。

(7)eurcka-server-connect-timeout-seconds:连接Eurcka服务器的超时时间(单位秒) 。默认值 5 。

(8)eureka-server-total-connections:Eureka客服端连接Eureka 服务器的连接总数 。默认值 200 。

(9)eureka-server-total-connections-pe-host:Eureka 客户端到每一个Eureka服务的链接总数。默认值 50 。

(10)cureka-connection-idle-timeout-seconds:Eureka 客户端连接Eureka服务器的超时关闭时间(单位秒) 。默认值 30 。

(11)heartbeat-executor-thread-pool-size:心跳任务连接池线程数。默认值 2 。

(12)heartbeat-executor-exponential-back-off-bound:心跳超时重试延迟时间的最大乘数值 。默认值 0 。

(13)cache-refresh-executor-thread-pool-size:缓存刷新连接池线程数。默认值 2 。

(14)cache-refresh-executor-exponential-back-off-bound:缓存刷新重试延迟时间的最大乘数值。默认值 10 。

(15)use-dns-for-fetching-service-urls:是否使用DNS地址来获取serviceUrl。默认值 false 。

(16)register-with-cureka:是否需要将实例注册到Eureka服务器。 默认值 true 。

(17)prefer-same-zone-cureka:是否偏爱使用相同Zone的Eureka服务器。默认值 true 。

(18)filter-only-up-instances:获取实例信息时是否过滤服务,只保留为UP状态的。默认值 true

(19)fetch-registry:是否启用服务获取。默认值 true 。

上一篇下一篇

猜你喜欢

热点阅读