Consul原理及配置

Consul簡介

Consul是基於GO語言開發的開源工具,主要面向分佈式,服務化的系統提供服務註冊、服務發現和配置管理的功能。Consul的功能都很實用,其中包括:服務註冊/發現、健康檢查、Key/Value存儲、多數據中心和分佈式一致性保證等特性。Consul本身只是一個二進制的可執行文件,所以安裝和部署都非常簡單,只需要從官網下載後,在執行對應的啓動腳本即可。

Consul特性

  • 服務註冊/發現
    爲什麼微服務架構下就需要做服務註冊和服務發現呢?微服務的目標就是要將原來大一統的系統架構,拆分成細粒度的按功能職責分成的小系統,這樣就會出現很多小的系統,部署的節點也會隨之增加。試想一下,如果沒有一個統一的服務組件來管理各系統間的列表,微服務架構是很難落地實現的。
    Consul提供的服務註冊/發現功能在數據強一致性和分區容錯性上都有非常好的保證,但在集羣可用性下就會稍微差一些(相比Euerka來說)。

  • 數據強一致性保證
    Consul採用了一致性算法Raft來保證服務列表數據在數據中心中各Server下的強一致性,這樣能保證同一個數據中心下不管某一臺Server Down了,請求從其他Server中同樣也能獲取的最新的服務列表數據。數據強一致性帶來的副作用是當數據在同步或者Server在選舉Leader過程中,會出現集羣不可用。

  • 多數據中心
    Consul支持多數據中心(Data Center),多個數據中心之間通過Gossip協議進行數據同步。多數據中心的好處是當某個數據中心出現故障時,其他數據中心可以繼續提供服務,提升了可用性。

  • 健康檢查
    Consul支持基本硬件資源方面的檢查,如:CPU、內存、硬盤等

  • Key/Value存儲
    Consul支持Key/Value存儲功能,可以將Consul作爲配置中心使用,可以將一些公共配置信息配置到Consul,然後通過Consul提供的 HTTP API來獲取對應Key的Value。
    在這裏插入圖片描述

調用過程

1、當 Producer 啓動的時候,會向 Consul 發送一個 post 請求,告訴 Consul 自己的 IP 和 Port;

2、Consul 接收到 Producer 的註冊後,每隔 10s(默認)會向 Producer 發送一個健康檢查的請求,檢驗 Producer 是否健康;

3、當 Consumer 發送 GET 方式請求 /api/address 到 Producer 時,會先從 Consul 中拿到一個存儲服務 IP 和 Port 的臨時表,從表中拿到 Producer 的 IP 和 Port 後再發送 GET 方式請求 /api/address;

4、該臨時表每隔 10s 會更新,只包含有通過了健康檢查的 Producer。

Spring Cloud Consul 項目是針對 Consul 的服務治理實現。Consul 是一個分佈式高可用的系統,它包含多個組件,但是作爲一個整體,在微服務架構中,爲我們的基礎設施提供服務發現和服務配置的工具。

在這裏插入圖片描述

安裝與啓動

打開 Consul官網根據不同的操作系統選擇最新的 Consul 版本,我們這裏以 macOS 操作系統爲例。

cd到安裝目錄輸入./consul agent -dev會以開發者模式啓動。輸入:localhost:8500就可以看到時consul管理界面了。
consul管理界面默認連接爲本地機器127.0.0.1,可以在啓動時輸入:./consul agent -dev -client 0.0.0.0 -ui其它機器也可以訪問管理頁面。

配置文件

pom文件添加:

	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-consul-discovery</artifactId>
	</dependency>

配置文件根據需要添加:


spring:
  application:
    name: consul
  cloud:
    consul:
      #配置consul服務器的host
      host: localhost
      #配置端口
      port: 8500
      config:
        #配置默認文件名
        default-context: ${spring.application.name}
        #是否啓用consul配置
        enabled: true
        #配置文件格式
        format: YAML
        #配置基本文件,默認值config
        prefix: config
        #配置文件名,默認data
        data-key: data
      discovery:
        #是否啓用服務發現
        enabled: true
        #配置健康檢查路徑
        health-check-path: /actuator/health
        #配置健康檢查時間間隔
        health-check-interval: 15s
        #配置實例id
        instance-id: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}
        #配置服務註冊
        register: true
        deregister: true
        #表示註冊時使用ip而不是hostname
        prefer-ip-address: true
        #表示指定訪問服務IP
        ip-address: IP
        #健康檢查失敗多長時間取消註冊
        health-check-critical-timeout: 30s


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