搭建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等各種視頻教程,各種軟件的安裝及破解教程。
希望一塊學習,一塊進步!
在這裏插入圖片描述

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