基於docker 如何部署surging分散式微服務引擎

fanly11發表於2018-06-17

1、前言

      轉眼間surging 開源已經有1年了,經過1年的打磨,surging已從最初在window 部署的分散式微服務框架,到現在的可以在docker部署利用rancher 進行服務編排的分散式微服務引擎,再把業務進行剝離, 通過配置路徑就能驅動載入業務模組,這樣的細粒度設計,能更加靈活從業務中針對於物件加以細分,能更加靈活的拆分聚合服務。而這篇文章我們來談談基於docker 如何部署

surging原始碼下載

2、概述

容器,就是用來存放映象的器皿,而映象是構建成的一個輕量的、獨立的、可執行的包,包括了執行它所需要的所有東西:程式碼、執行環境、系統工具、系統庫、設定。

程式被構建成映象放到容器中,那麼它所依賴的下層環境就不再重要了。它可以在任何地方執行,甚至在混合雲環境下也可以。所以為何容器能流行起來,而容器技術興起讓Docke也漸漸的映入大家的眼簾,

 

 

那麼Docker又是什麼呢?

  • Docker是基於Go語言開發並開源的容器引擎

  • Docker將應用軟體執行時所需的一切都打包成互相隔離的容器

  • Docker可以自動執行並配置開發/線上環境,快速構建,測試和執行復雜的多容器應用程式

  • 對擁有數千個節點或容器的應用程式,Docker也能快速的擴充套件和調配

  • 可以執行在主流的Linux系統,Mac以及Windows上,並且保證無論軟體在哪裡部署,都能正常執行並得到相同的結果

相關概念介紹

  • Image映象和Container容器:你可以把兩者理解為類和例項物件,或者是ISO系統映象和虛擬機器的關係。不同的Image所包含的軟體或者環境是不同的,但是你可以使用Dockerfile(docker特有語法規則所建立的檔案)進行管理。而Container則是以Image作為模板,可以獨立執行的微型系統,一個Image可以建立出來多個Container容器的例項

  • Registry:Docker Hub映象倉庫,為每個人提供龐大的映象資源進行拉取和使用

  • Dockerfile:是一個將映象命令組合在一起的檔案,用於Image的自動構建

 3、環境搭建

系統環境

宿主機:Windows 10 專業版

Linux伺服器: CentOS 3.10

1.安裝Docker

 

Docker 要求 CentOS 系統的核心版本高於 3.10 ,檢視本頁面的前提條件來驗證你的CentOS 版本是否支援 Docker 。

通過 uname -r 命令檢視你當前的核心版本

 

[root@runoob ~]# uname -r 3.10.0-862.E17.X86_64

 

 # yum install docker-engine 安裝docker包

 安裝成功後,使用docker version命令檢視是否安裝成功,安裝成功後------如下圖

 

 啟動 Docker

systemctl  start  docker

 檢視docker資訊,如下圖

systemctl  status  docker

 

 

測試執行 hello-world

#docker run hello-world

 2.安裝rancher

下載映象

 

docker pull rancher/server

啟動rancher

docker run -d --restart=always -p 8080:8080 rancher/server

 安裝成功後,通過http://ip:8080訪問,如下圖所示

 3.安裝rabbitmq

 下載映象

#docker pull rabbitmq:management

啟動rabbitmq

#docker run -d --name rabbitmq --publish 5672:5672 --publish 4369:4369 --publish 25672:25672 --publish 15671:15671 --publish 15672:15672 \rabbitmq:management

 安裝成功後,通過http://ip:15672訪問,如下圖所示

4.安裝Consul

下載映象

 

#docker pull docker.io/consul:latest

 

 建立 Consul 配置

#vim /opt/platform/consul/server.json

 

{
    "datacenter": "quark-consul",
    "data_dir": "/consul/data",
    "server": true,
    "ui": true,
    "bind_addr": "192.168.249.162",
    "client_addr": "192.168.249.162",
    "bootstrap_expect": 1,
    "retry_interval": "10s",
    "rejoin_after_leave": false,
    "skip_leave_on_interrupt": true
}

 配置說明

官方在啟動容器的時候是將一部分配置作為 docker run 的引數,而我是把引數寫到了配置檔案裡。

  • datacenter:資料中心名稱(庫名)
  • data_dir:資料儲存目錄
  • server:執行在server模式
  • ui:使用UI介面
  • bind_addr:內部叢集通訊繫結的地址。預設是0.0.0.0,如果有多塊網路卡,需要指定,否則啟動報錯
  • client_addr:客戶端介面繫結的地址,預設是127.0.0.1
  • retry_join:重新加入叢集
  • retry_interval:重試時間
  • rejoin_after_leave:在離開叢集之後才重試加入
  • skip_leave_on_interrupt:在啟動後,是否 Ctrl+C 優雅退出,我們是容器模式,所以不用管,直接 true 就好了。

啟動 consul-server

docker run -d --net=host --name consul -v /opt/platform/consul/config:/consul/config -v /opt/platform/consul/data:/consul/data consul agent

 安裝成功後,通過http://ip:8500訪問,如下圖所示

 

5. 安裝dotnetcore 2.1 runtime

下載映象

#sudo docker pull microsoft/dotnet:2.1-runtime

啟動 

 

#sudo docker run -it microsoft/dotnet:2.1-runtime

四、部署程式

1. 部署surging引擎,無需引用任何業務模組,新建Dockerfile檔案

FROM microsoft/dotnet:2.1-runtime
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "Surging.Services.Server.dll"]

釋出程式

dotnet publish -r centos.7-x64 -c release

 使用Dockerfile建立映象

#docker build -t surgingserver .

 啟動

#docker run --name surgingserver --env Mapping_ip=192.168.249.162 --env Mapping_Port=198 --env RootPath=/home/fanly --env 
Register_Conn=192.168.249.162:8500 --env EventBusConnection=172.17.0.4 --env Surging_Server_IP=0.0.0.0 -v /home/fanly:/home/fanly -it -p 198:198 surgingserver

 

 配置說明

  • Mapping_ip:對映的外部IP(環境變數)
  • Mapping_port:對映的外部埠(環境變數)
  • RootPath:業務模組儲存的根路徑(環境變數)
  • Register_Conn:註冊中心地址(環境變數)
  • EventBusConnection:eventbus 地址(環境變數)
  • Surging_Server_IP:容器內部IP(環境變數)

啟動後在rancher如下圖所示

因為方便,把宿主機的目錄進行了掛載,microsurging 為分散式微服務引擎,Modules 為業務模組目錄,surgingapi為閘道器

2. 部署surging閘道器,新建Dockerfile檔案

 

FROM microsoft/dotnet:2.1-runtime
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "Surging.ApiGateway.dll"]

 

 釋出程式

 

dotnet publish -r centos.7-x64 -c release

 

 使用Dockerfile建立映象

 

docker build -t surgingapi .

 

  啟動

#docker run --name surgingapi -it -p 729:729 --env Register_Conn=192.168.249.162:8500 surgingapi

 啟動後在rancher如下圖所示

可以通過http://ip:729進行訪問

 

 

然後可以通過postman 來測試閘道器,如下圖

五、總結

通過1年的開發,surging 也趨於完善,效能非常不錯,平均訪問在0.12ms 左右,而且6月30日會在上海微軟研發中心和大家見面講解下surging 微服務引擎,也請大家多多關注

 

相關文章