前言
注:單體架構到分佈式架構更多的是從項目的系統架構層面進行的討論,故不要將單體架構與業務分層(如mapper、dao、controller……)相混淆
本文將以一個簡單的商城項目為導引,講解單體架構與分佈式架構
項目包含了訂單模塊、用户模塊、支付模塊和商品模塊等
單體架構
什麼是單體架構?
簡單來説就是把業務的所有功能集中在一個項目中去開發,打成一個包部署
在開發單體架構項目時,只需要創建一個項目,然後根據相應功能不斷在項目各業務層中堆積代碼就 OK 了,不需要考慮複雜的架構設計。在大多數初學者初學web後端時所做的demo大多數都是單體架構
單體架構的優點是架構簡單、部署成本低(把項目打成包部署到tomcat上,用户就可以訪問了,當用户增加後,可以通過加機器形成負載均衡的集羣),
劣勢
隨着程序的不斷迭代,程序複雜度會越來越高,業務模塊越來越多,在開發的過程中,這些個代碼你中有我,我中有你,它們之間的邊界也越來越模糊,將來你改了一個地方的代碼,可能會導致其他幾個模塊代碼都跟着受到影響,所以單體架構並不利於大型項目開發,此時分佈式架構應運而生
分佈式架構
所謂分佈式架構,會根據業務功能對系統做拆分,每個業務模塊作為獨立項目去開發,稱為服務
比方説這個商城,它裏邊有四個業務模塊,那我就會按照業務拆分,拆成四個獨立的項目,然後來用户訪問時,根據需要訪問相應模塊。
分佈式架構項目由於需要考慮複雜的架構設計、對服務(模塊)的大量拆分,會較大增加維護成本,故多用於企業級大型項目的開發
微服務
微服務本質上就是一種分佈式架構方案,只不過是人們在設計分佈式過程中踩坑,各種總結經驗,得到了一種最佳實踐
特徵
- 單一職責:服務拆分力度要小,服務要幹自己該乾的事情,不能像打工人一樣大包大攬,以避免重複開發
- 面向服務:不同的服務間要實現相互通信獲取數據等,故服務要對外暴露業務接口
- 自治,自治其實就是獨立,我們的各個服務要做到、技術獨立、數據獨立和部署獨立,這樣才能儘可能的對數據、程序進行解耦。值得注意的是:服務獨立需要做到隔離性,以避免其他服務宕機導致的級聯問題
最終的目的就是為了實現高內聚耦合,降低服務之間的影響,或者説降低服務它所能產生影響的範圍,避免整個集羣的故障
總結
-
單體架構:適合於簡單、小型項目
- 優點:架構簡單,部署方便
- 缺點:耦合度高
-
分佈式架構:適合大型企業級項目
- 優點:降低耦合
- 缺點:相較於單體項目,架構複雜
- 最佳實踐:微服務--單一職責、面向服務、獨立自治
參考資料
https://www.bilibili.com/video/BV1LQ4y127n4?p=4
(本文首發於 本人掘金)