Spring Cloud Eureka: 指定Zone方式

目录
  • Eureka如何指定Zone
  • Eureka中的region和Zone
    • 概念
    • 分区服务架构图
    • Eureka中Regin和Zone的相关配置
      • 服务注册相关
      • 服务调用

Eureka如何指定Zone

有坑。

先说结论:如果想给当前服务指定属于哪个zone, 使用

eureka.instance.metadata-map.zone=myzone

属性是无效的,而应该使用:

eureka.client.availabilityZones.beijing=myzone # beijing是region

同时指定region:

eureka.client.region=beijing

至于原因,可以在EurekaClientConfigBean的源码中找到:

@Override
    public String[] getAvailabilityZones(String region) {
        String value = this.availabilityZones.get(region);
        if (value == null) {
            value = DEFAULT_ZONE;
        }
        return value.split(",");
    }

也就是说在判断当前服务属于哪个zone时,先从availabilityZone这个Map中查找,查找用的key是region名。

如果找不到,就使用默认值,即我们熟知的defaultZone。

Eureka中的region和Zone

像亚马逊这种大型的跨境电商平台,会有很多个机房。这时如果上线一个服务的话,我们希望一个机房内的服务优先调用同一个机房内的服务,当同一个机房的服务不可用的时候,再去调用其它机房的服务,以达到减少延时的作用。

于是亚马逊的 AWS 提供了 region 和 zone 两个概念

概念

  • region:可以简单理解为地理上的分区。比如亚洲地区,或者华北地区,再或者北京地区等等,没有具体大小的限制,根据项目具体的情况,可以自行划分region。
  • zone:可以简单理解为 region 内的具体机房,比如说 region 划分为华北地区,然后华北地区有两个机房,就可以在此 region 之下划分出 zone1、zone2 两个 zone

eureka 也借用了 region 和 zone 的概念

分区服务架构图

如图所示,有一个 region:华北地区,下面有两个机房,机房A 和机房B

每个机房内有一个 Eureka Server 集群 和两个服务提供者 ServiceA 和 ServerB

现在假设 serverA 需要调用 ServerB 服务,按照就近原则,serverA 会优先调用同一个 zone 内的 ServiceB,当 ServiceB 不可用时,才会去调用另一个 zone 内的 ServiceB

Eureka中Regin和 Zone的相关配置

  • 服务注册:要保证服务注册到同一个zone内的注册中心,因为如果注册到别zone的注册中心的话,网络延时比较大,心跳检测很可能出问题。
  • 服务调用:要保证优先调用同一个zone内的服务,只有在同一个zone内的服务不可用时,才去调用别zone的服务。

服务注册相关

eureka:
  client:
    # 尽量向同一区域的 eureka 注册,默认为true
    prefer-same-zone-eureka: true
    #地区
    region: huabei
    availability-zones:
      huabei: zone-1,zone-2
    service-url:
      zone-1: http://localhost:30000/eureka/
      zone-2: http://localhost:30001/eureka/

当存在多个注册中心时,选择逻辑为

  • 如果 prefer-same-zone-eureka 为 false,按照 service-url 下的 list 取第一个注册中心来注册,并和其维持心跳检测,不再向list内的其它的注册中心注册和维持心跳。只有在第一个注册失败的情况下,才会依次向其它的注册中心注册,总共重试3次,如果3个service-url都没有注册成功,则注册失败。注册失败后每隔一个心跳时间,会再次尝试。
  • 如果 prefer-same-zone-eureka 为true,先通过 region 取 availability-zones 内的第一个zone,然后通过这个zone取 service-url 下的list,并向list内的第一个注册中心进行注册和维持心跳,不再向list内的其它的注册中心注册和维持心跳。只有在第一个注册失败的情况下,才会依次向其它的注册中心注册,总共重试3次,如果3个service-url都没有注册成功,则注册失败。注册失败后每隔一个心跳时间,会再次尝试。

为了保证服务注册到同一个 zone 的注册中心,一定要注意 availability-zones 的顺序,必须把同一 zone 写在最前面

服务调用

