美文网首页
spring-cloud-3

spring-cloud-3

作者: hemiao3000 | 来源:发表于2023-12-24 08:53 被阅读0次

    分布式服务治理

    服务治理中心

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

    搭建 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 。

    相关文章

      网友评论

          本文标题:spring-cloud-3

          本文链接:https://www.haomeiwen.com/subject/pkzcndtx.html