SpringCloud:Eureka微服务跨分区调用region、zone、gateway

PS:未经测试,后补

目的

系统为分区架构,减少中心化服务,避免单点风险。

region1和region2为完全独立分区,分区数据无交集,互不依赖。

region1中的处理由于特殊原因用到region2中的服务,需要提供技术支持。

思路

  • 新架构不影响独立region内部架构
  • region直接互不影响
  • 通过gateway处理转发逻辑并进行转发,如果是同一个region直接路由到内部微服务,如果是另一个region则通过调用其他region的网关路由到其微服务。

架构设计

原始架构

需求架构

设计架构

技术实现

eureka server配置

gateway的独立region注册中心

spring:
  application:
    name: eureka-server
eureka:
  client:
    region: region0  #独立区域
    availability-zones:
      region0: zone-0 #内部集群
      region1: zone-1
      region2: zone-2
    service-url:
      zone-0: http://localhost:9001/eureka,http://localhost:9002/eureka
      zone-1: http://localhost:9001/eureka
      zone-2: http://localhost:9002/eureka

provider1的独立region注册中心

spring:
  application:
    name: eureka-server
eureka:
  client:
    region: region1  #独立区域
    availability-zones:
      region0: zone-0 #内部集群
      region1: zone-1
      region2: zone-2
    service-url:
      zone-0: http://localhost:9001/eureka,http://localhost:9002/eureka
      zone-1: http://localhost:9001/eureka
      zone-2: http://localhost:9002/eureka

provider2的独立region注册中心

spring:
  application:
    name: eureka-server
eureka:
  client:
    region: region2  #独立区域
    availability-zones:
      region0: zone-0 #内部集群
      region1: zone-1
      region2: zone-2
    service-url:
      zone-0: http://localhost:9001/eureka,http://localhost:9002/eureka
      zone-1: http://localhost:9001/eureka
      zone-2: http://localhost:9002/eureka
 

 eureka client配置

gateway注册

spring:
  application:
    name: gateway
eureka:
  instance:
    metadata-map:
      zone: zone-0 #归属zone,优先调用zone-0
  client:
    region: region0
    availability-zones:
      region0: zone-1
      region1: zone-1
      region2: zone-2
    service-url:
      zone-0: http://localhost:9001/eureka,http://10.2.55.100:31000/eureka/
      zone-1: http://10.2.55.100:31000/eureka/
      zone-2: http://localhost:9002/eureka

provider1注册

spring:
  application:
    name: provider1
eureka:
  instance:
    metadata-map:
      zone: zone-1 #归属zone,优先调用
  client:
    region: region1
    availability-zones:
      region0: zone-0
      region1: zone-1
      region2: zone-2
    service-url:
      zone-0: http://localhost:9001/eureka,http://localhost:9002/eureka/
      zone-1: http://localhost:9001/eureka
      zone-2: http://localhost:9002/eureka

 provider2注册

spring:
  application:
    name: provider2
eureka:
  instance:
    metadata-map:
      zone: zone-2 #归属zone,优先调用
  client:
    region: region2
    availability-zones:
      region0: zone-0
      region1: zone-1
      region2: zone-2
    service-url:
      zone-0: http://localhost:9001/eureka,http://localhost:9002/eureka/
      zone-1: http://localhost:9001/eureka
      zone-2: http://localhost:9002/eureka

consumer注册

spring:
  application:
    name: consumer1
eureka:
  instance:
    metadata-map:
      zone: zone-1 #归属zone,优先调用
  client:
    region: region1
    availability-zones:
      region0: zone-0
      region1: zone-1
      region2: zone-2
    service-url:
      zone-0: http://localhost:9001/eureka,http://localhost:9002/eureka/
      zone-1: http://localhost:9001/eureka
      zone-2: http://localhost:9002/eureka