微服務帶來最大的好處就是把整個大項目分割成不一樣的服務,運行在不一樣服務器上,實現解耦和分佈式處理。微服務雖然有不少好處,可是也會有很差的一方面。任何事物都會有兩面性,在微服務裏面運維會是一個很大的難題,若是有一天咱們的服務數量很是的多,而後咱們又不知道哪個服務在什麼機器上。可能會有人說這部分直接寫在程序的配置裏面就行了,當咱們服務少的時候是能夠這麼作的,也容許這麼作,可是在實際當中咱們要儘可能避免這麼作,好比說咱們某一個服務,地址換了,那麼咱們設計的相關代碼就得修改從新部署;又或者說咱們有一天上線一個新服務或者下線一個服務,這時候咱們又得修改程序代碼,這是很是不合理的作法。那麼有沒有什麼能夠解決這樣的問題呢?這裏就須要用到咱們的服務註冊和發現了。html
上面圖片咱們能夠看到在沒有服務註冊發現的時候一個調用者須要維護多個服務的ip和端口,這是很是很差的作法,當咱們服務進行調整的時候就有可能致使服務調用失敗,還有服務器更換服務器,上下新服務,都會受到影響。未來某一個服務節點出現問題,排查對於程序和運維人員來講都是一場很大的災難,由於不知道哪個節點出了問題,須要每一臺服務器的去排查。node
而當咱們有使用服務註冊發現以後的結構體是什麼樣子的呢?linux
咱們從上圖能夠發現,當咱們有註冊中心以後調用者不須要本身去維護全部服務的信息了,僅須要向註冊中心請求獲取服務,就能夠拿到想要的服務信息。這樣當咱們的服務有所調整,或者上線下線服務,都要能夠輕鬆操做,而且能夠在註冊中間檢查到服務的健康狀況,幫助運維人員快速定位到故障的服務器。web
在Swoft這個框架裏面推薦咱們使用的就是consul,consult是一個使用go寫的服務註冊、發現、配置管理系統。
Agent:Agent是Consul集羣中一個常駐後臺的程序。Agent有兩種模式,一種是服務端,一種是客戶端。全部Agent均可以運行DNS或者HTTP接口,而且負責檢查服務是否存活,和保持服務同步。
Client:Client是一種Agent的運行模式,把全部RPC轉發到Agent服務器的代理者,客戶端會在後臺有一個用最小帶寬消耗把請求轉發到後端的Agent服務,減輕Agent服務器的壓力。
Server:Server是另外一種Agent的運行模式,包括使用Raft算法處理數據,維護集羣狀態,響應RPC的請求,與其餘集羣的server交換數據或者遠程數據中心。
RPC:遠程過程調用,這是一種容許客戶端發出服務器請求的請求/響應機制。
在consult裏面有不少組件,在這裏咱們暫時使用一個組件就夠了就是agent,對於consul的安裝也是很是簡單的畢竟只有一個二進制文件包,因此直接下載就可使用了。算法
一、登陸官網進行下載,https://www.consul.io/downloads.htmljson
wget https://releases.hashicorp.com/consul/1.2.1/consul_1.2.1_linux_amd64.zip
unzip consul_1.2.1_linux_amd64.zip
二、設置環境變量,若是不設置能夠直接把consul執行文件移動到/usr/bin目錄下bootstrap
mv consul /usr/bin
三、Server配置後端
這種方式適合用於搭建服務調試使用
consul agent -bootstrap-expect 1 -server -data-dir /data/consul -node=swoft01 -bind=0.0.0.0 -config-dir /etc/consul.d -enable-script-checks=true -datacenter=sunny -client=0.0.0.0 -ui
能夠經過 http://192.168.1.100:8500 查看服務信息
這種方式適用於生產環境
consul agent -bootstrap-expect 2 -server -data-dir /data/consul -node=swoft01 -bind=0.0.0.0 -client=0.0.0.0 -config-dir /etc/consul.d -enable-script-checks=true -datacenter=sunny -client=0.0.0.0
上面這個命令是以服務端模式啓動一個代理,進羣有兩個擴展機器,設置集羣持久化數據存放在/data/consul0下面,節點名稱是swoft01,綁定0.0.0.0地址,服務配置文件存放在/etc/consul.d,開啓檢查心跳,數據中心的名稱是dc1,可訪問的客戶端地址是0.0.0.0
consul agent -server -data-dir /data/consul -node=swoft02 -bind=0.0.0.0 -client=0.0.0.0 -config-dir /etc/consul.d -enable-script-checks=true -datacenter=sunny -join 192.168.1.100
服務器3,IP 192.168.1.120
consul agent -server -data-dir /data/consul -node=swoft03 -bind=0.0.0.0 -client=0.0.0.0 -config-dir /etc/consul.d -enable-script-checks=true -datacenter=sunny -join 192.168.1.100
以上服務器2和服務3使用 -join 加入集羣,而且使用同一個數據名稱sunny
四、Client配置瀏覽器
consul agent -ui -data-dir /data/consul -node=swoft04 -bind=0.0.0.0 -config-dir /etc/consul.d -enable-script-checks=true -datacenter=sunny -ui -client=0.0.0.0 -join 192.168.1.100
客戶端若是不使用-server就是客戶端模式運行,其餘參數同上,服務端和客戶端都啓動了以後能夠在瀏覽器輸入 http://192.168.1.130:8500 來查看信息
查看集羣成員服務器
consul members
查看集羣信息
consul info
更多https://www.consul.io/docs/agent/options.html
-bootstrap-expect 數據中心中預期的服務器數。不該提供此值,或者該值必須與羣集中的其餘服務器一致。提供後,Consul將等待指定數量的服務器可用,而後引導羣集。這容許自動選擇初始領導者。這不能與傳統-bootstrap標誌一塊兒使用。此標誌須要在服務端模式下運行。
-server 以服務端模式啓動
-data-dir 數據存放位置,這個用於持久化保存集羣狀態
-node 羣集中此節點的名稱。這在羣集中必須是惟一的。默認狀況下,這是計算機的主機名。
-bind 綁定服務器的ip地址
-config-dir 指定配置文件服務,當這個目錄下有 .json 結尾的文件就會加載進來,更多配置能夠參考https://www.consul.io/docs/agent/options.html#configuration_files
-enable-script-checks 檢查服務是否處於活動狀態,相似開啓心跳
-datacenter 數據中心名稱
-client 客戶端可訪問ip,包括HTTP和DNS服務器。默認狀況下,這是「127.0.0.1」,僅容許環回鏈接。
-ui 開啓web的ui界面
-join:加入到已有的集羣中
關於consul更多的信息請你們移步到https://www.consul.io/