首先我們嘗試用一段話解釋一下微服務的概念,微服務區別於講所有的服務,資料庫訪問等業務及中間層程式碼打在一個jar或者war包內的all in one的體系結構,以業務服務及領域模型的組合為單元拆分出可獨立部署,獨立執行,獨立風險控制的系統元件應用的結合體。微服務擁有業務服務(可以理解為spring mvc中的service)及領域模型(可以理解為spring mvc中的model)為閉環,其本身的微服務系統所提供的服務業務邊界清晰,生命週期獨立且可自執行,可隔離,可追蹤。
所有的服務融合在一個業務程式內,採用all in one的打包方式組成一個jar或者一個war包,並且訪問同一個mysql資料庫,簡單粗糙,服務之間呼叫關係由於是在一個程式碼包內,可以隨意互相應用,業務關係不清晰,而且部署在一起,一旦一個服務或者對應的資料庫產生問題,則全盤故障。
首先我們嘗試用一段話解釋一下微服務的概念,微服務區別於講所有的服務,資料庫訪問等業務及中間層程式碼打在一個jar或者war包內的all in one的體系結構,以業務服務及領域模型的組合為單元拆分出可獨立部署,獨立執行,獨立風險控制的系統元件應用的結合體。微服務擁有業務服務(可以理解為spring mvc中的service)及領域模型(可以理解為spring mvc中的model)為閉環,其本身的微服務系統所提供的服務業務邊界清晰,生命週期獨立且可自執行,可隔離,可追蹤。
所有的服務融合在一個業務程式內,採用all in one的打包方式組成一個jar或者一個war包,並且訪問同一個mysql資料庫,簡單粗糙,服務之間呼叫關係由於是在一個程式碼包內,可以隨意互相應用,業務關係不清晰,而且部署在一起,一旦一個服務或者對應的資料庫產生問題,則全盤故障。
於是我們把系統做了微服務化的拆分,以服務為單位將其變成一個分散式的系統。
後面的業務服務系統各司其職,每個系統只負責自己業務範圍內的職責,比如商品系統僅服務商品相關的服務,建立,更新,查詢,
上下架等整個的生命週期並被購物車系統依賴,服務系統之間的邏輯關係清晰,且不同系統間只能透過對方提供的介面做訪問,管理方便,
每個系統擁有自己獨立部署伺服器,擁有自己的儲存資料庫,故障可隔離,配合日誌,訊息,監控,配置中心等分部署微服務下的配合元件做到一個可監控,可隔離,又可通訊的服務體系。
微服務的落地技術有很多,但總體來講還是可以用幾個簡單的點去做分類,微服務的框架目前開源的用的最多的是spring cloud,另外有人肯定會說為什麼不是dubbo,那其實dubbo僅僅是解決了微服務技術中的一部分問題,例如服務通訊,負載均衡,服務註冊發現等,但是他沒有解決降級限流,熔斷控制,服務路由等問題,還需要自己實現或者結合一些第三方元件,因此spring cloud是真正意義上閉環完整的實現了所有微服務的落地功能技術。
有了spring cloud這一整套的服務治理方案,還缺少服務部署工具,現在流行的微服務部署方式是將服務打成docker映象,在k8s上面部署,當然還可以整合jenkins,實現DevOps的整體技術方案,能夠快速的實現服務上線,異常回滾以及灰度釋出等需求,從而實現一整套的微服務自動化開發運維服務體系。