搭建Eureka - 分区

分区

对于一个用户量比较大或者地理位置分布范围很广的项目。跨地区调用时,延时比较大。我们可以通过同一个机房的服务优先调用同一个机房的服务,当本机房的服务不可用的时候,才会调用其他机房的服务。

Eureka中的分区概念

eureka提供了region和zone两个概念。

  • region: 地区。比如亚洲地区,欧洲地区。
  • zone: region内的某个机房。

我的使用案例

几个同事一起开发一个项目,服务数量比较多,本机开发,启动所有服务,机器会比较卡。我就考虑大家集中注册到一个eureka中,但是这样服务就会互相干扰。但是分区这种配置正好符合我的场景。

我们使用调试服务的时候,就在自己的机器上启动对应服务,进行调试,这样会调用自己的服务。
而调用正常的服务的时候,只要有一个人启动服务,就可以了。我们其他人就也可以调用了。

搭建实例代码

  • application-peer.yml
spring:
  application:
    # 指定应用的名称
    name: fxb-eureka-superman

server:
  port: ${eureka_port:8760}

eureka:
  instance:
    hostname: fxb-eureka-peer0
    # 更趋向IP地址
    prefer-ip-address: true
#    status-page-url-path: /actuator/info
#    health-check-url-path: /actuator/health
    secure-virtual-host-name: fxb.com
    virtual-host-name: moyang.com
    metadata-map:
        zone: superman
  client:
    service-url:
      wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eureka
      lipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eureka
      fengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eureka
      wangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka
      superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka
    # eureka client 刷新本地刷新时间,默认30s
    registry-fetch-interval-seconds: 5
    register-with-eureka: true
    fetch-registry: true
    # 更趋向同一zone的eureka
    prefer-same-zone-eureka: true
    region: beijing
    availability-zones:
      beijing: wangxiyue,superman,lipu_f,fengtiecheng,wangxiaowei_dev
  server:
    # eureka server 刷新read cache Map 的时间
    # 注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30秒
    response-cache-update-interval-ms: 30000
    #eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
    #由于启用了evict其实就用不太上改这个配置了
    #默认180s
    response-cache-auto-expiration-in-seconds: 180
    # 启动主动失效,并且每次主动失效检测时间间隔为3s
    eviction-interval-timer-in-ms: 3000
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: always

logging:
  level:
    root: INFO
  • application-peer1.yml
spring:
  application:
    # 指定应用的名称
    name: fxb-eureka-wangxiyue

server:
  port: ${eureka_port:8761}

eureka:
  instance:
    hostname: fxb-eureka-peer1
    # 更趋向IP地址
    prefer-ip-address: true
#    status-page-url-path: /actuator/info
#    health-check-url-path: /actuator/health
    secure-virtual-host-name: fxb.com
    virtual-host-name: moyang.com
    metadata-map:
      zone: wangxiyue
  client:
    service-url:
      superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka
      wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eureka
      lipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eureka
      fengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eureka
      wangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka
    # eureka client 刷新本地刷新时间,默认30s
    registry-fetch-interval-seconds: 5
    register-with-eureka: true
    fetch-registry: true
    # 更趋向同一zone的eureka
    prefer-same-zone-eureka: true
    region: beijing
    availability-zones:
      beijing: superman,wangxiyue,lipu_f,fengtiecheng,wangxiaowei_dev
  server:
    # eureka server 刷新read cache Map 的时间
    # 注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30秒
    response-cache-update-interval-ms: 30000
    #eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
    #由于启用了evict其实就用不太上改这个配置了
    #默认180s
    response-cache-auto-expiration-in-seconds: 180
    # 启动主动失效,并且每次主动失效检测时间间隔为3s
    eviction-interval-timer-in-ms: 3000
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: always

logging:
  level:
    root: INFO
  • application-peer2.yml
spring:
  application:
    # 指定应用的名称
    name: fxb-eureka-lipu_f

server:
  port: ${eureka_port:8762}

eureka:
  instance:
    hostname: fxb-eureka-peer2
    # 更趋向IP地址
    prefer-ip-address: true
#    status-page-url-path: /actuator/info
#    health-check-url-path: /actuator/health
    secure-virtual-host-name: fxb.com
    virtual-host-name: moyang.com
    metadata-map:
      zone: lipu_f
  client:
    service-url:
      superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka
      wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eureka
      lipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eureka
      fengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eureka
      wangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka
    # eureka client 刷新本地刷新时间,默认30s
    registry-fetch-interval-seconds: 5
    register-with-eureka: true
    fetch-registry: true
    # 更趋向同一zone的eureka
    prefer-same-zone-eureka: true
    region: beijing
    availability-zones:
      beijing: wangxiyue,superman,lipu_f,fengtiecheng,wangxiaowei_dev
  server:
    # eureka server 刷新read cache Map 的时间
    # 注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30秒
    response-cache-update-interval-ms: 30000
    #eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
    #由于启用了evict其实就用不太上改这个配置了
    #默认180s
    response-cache-auto-expiration-in-seconds: 180
    # 启动主动失效,并且每次主动失效检测时间间隔为3s
    eviction-interval-timer-in-ms: 3000
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: always

