軟件架構演進
軟件架構的發展經歷了從單體架構、垂直架構、SOA架構到微服務架構的過程,博客里寫到了這四種架構的特點以及優缺點分析,個人學習之用,僅供參考!
1.1.1 單體架構
特點:
1、所有的功能集成在一個項目工程中。
2、所有的功能打一個war包部署到服務器。
3、應用與數據庫分開部署。
4、通過部署應用集群和數據庫集群來提高系統的性能。
優點:
1、項目架構簡單,前期開發成本低,周期短,小型項目的首選。
缺點:
1、全部功能集成在一個工程中,對於大型項目不易開發、擴展及維護。
2、系統性能擴展只能通過擴展集群結點,成本高、有瓶頸。
3、技術棧受限。
1.1.2 垂直架構
特點
當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。
此時,用於加速前端頁面開發的 Web框架(MVC) 是關鍵。
優點:
1、項目架構簡單,前期開發成本低,周期短,小型項目的首選。
2、通過垂直拆分,原來的單體項目不至於無限擴大。
3、不同的項目可采用不同的技術。
缺點:
1、全部功能集成在一個工程中,對於大型項目不易開發、擴展及維護。
2、系統性能擴展只能通過擴展集群結點,成本高、有瓶頸。
1.1.3 SOA架構
面向服務架構,如dubbo
優點:
把模塊拆分,使用接口通信,降低模塊之間的耦合度
把項目拆分成若干個子項目,不同的團隊負責不同的子項目
增加功能時只需要在增加一個子項目,調用其它系統的接口就可以
可以靈活的進行分布式部署
缺點:
系統之間交互需要使用遠程通信,接口開發增加工作量
1.1.4 微服務架構
特點:
1、將系統服務層完全獨立出來,並將服務層抽取為一個一個的微服務。
2、微服務遵循單一原則。
3、微服務之間采用RESTful等輕量協議傳輸。
優點:
1、服務拆分粒度更細,有利於資源重復利用,提高開發效率。
2、可以更加精准的制定每個服務的優化方案,提高系統可維護性。
3、微服務架構采用去中心化思想,服務之間采用RESTful等輕量協議通信,相比ESB更輕量。
4、適用於互聯網時代,產品迭代周期更短。
缺點:
1、微服務過多,服務治理成本高,不利於系統維護。
2、分布式系統開發的技術成本高(容錯、分布式事務等),對團隊挑戰大。
要解決的技術難點:
1、這么多服務,怎么找?
通過zookeeper做服務注冊信息的分布式管理。當服務上線時,服務提供者將自己的服務信息注冊到ZK,並通過心跳維持長鏈接,實時更新鏈接信息。服務調用者通過ZK尋址,根據可定制算法,找到一個服務,還可以將服務信息緩存在本地以提高性能。當服務下線時,ZK會發通知給服務客戶端。
主流的注冊中心:zookeeper、Eureka、consul、etcd
2、服務之間如何通信?
因為所有的微服務都是獨立的Java進程跑在獨立的虛擬機上,所以服務間的通信就是IPC(inter process communication),已經有很多成熟的方案。比如基於HTTP的REST或者Thrift
3、這么多服務,服務掛了怎么辦?
重試機制
熔斷機制
限流/降級
負載均衡