Spring Cloud(2):構建微服務 - Spring Boot
微服務的特點及構建遵循的原則
約束:微服務遵循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