微服務實施筆記(四)——部署服務發現
上回書搭建了3個待用的服務。用來模擬實際中的服務。接下來就是把這幾個服務註冊到乙個服務管理中心了。
使用consul搭建服務管理中心
在這裡選用consul來做服務管理中心。consul是採用golang開發的,cap中滿足cp的一款服務管理系統。選擇它的原因就是它足夠簡單。簡單到什麼程度呢,一行**搞定:
sudo docker run -d \
-e 'consul_local_config=' \
--name=node1 -p 8300:8300 -p 8301:8301 -p 8301:8301/udp \
-p 8302:8302/udp -p 8302:8302 -p 8400:8400 -p 8500:8500 \
-p 53:53/udp -h consul_node1 \
consul agent -server -bootstrap \
-node=node1 -client 0.0.0.0 -ui
執行後在瀏覽器中檢視 http://localhost:8500/ui
就是如此簡單,而且自帶ui。好的軟體都應如此簡單。
consul 四大特性
service discovery (服務發現)
health check (健康檢查)
multi datacenter (多資料中心)
key/value storage(kv鍵值儲存)
下文在介紹如何利用這四大特性。
這下,待發現的服務有了,可以註冊服務的管理中心也有了,接下來怎麼辦呢,怎麼把服務註冊到服務中心呢。
自動註冊服務
服務註冊可以分為「自註冊」 與 「第三方註冊」兩種方式。
以下內容引用自
1.自註冊:服務內部啟動客戶端,連線註冊中心,寫入服務資訊。
好處:
問題:
第三方註冊需要乙個註冊工具,這裡使用registrator
依然是一行**搞定:
docker run -d \
--name=registrator \
--net=host \
--volume=/var/run/docker.sock:/tmp/docker.sock \
gliderlabs/registrator:latest \
consul://localhost:8500
這樣啟動的服務會有乙個問題,就是registrator無法準確取到ip位址,所以最好把本地ip位址指定給registrator。方法就是使用docker-compose。新建乙個docker-compose.yml檔案,內容如下:
version: '2'
services:
registrator1:
image: gliderlabs/registrator
restart: always
network_mode: "host"
name: registrator
volumes:
- /var/run/docker.sock:/tmp/docker.sock
command: "-ip 192.168.1.231 consul:"
其中最後一行ip後面就是容器執行的宿主機的本地ip位址。然後在docker-compose.yml檔案所在目錄下執行docker-compose ip -d命令。
執行之後重新整理下瀏覽器看看:
註冊成功。但是這裡只用到了consul四大特性中的第乙個服務發現,它的另乙個重要特性健康檢查並沒有被利用起來。健康檢查會按照配置的時間間隔和方式檢查服務的健康狀態。這樣就可以及時的剔除無法對外提供服務的服務了。那麼怎麼為服務配置健康檢查呢?修改服務程式本身當然可以,但是這樣的話就違背解耦合的初衷了。引入docker層就是為了解耦合用的,所以可以通過對dockerfile的配置來實現。
怎麼用呢,可以使用dockerfile的lable或者環境變數來進行配置。
對於server1服務的docker配置如下(詳細可以參考 和
以下是修改後的server1的daockerfile,其中通過環境變數增加了支援consul服務特性的配置項。
from microsoft/aspnetcore:2.0
label name=lizpen/server1 version=0.0.1
#以下環境變數用來定義consul的服務屬性
env service_name=server1
env service_id=server1.001
env service_tags=server1
#以下環境變數用來定義consul的服務檢查特性
entrypoint dotnet server1.dll
先刪除掉正在執行的容器,vscode側邊欄中的docker工具提供了這些功能,及其好用:
然後重新build docker映象,並執行生成好的映象。然後重新整理consul的管理**可以看到tags和健康檢查都上線了。
至此,服務發現在單機執行成功。
接下來就是把這套東西部署到搭建好的虛擬環境中去。
Spring Cloud 微服務實戰筆記
傳統開發所有業務邏輯都在乙個應用中,開發,測試,部署隨著需求增加會不斷為單個專案增加不同業務模組 前端展現也不侷限於html檢視模板的形式,後端向前端支援需要更多的介面模組。隨著需求增多,專案變大,單體系統部署在乙個程序內部,往往修改很小的功能,為了部署上線也會影響其他功能。後期維護成本會變得越來越...
JavaScript筆記(第四部分)
命 名 空 間 管理變數,防止汙染全域性,適用於模組開發 之 前 的 解 決 辦 方 已經不用 命名空間 var org xuming department2 lisi 了解即可 用 法 org.department1.jicheng.name 簡化 var jc org.department1.j...
微服務實戰(四) 配置中心的使用 Nacos
在微服務架構中,每個微服務應用都有自己的應用外部配置,在以前大多是使用配置檔案或者資料庫的形式和應用一起部署,而在springcloud體系下,需要有乙個配置中心,專門管理各個微應用的配置資訊,並且配置發生更新後,所有微應用都能馬上讀取到最新的配置。解決了每個應用都要去手動維護配置的不便。上一章節中...