微服務
以前所有的代碼都放在同一個工程中、部署在同一個服務器、同一項目的不同模塊不同功能互相搶占資源,微服務就是將工程根據不同的業務規則拆分成微服務,部署在不同的服務器上,服務之間相互調用,java中有的微服務有dubbo(只能用來做微服務)、springcloud( 提供了服務的發現、斷路器等)。
微服務的特點
1. 按業務劃分為一個獨立運行的程序,即服務單元
2. 服務之間通過HTTP協議相互通信
3. 自動化部署
4. 可以用不同的編程語言
5. 可以用不同的存儲技術
6. 服務集中化管理
7. 微服務是一個分布式系統
微服務的優勢
1. 將一個復雜的業務拆分為若干小的業務,將復雜的業務簡單化,新人只需要了解他所接管的服務的代碼,減少了新人的學習成本。
2. 由于微服務是分布式服務,服務于服務之間沒有任何耦合。微服務系統的微服務單元具有很強的橫向拓展能力。
3. 服務于服務之間采用HTTP網絡通信協議來通信,單個服務內部高度耦合,服務與服務之間完全獨立,無耦合。這使得微服務可以采用任何的開發語言和技術來實現,提高開發效率、降低開發成本。
4. 微服務是按照業務進行拆分的,并有堅實的服務邊界,若要重寫某一業務代碼,不需了解所有業務,重寫簡單。
5. 微服務的每個服務單元是獨立部署的,即獨立運行在某個進程中,微服務的修改和部署對其他服務沒有影響。
6. 微服務在CAP理論中采用的AP架構,具有高可用分區容錯特點。高可用主要體現在系統7x24不間斷服務,他要求系統有大量的服務器集群,從而提高系統的負載能力。分區容錯也使得系統更加健壯。
微服務的不足
1. 微服務的復雜度:構建一個微服務比較復雜,服務與服務之間通過HTTP協議或其他消息傳遞機制通信,開發者要選出最佳的通信機制,并解決網絡服務差時帶來的風險。
2. 分布式事物:將事物分成多階段提交,如果一階段某一節點失敗仍會導致數據不正確。如果事物涉及的節點很多,某一節點的網絡出現異常會導致整個事務處于阻塞狀態,大大降低數據庫的性能。
3. 服務劃分:將一個完整的系統拆分成很多個服務,是一件非常困難的事,因為這涉及了具體的業務場景。
4. 服務部署:最佳部署容器Docker。
微服務和SOA的關系
微服務相對于和ESB聯系在一起的SOA輕便敏捷的多,微服務將復雜的業務組件化,也是一種面向服務思想的體現。對于微服務來說,它是SOA的一種體現,但是它比ESB實現的SOA更加輕便、敏捷和簡單。