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