springcloud微服务实战Spring Boot 手边读微服务核心玩法

微服务实战SpringCloud之Eureka实现类似异地多活

2018-12-07  本文已影响173人  wangxiaowu241

zone&region

eureka_region_zone

上图是eureka高可用架构,也是Netflix推荐的用法。

上图的us-east-1c、us-east-1d、us-east-1e各自是一个zone,每个zone内都有各自的eureka server & eureka client,就是说每个zone内都有服务注册中心及微服务的提供者和消费者。

那么zone和region在eureka中的概念是什么呢?

AWS_regions

AWS中,region有us-east-1、us-east-2等,分别表示为美国东部(弗吉尼亚北部)、美国东部(俄亥俄州)表示不同区域。

而us-east-1可能有us-east-1a、us-east-1b等不同的zone(可用区),类似我们的机房的概念。

eureka中的zone的使用

eureka server -zone1

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
    metadata-map.zone: zone1
  client:
    region: cn-east
    service-url:
      defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka

spring:
  application:
    name: eureka
  profiles:
    active: ${boot.profile:dev}

eureka server -zone2

server:
  port: 8762

eureka:
  instance:
    hostname: localhost
    metadata-map.zone: zone2
  client:
    region: cn-east
    service-url:
      defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka

spring:
  application:
    name: eureka
  profiles:
    active: ${boot.profile:dev}

Zuul-zone1

spring:
  application:
    name: zuul
server:
  port: 8081

eureka:
  instance:
    metadata-map.zone: zone1
  client:
    region: cn-east
    service-url:
      defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka

Zuul-zone2

spring:
  application:
    name: zuul
server:
  port: 8082

eureka:
  instance:
    metadata-map.zone: zone2
  client:
    region: cn-east
    service-url:
      defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka

cart-zone1

server:
  port: 8091

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka
    region: cn-east  
  instance:
    status-page-url-path: /info
    health-check-url-path: /health
    metadata-map.zone: zone1    

spring:
  application:
    name: cart
  profiles:
    active: ${boot.profile:dev}

Cart-zone2

server:
  port: 8092

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka
    region: cn-east  
  instance:
    status-page-url-path: /info
    health-check-url-path: /health
    metadata-map.zone: zone2    

spring:
  application:
    name: cart
  profiles:
    active: ${boot.profile:dev}

上面的配置概括来说就是,有三个应用,分别是eureka、zuul、cart。每个应用通过指定不同的profile启动,共启动六个微服务。zone1有eureka server、zuul、cart,zone2有eureka server、zuul、cart。

通过zuul来调用cart应用的controller,原cart应用zone1的接口地址为:POST http://localhost:8091/cart/1

通过zuul网关来访问,地址是POST http://localhost:8081/cart/1.

持续通过访问zone1的zuul暴露出来的接口 http://localhost:8081/cart/1.发现始终路由到zone1的cart应用。

这时候,我们将zone1的cart应用下线,再次访问,报错,访问出错,过会再访问,路由到zone2的cart应用。

总结:

eureka中region的使用

目前eureka server提供配置remoteRegionUrlsWithName,key为region的名称,value为远程eureka server list。仅当本地服务不可用时,从远程(其他region)获取服务列表。
eureka client 也提供了fetchRemoteRegionsRegistry用于从远程获取,它的值为region list 用逗号分隔开。

使用以上两个配置可以实现类似于异地多活的功能。

上一篇 下一篇

猜你喜欢

热点阅读