eureka:
  instance:
    # 服务和注册中心的心跳间隔时间,默认为30s
    lease-renewal-interval-in-seconds: 30
    # 服务和注册中心的心跳超时时间,默认为90s
    lease-expiration-duration-in-seconds: 90
    metadata-map:
      # 当前服务所属的 zone
      zone: zone1
 

服务消费者和服务提供者分别属于哪个zone,均是通过 eureka.instance.metadata-map.zone 来判定的。

服务消费者会先通过 ribbon 去注册中心拉取一份服务提供者的列表,然后通过 eureka.instance.metadata-map.zone 指定的 zone 进行过滤,过滤之后如果同一个 zone 内的服务提供者有多个实例,则会轮流调用。

只有在同一个 zone 内的所有服务提供者都不可用时,才会调用其它zone内的服务提供者。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Spring Cloud 系列之注册中心 Eureka详解

    1.1 简介 1.1.1 概述   Netflix Eureka 是由 Netflix 开源的一款基于 REST 的服务发现组件,包括 Eureka Server 及 Eureka Client.2012 年 9 月在 GitHub 上发布 1.1.2 版本,目前 Netflix 以宣布闭源,所以市面上还是以 1.x 版本为主.Eureka 提供基于 REST 的服务,在集群中主要用于服务管理.Eureka 提供了基于 Java 语言的客户端组件,客户端组件实现了负载均衡的功能,为业务组件的集群

  • Springcloud中的region和zone的使用实例

    一.背景 用户量比较大或者用户地理位置分布范围很广的项目,一般都会有多个机房.这个时候如果上线springCloud服务的话,我们希望一个机房内的服务优先调用同一个机房内的服务 ,当同一个机房的服务不可用的时候,再去调用其它机房的服务,以达到减少延时的作用. 二.概念 eureka提供了region和zone两个概念来进行分区,这两个概念均来自于亚马逊的AWS: (1)region:可以简单理解为地理上的分区,比如亚洲地区,或者华北地区,再或者北京等等,没有具体大小的限制.根据项目具体的情况,可

  • springcloud微服务之Eureka配置详解

    Eureka注册中心/服务发现框架 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能. Eureka包含两个组件:Eureka Server和Eureka Client. Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Serve

  • SpringCloud Eureka的使用教程

    什么是Eureka Eureka是Netfilx开源的一个用来实现微服务的注册与发现的组件.它包含Server和Client两部分. 为什么要有Eureka 例如目前有两个服务分别为服务A,服务B,我们可以在服务A调用服务B的接口地址完成调用,但是当服务间的调用关系复杂起来的时候,比如服务A还需要调用服务CDE,那么服务A需要维护它调用的所有服务的地址,一旦地址的变更都需要手动去修改. 当使用了Eureka这样的服务治理框架后,服务ABCDE可以一起注册到EurekaServer服务上,直接通过

  • Spring Cloud Eureka: 指定Zone方式

    目录 Eureka如何指定Zone Eureka中的region和Zone 概念 分区服务架构图 Eureka中Regin和Zone的相关配置 服务注册相关 服务调用 Eureka如何指定Zone 有坑. 先说结论:如果想给当前服务指定属于哪个zone, 使用 eureka.instance.metadata-map.zone=myzone 属性是无效的,而应该使用: eureka.client.availabilityZones.beijing=myzone # beijing是region

  • Spring Cloud Eureka服务注册中心入门流程分析

    目录 项目搭建 客户端注册 聚合层处理 Eureka架构 集群搭建 多区域配置 自我保护开关 心跳机制 Eureka实例信息存储 项目地址 在学习Ribbon使用的时候,我们是直接在配置文件中写死服务地址的,是不是特别的不方便?我们是不是需要一个统一的地方来维护这些服务,以及这些配置发生变化后,我们不需要重启服务. 所以这个时候需要引出一个新组件——eureka. 它主要可以帮助我们实现如下功能: 地址的统一维护服务提供者的动态上下线通知 服务提供者可以将服务注册到eureka上,eureka通

  • Spring Cloud Eureka(全面解析) 大白话

    目录 Eureka大白话解析 1.Eureka介绍 2.Eureka的工作细节 2.1EurekaServer 2.2EurekaClient Eureka分区策略 第一步:背景和概念介绍 第二步:相关参数介绍 Eureka大白话解析 笔记补录: 1.Eureka 介绍 Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责实现微服务架构中的服务治理功能. 服务治理是微服务架构中必不可少

  • Spring cloud Eureka注册中心搭建的方法

    前提  系统安装jdk1.8及以上,配置好maven的ide(这里用idea进行演示,maven版本3.5,配置阿里云源) 项目搭建 新建一个maven项目,创建最简单的那种就好,项目名这里为EurekaServerDemo,包名什么的随意,项目打包方式为jar, 也可以使用spring官方的生成器,官方的生成器会创建基础的springboot项目结构.这里为了演示,都可以 修改pom文件,参考如下,版本推荐和本文相同,springboot和cloud版本的坑很多 <?xml version=&qu

  • Spring Cloud Eureka服务治理的实现

    什么是Spring Cloud Eureka Spring Cloud Eureka 是 Spring Cloud 中的一个组件,它是基于 Netflix Eureka 做了二次封装,主要是负责完成微服务框架中服务治理的功能.Spring Cloud通过为 Eureka 增加了 Spring Boot 风格的自动化配置,我们只需要通过简单的引用依赖和注解就能让 Spring Boot 够将的微服务应用轻松的与 Eureka 服务治理体系进行整合. 服务治理 服务治理是微服务框架中最为核心和基础的

  • Spring Cloud Eureka 注册与发现操作步骤详解

    在搭建Spring Cloud Eureka环境前先要了解整个架构的组成,常用的基础模式如下图: 服务提供者:将springboot服务编写好以后,通过配置注册中心地址方式注册,提供给消费者使用. 注册中心:服务的中间桥梁,服务提供者将服务注册.服务消费者可以通过注册信息调用需要使用的服务. 服务消费者:通过规定的调用方式,读取注册中心的注册信息,调用相应的服务. 根据后续的服务复杂度进化以后,可以看到服务提供者也可以是服务消费者,服务消费者也可以是服务提供者.根据不同的业务情况是可以互相调用的

  • Spring Cloud Eureka基础应用及原理

    目录 Eureka简介 搭建Eureka服务注册中心 搭建Eureka服务提供者 搭建Eureka服务调用者 Eureka服务注册和发现 Eureka简介 Eureka这个词来源于古希腊语,意为“我找到了!我发现了!”.据传,阿基米德在洗澡时发现浮力原理,高兴得来不及穿上衣服,跑到街上大喊:“Eureka! ”.在Netflix中,Eureka是一个RESTful风格的服务注册与发现的基础服务组件.Eureka由两部分组成,一个是Eureka Server,提供服务注册和发现功能,即我们上面所说

  • SpringCloud之服务注册与发现Spring Cloud Eureka实例代码

    一.Spring Cloud简介 Spring Cloud是一个基千SpringBoot实现的微服务架构开发 工具.它为微服务架构中涉及的 配置管理.服务治理. 断路器. 智能路由.微代理. 控制总线. 全局锁. 决策竞选.分布式会话和集群状态管理等操作提供了一种简单的开发方式. Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品,还可能会新增),如下所述. Spring Cloud Config: 配置管理工具.Spring Cloud Netflix: 核心组件

  • Spring cloud config 配置文件加密方式

    前言 我们会使用git来保存我们项目的配置文件,但是文件中总有一些敏感数据,对于这些敏感数据我们通常需要给它加密,加密通常有两种加密方式,一种是对称加密,一种是非对称加密,对称加密简单方便,但是安全性没有非对称加密高,非对称加密需要生成证书,安全性比较高.但是请记住没有绝对的安全. 配置环境 java8 jce config server 的加密解密需要依赖与java Cryptography Extension (jce) 安装方式:可以参考里面的README,其实也很简单:把jdk下面 /j

  • spring cloud eureka微服务之间的调用详解

    微服务之间的调用如何实现 首先 你需要两个或以上的微服务模块 至于怎么创建可以参考我上一篇博客 spring cloud eureka注册中心 如果想在页面显示 那么需要先加上 compile 'org.springframework.boot:spring-boot-starter-thymeleaf' 这个thymeleaf依赖 springboot推荐使用thymeleaf模板 它的最大好处就是原型即是模板 后缀是html html文件 需要放在resources/templates文件夹

随机推荐