在學習spring cloud構建微服務之前,我們先對比于單體架構來了解微服務的優勢和不足。
單體架構
所謂單體應用就是將所有的業務場景的表示層、業務邏輯層和數據訪問層都放在一個工程中,最終經過編譯、打包,部署在一臺服務器上。
不足:
1.業務越來越復雜:代碼可讀性、可維護性和可擴展性下降。
2.并發能力有限:隨著用戶越來越多,程序承受的并發越來越高,單體應用的并發能力有限。
3.測試的難度越來越大:隨著業務的擴張,修改或者增加業務會給其它業務帶來一定的影響,導致測試難度增加。
解決以上的并發能力有限的問題,可將單體應用集群部署,并增加負載均衡服務器。這種方式改善了系統的性能,但還是存在不足。
1.系統依然是單體,代碼可讀性和維護性差。
2.持續交付能力差,業務越復雜,代碼越多,修改代碼和添加代碼的時間越長。新人熟悉代碼的時間長、成本高。
微服務
概念:引用“微服務”這一名詞的發明人Martin Fowler的理解。 將單一程序開發成一個微服務,每個微服務運行在自己的進程中,并使用輕量級機制通信,通常是HTTP RESTFUL API。這些服務圍繞業務能力來劃分架構,并通過完全自動化部署機制來獨立部署。這些微服務可以使用不同的編程語言,以及不同的數據存儲技術,以保證最低限度的集中式管理。
相對于單體服務,微服務的主要體現以下方面的優勢
1.將一個復雜的業務分解成若干小的業務,為每個服務拆成一個服務,將復雜的問題簡單化。
2.微服務系統是分布式系統,服務與服務之間沒有任何的耦合,具有極強的橫向擴展能力。
3.服務之間通過HTTP通信協議來通信,使得微服務可以采用任何得=的開發語言和技術來實現。可以選擇最適合自己的開發語言和技術,提高開發效率,降低開發成本。
4.減少了測試和部署的時間。每個服務單獨部署,測試時只需要部署修改的那個服務,不用像單體應用一樣部署整個應用。
5.微服務在CAP理論中采用的時AP架構,即具有高可用和分區容錯的特點。高可用體現在大量的微服務集群,實現了7*24小時不間斷的服務。另外,分期容錯也使得系統更加的健壯。
凡是都有兩面行。微服務也有它的不足。
1.構建復雜度高,需要掌握更多的架構知識和框架知識。
2.分布式事務控制,每個微服務有獨立的數據庫,在協同操作數據時,保證數據的一致性問題較復雜。
3.服務劃分不易,需要依靠團隊人員對業務的熟悉程度和理解程度。
4.服務的部署復雜,需要開發人員或運維人員對微服務系統有足夠強的控制力。
總結
技術應該是隨著業務的發展而發展的。當業務很單一時,單體架構夠用的情況下,就應該用單體應用,因為它開發速度快,性價比高。但是隨著業務的不斷發展,用戶量不斷增加導致單體應用使用很不爽時,就可以考慮微服務架構的系統。在當今大數據時代,微服務也是發展的趨勢,所以微服務技術是很重要的開發技能。在之后的章節一起學習微服務架構框架spring-cloud。