1. 程式人生 > >Spring Cloud(2):構建微服務 - Spring Boot

Spring Cloud(2):構建微服務 - Spring Boot

color 並發 時間 基於 執行 sof mil master 超時

微服務的特點及構建遵循的原則

約束:微服務遵循UNIX理念,即應用程序是服務的集合,每個服務只做一件事,並做好一件事。

松耦合:基於微服務的應用程序是小型服務的集合,服務之間使用HTTP和REST通過非特定實現的接口彼此交互。只要服務接口未改變,微服務內部可以更加自由地被修改。

抽象:微服務完全擁有自己的數據結構和數據源,微服務所擁有的數據只能由該服務修改。

獨立:每個微服務可以獨立地編譯和部署。

服務粒度

開始的時候可以讓微服務涉及的範圍更廣一些,然後將其重構到更小的服務。

重點關註服務如何相互交互。

隨著對問題域的理解不斷增長,服務的職責將隨著時間的推移而改變。

服務粒度過粗, 則會表現為:服務承擔了過多的職責, 會餐跨大量表來管理數據, 測試用例將變得過多。

服務粒度過細, 則會表現為:微服務像兔子一樣繁殖, 服務彼此嚴重依賴, 成為簡單CRUD服務的集合。

微服務構建的最佳實踐

代碼庫:每個微服務及服務器信息都應該處於版本控制中, 並且有自己獨立的代碼存儲庫。

依賴:通過構建工具(e.g. Maven)明確聲明依賴項。

配置:將應用程序配置(特別是特定於環境的配置)與代碼分開存儲。

後端服務:通過網絡與數據庫或消息系統進行通信。

構建,發布和運行:保持應用程序構建,發布和運行完全分開,已構建的服務是不可改變的。

進程:微服務應該始終是無狀態的,它們可以在任何超時時被殺死和替換,而不用擔心一個服務實例的丟失而導致數據丟失。

端口綁定:可運行的微服務要包含一個運行時引擎(不需要單獨的web服務器),服務應該在命令行上自行啟動,並通過公開的HTTP端口立即訪問。

並發:在需求量增大時,要啟動更多的微服務實例水平伸縮。

可任意處置:可以根據需要任意啟動和停止。

開發環境與生產環境等同:最小化服務運行的所有環境之間的差距。

日誌:使用工具記錄日誌,直觀查看日誌。

管理進程:使用通用腳本對服務執行管理任務。

構建一個Hello World微服務

本例使用Spring-Boot-Web構建,並使用Maven Docker插件,更方便的創建鏡像。

https://github.com/lyz170/spring-cloud-demo/tree/master/spring-cloud-service-helloworld

Spring Cloud(2):構建微服務 - Spring Boot