Spring Boot
開發服務Node.js
做爲服務網關反向代理調用服務Zookeeper
註冊發現服務Docker
封裝/部署/隔離服務Jenkins
構建發佈服務Spring4.0推薦使用Java代碼和註解方式做爲配置(去xml),Spring Boot
遵循相關理念且採用4.0相關特性和技術,集成了主流組件,可建立一個內嵌Servlet容器的jar獨立運行,且提供生產級特性(服務治理)。node
Node.js
是基於ChromeV8引擎的Javascript運行環境,它使用「事件驅動」且「異步非I/O」的模型使其輕量且高效,Node.js的包管理器NPM是全球最大的開源庫生態系統。docker
Node.js
是運行環境,而非Javascript類庫和框架,NPM與Java的Maven殊途同歸,事件驅動把事件加入隊列中輪訓。Node.js採用單線程模型,適用於I/O密集型應用(高併發網站)。緩存
Node.js內置HTTP服務器(模塊),性能和穩定性與Nginx不分伯仲。且模塊體系強大,好比Web框架Express
,Web Socket服務Scocket.IO
,命令行工具Commander.js
,Http代理服務器node-http-proxy
Node.js
性能不亞於Nginx
,但擴展性高於Nginx
,能夠動態指定被代理的目標地址,並執行反向代理操做,調用微服務REST API。安全
微服務網關提供反向代理與服務發現,還應具有安全認證,性能監控,數據緩存,請求分片,靜態相應等特性。服務器
提供分佈式環境下的協調服務,分佈式應用可基於它實現數據發佈與訂閱,負載均衡,命名服務,分佈式協調與通知,集羣管理,領導選舉,分佈式鎖,分佈式隊列等。架構
Zookeeper
包含五個特性併發
Zookeeper
服務器之間可高效進行數據同步Zookeeper
內部擁有一個樹狀的內存模型,相似於文件系統,有若干目錄,目錄下有若干文件,統稱爲ZNode
。ZNode
可由Zookeeper
客戶端建立,客戶端與服務端創建鏈接後,服務端爲客戶端建立一個Session,客戶端對ZNode
的操做均在這個Session中。負載均衡
ZNode
有四類節點:框架
ZNode類型 | 說明 |
---|---|
Persistent(持久節點) | 當會話結束後,該節點不會被刪除 |
Persistent Sequential (持久順序節點) | 當會話結束後,該節點不會被刪除,且節點名中帶自增數後綴 |
Ephemeral (臨時節點) | 當會話結束後,該節點會被刪除 |
Ephemeral Sequential (臨時順序節點) | 當會話結束後,該節點會被刪除,且節點名中帶自增數後綴 |
Zookeeper
參考了經典的分佈式一致性協議Paxos協議,設計了更輕量級的協議Zab
(Zookeeper Atomic Broadcat
,Zookeeper
原子廣播協議)。異步
Zab
分爲兩個階段:Leader Election
(領導選舉)與Atomic Boardcast
(原子廣播)。
啓動時會選舉出一個Leader,其餘節點Follower,當Leader節點處故障,則自動選舉出新的Leader,並讓全部節點恢復到一個正常狀態。而後經過原子廣播,同步Leader和Follower數據。 全部寫操做都發送到Leader節點,並經過廣播同步到Follower節點。 Zookeeper
集羣中各個節點會互相通訊,確保存活,超過半數節點就能夠正常對外提供服務,所以通常提供奇數個節點。客戶端可鏈接任意節點,且與某節點斷開後,會自動鏈接到其餘節點。
啓動
Spring Boot
服務並註冊到Zookeeper
中,依次判斷並建立節點 根節點(持久節點)-服務節點(持久節點)-地址節點(臨時順序節點)。
Node.js
經過node-zookeeper-client
鏈接Zookeeper
,獲取服務地址,執行反向代理。
Docker引擎(Docker Engine
):可理解爲一個運行在服務器上的後臺進程,本質上是一個服務,啓動後,咱們能夠經過發送Docker命令與之通訊
Docker客戶端(Docker Client
):分爲Docker命令客戶端和Rest API客戶端
Docker鏡像(Docker Images
):如同光盤刻錄數據後,放入光驅中讀取數據。咱們將程序打包到鏡像中,將其載入到Docker引擎中運行
Docker容器(Docker Containers
):運行Docker鏡像,會啓動一個Docker容器,該容器中運行鏡像中封裝的程序。若是將鏡像理解爲Java類,容器至關於Java實例。同一個鏡像理論上可運行無數個Docker容器
Docker鏡像註冊中心(Docker Registry
):官方提供了Docker Hub
的鏡像註冊中心,用於存放公開和私有的Docker鏡像倉庫(Docker Repository
)。咱們能夠用Docker Hub
中下載鏡像和上傳鏡像。
Docker的四大特色:
Docker提供了Dockerfile
的腳本文件,經過一些指令,可快速編寫鏡像的構建腳本,從而讓構建進行作到自動化。
在
Spring Boot
項目中,能夠添加Dockerfile
文件,並經過docker-maven-plugin
插件,構建Docker鏡像並Push到倉庫。
mvn docker:build
可在target目錄下生成docker目錄,包含classes目錄全部文件,打包jar,Dockerfile。docker-maven-plgin
插件在這個目錄下執行docker bulid命令來構建鏡像。
是一款持續集成軟件,可鏈接代碼倉庫,從中獲取源碼並執行自動構建,構建完畢後還可執行後續任務,好比:生成單元測試報告,歸檔程序包,部署程序包到Maven倉庫,發送郵件通知等。Jenkins
支持一主多從,構建任務可並行在多臺Slave機器上。
Jenkins
可配置構建觸發器,並容許咱們在「構建前」或「構建後」添加執行的Shell
腳本。
- 開發人員將源碼推送至
Gitlib
,隨後觸發Jenkins
構建任務Jenkins
調用Maven
進行構建,編譯生成jar包- 根據構建過程,生成一個
Docker
鏡像,並推送至局域網的Docker Registry
中- 根據生成的鏡像,運行一個
Docker
容器
除此以外,微服務架構還涉及:微服務日誌,微服務安全,服務監控,微服務測試,微服務通訊,微服務治理等。