單體架構(Monolithic Architecture)
傳統的單體架構,把所有的功能都集中在一起,打包為一個war包,或者是可執行程式。部署的時候,需要部署一個完整的應用,更新時,也需要替換整個war包或是可執行程式,更新時,要中斷正在提供的服務。單片架構的優勢在于開發測試都比較容易,隻需改動一個工程、啟動一個應用。部署的時候,隻需要複制應用及配置即可。當網站的流量很小時,我們隻需要一個應用,并把所有的功能都部署在一起就可以了,以減少部署節點和成本。
但是随着應用規模越來越大,單體結構會面臨問題:
- 龐大的代碼堆積在一個應用中,難以了解與維護
- 部分修改,也需要建構和部署整個程式
- 部署複雜,風險大,耗時長
- 無法持續提供服務
- 無法支援頻繁改動的開發過程
- 改動可能影響到本來可穩定運作的代碼,在測試上,也需要整站測試,周期長
- 伸縮性差
微服務
微服務是指開發一個單一的、小型的,但是有業務功能的服務。将原先的一整個的應用程式,拆分成多個可以獨立開發測試部署的小服務,每個服務,都有自己的處理和輕量通信流程,可以部署在單個或者多個伺服器上。微服務可以擁有自己的存儲層,包括資料庫或記憶體緩存。微服務是一種松耦合的、有明顯責任邊界的服務架構。也就是說,一個微服務的修改,不應該引起另一個微服務的同步修改,如果一個的改變會影響另外一個(應該失敗隔離),那麼就不适合做拆分。有了微服務,可以進行産品的快速疊代開發,并保證已有服務持續穩定提供服務。
微服務的缺點在于,服務分布式部署帶來的分布式系統複雜性,需要有分布式事務的支援,服務之間依賴關系複雜,更新的時候需要謹慎處理。對服務劃分的政策也需要謹慎,粒度太大,與單體甲架構有同樣的缺點;粒度太小,則增大了系統的複雜性,使用者的請求可能需要多個微服務跳轉處理才能夠傳回,劃分不合理了,整個系統也很難了解。
與SOA的差別在哪?
面向服務架構(SOA)是一種軟體架構模式,一些應用程式元件,通過網絡通信協定向其他元件提供服務,這些服務之間的通信,可以是簡單的資料傳遞,也可以是兩個或多個彼此需要互相協調的服務之間的互連。在服務中,可以實作純粹的業務功能,例如購物車、收藏清單等。也可以是供其他服務調用的公共服務,例如登入鑒權服務。這些服務組合在一起,可以實作一個需求。
微服務與SOA是一脈相承的,差別主要在于規模與範圍。微服務的核心思想,是對應用做有效拆分,以實作靈活開發與部署,SOA包含的意義可能更廣泛、不準确一些。
從實作方式上來說,微服務與SOA都是語言無關,協定跨平台的。微服務架構能夠帶來更大的靈活性,建構更加輕量級、高效率的開發。而SOA更适合大型企業的應用內建。
從服務粒度上來說,微服務提倡服務的細粒度,每個操作甚至是方法都是獨立開發的服務,足夠小到不能再拆分。SOA沒有這麼極緻的要求。
從部署方式上來說,微服務利用Docker技術,不依賴任何伺服器和資料模型,是一個全棧應用,可以通過自動化方式獨立部署,每個服務運作在自己的程序中。
參考
- 《可伸縮服務架構 架構與中間件》
- SOA和微服務架構的差別? - 徐兵元的回答 - 知乎