logging:
  level:
    root: INFO
  • application-peer3.yml
spring:
  application:
    # 指定应用的名称
    name: fxb-eureka-fengtiecheng

server:
  port: ${eureka_port:8763}

eureka:
  instance:
    hostname: fxb-eureka-peer3
    # 更趋向IP地址
    prefer-ip-address: true
#    status-page-url-path: /actuator/info
#    health-check-url-path: /actuator/health
    secure-virtual-host-name: fxb.com
    virtual-host-name: moyang.com
    metadata-map:
      zone: fengtiecheng
  client:
    service-url:
      superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka
      wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eureka
      lipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eureka
      fengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eureka
      wangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka
    # eureka client 刷新本地刷新时间,默认30s
    registry-fetch-interval-seconds: 5
    register-with-eureka: true
    fetch-registry: true
    # 更趋向同一zone的eureka
    prefer-same-zone-eureka: true
    region: beijing
    availability-zones:
      beijing: lipu_f,superman,wangxiyue,fengtiecheng,wangxiaowei_dev
  server:
    # eureka server 刷新read cache Map 的时间
    # 注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30秒
    response-cache-update-interval-ms: 30000
    #eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
    #由于启用了evict其实就用不太上改这个配置了
    #默认180s
    response-cache-auto-expiration-in-seconds: 180
    # 启动主动失效,并且每次主动失效检测时间间隔为3s
    eviction-interval-timer-in-ms: 3000
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: always

logging:
  level:
    root: INFO
  • application-peer4.yml
spring:
  application:
    # 指定应用的名称
    name: fxb-eureka-wangxiaowei_dev

server:
  port: ${eureka_port:8764}

eureka:
  instance:
    hostname: fxb-eureka-peer4
    # 更趋向IP地址
    prefer-ip-address: true
#    status-page-url-path: /actuator/info
#    health-check-url-path: /actuator/health
    secure-virtual-host-name: fxb.com
    virtual-host-name: moyang.com
    metadata-map:
      zone: wangxiaowei_dev
  client:
    service-url:
      superman: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER0:fxb-eureka-peer0}:8760/eureka
      wangxiyue: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER1:fxb-eureka-peer1}:8761/eureka
      lipu_f: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER2:fxb-eureka-peer2}:8762/eureka
      fengtiecheng: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER3:fxb-eureka-peer3}:8763/eureka
      wangxiaowei_dev: http://${USER_NAME:moyang}:${PASSWORD:moyang}@${ASHURA_PEER4:fxb-eureka-peer4}:8764/eureka
    # eureka client 刷新本地刷新时间,默认30s
    registry-fetch-interval-seconds: 5
    register-with-eureka: true
    fetch-registry: true
    # 更趋向同一zone的eureka
    prefer-same-zone-eureka: true
    region: beijing
    availability-zones:
      beijing: fengtiecheng,superman,wangxiyue,lipu_f,wangxiaowei_dev
  server:
    # eureka server 刷新read cache Map 的时间
    # 注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上,默认30秒
    response-cache-update-interval-ms: 30000
    #eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
    #由于启用了evict其实就用不太上改这个配置了
    #默认180s
    response-cache-auto-expiration-in-seconds: 180
    # 启动主动失效,并且每次主动失效检测时间间隔为3s
    eviction-interval-timer-in-ms: 3000
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: always

logging:
  level:
    root: INFO

注册逻辑

  • prefer-same-zone-eurekafalse, 按照service-urllist第一个注册中心,并和其维持心跳检测.不会再向list中的其他注册中心注册和维持心跳. 只有在第一个注册失败的情况下,才会依次向其他注册中心注册。总共会注册三次,如果三次都没有成功,就会注册失败。每隔一个心跳时间,就会再次尝试了。
  • 如果prefer-same-zone-eurekatrue,先通过regionavailability-zones内的第一个zone,然后通过这个zoneservice-url下的list,并向list内的第一个注册中心进行注册和维持心跳,不会再向list内的其它的注册中心注册和维持心跳。只有在第一个注册失败的情况下,才会依次向其它的注册中心注册,总共重试3次,如果3service-url都没有注册成功,则注册失败。每隔一个心跳时间,会再次尝试。

注意

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

在这里插入图片描述
如果你觉得写的还不错,就关注下公众号呗,关注后,有点小礼物回赠给你。
你可以获得5000+电子书,java,springCloud,adroid,python等各种视频教程,各种软件的安装及破解教程。
希望一块学习,一块进步!
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章