一、微服務架構的由來
在微服務架構出現之前,最常用的架構就是單體架構,俗稱"一個jar(war)包打天下"。在一個jar包工程中,采用MVC架構,分為表現層,業務層,數據訪問層,所有的業務模塊,都放在這個工程中集成,如下圖所示:
隨著軟件行業規模的增長,這種單體架構的弊端也越來越多,包括:
- 耦合性高,某個地方出問題,很可能影響其他業務模塊的使用
- 代碼管理成本高,項目沉重,并會隨著需求的增加越來越重
- 隨著訪問量的增多,這種架構的工程并發力不夠
為了解決單體結構帶來的問題,就出現了微服務架構。
微服務架構就是將單一程序拆分成一個一個的微服務,每個微服務運行在自己的進程中,并使用輕量級的機制通信,通常是HTTP RESTFUL
API。這些服務圍繞業務能力來劃分,并通過自動化部署機制來獨立部署。這些服務可以使用不同的編程語言,不同數據庫,以保證最低限度的集中式管理。
二、微服務架構優勢與劣勢
優勢:
復雜的業務拆分成多個業務,每個業務是一個獨立的微服務,徹底地去耦合,利于分工,當需要增加業務的時候,可以方便創建新的微服務擴展業務,而不用擔心有沒有別的地方耦合
每個微服務都是獨立部署的,如果其中一個宕機了,不會影響整個系統;也方便功能變更時,服務的部署;當流量增大后,可以將服務集群化部署,增強抗擊高并發的能力
每個微服務之間可以使用不同的編程語言和不同的數據庫
劣勢:
在復雜程度上來說,微服務比單體建構要更為復雜些
部署比單體項目復雜
服務之間是用HTTP協議通信的,通信成本比單體項目高
數據一致性問題。
三、適用場景
通過上面的描述可以看出,微服務在解決了單體架構帶來的問題的同時,也出現了部署復雜,需要增加中間件聯絡各服務的問題。所以,不是所有的場景都推薦使用微服務架構,具體如下:
適用場景:
①:大型復雜的項目…(來自單體架構200W行代碼的恐懼)
②:快速迭代的項目…(來自一天一版的恐懼)
③:并發高的項目…(考慮彈性伸縮擴容的恐懼)
不適場景:
①:業務穩定,就是修修bug ,改改數據
②:迭代周期長 發版頻率 一二個月一次.
四、微服務與SpringCloud的關系
SpringCloud簡單來說是上述微服務架構技術落地實現的集合體,是微服務架構下的一站式解決方案。
SpringCloud是一個技術的集合體,將上述的微服務架構進行落地。下面看一下這個集合體里包含哪些組件:
注冊中心Eureka:
拆分成多個服務之后,總得有個管理多個服務的模塊吧,這就是注冊中心的作用。起到服務注冊和服務發現的作用。
網關Zuul:
拆分成多個服務之后,涉及到服務之間的調用吧,一個服務調用了三個服務的模塊,那在這個服務里,配置三個調用地址,看起來是不是很麻煩呀,所以就出現了網關,所有的服務調用都調用到網關,然后在網關里配置路由,進行服務的轉發,類似于代理的作用。當然網關需要配合注冊中心進行使用,去發現轉發到哪個服務上去。
負載均衡Ribbon:
網關找到請求發送到哪個服務后,如果這個服務做了集群,有多個實例,那該發送到哪個實例上呢,于是就出現了Ribbon組件,進行負載均衡。
遠程調用方式Feign:
服務之間相互調用的時候,可以使用RestTemplate進行調用,SpringCloud也提供了Feign客戶端訪問,即提供了一種遠程調用方式。
斷路器Hystrix:
SpringCloud提供了一個監控組件,用于監控服務接口的狀態和斷路情況。Hystrix Dashboard是個監控面板,提供了可視化界面查看服務調用的耗時等等。
上述就是微服務的五大組件。微服務架構就是對服務進行拆分,多個小的項目,組成一個大型項目。那么,拆分后的服務,肯定需要增加中間件,來統一維護這些服務,于是就有了注冊中心。拆分成小型服務后,涉及到服務之間接口的調用,于是產生了Feign技術。為了實現高可用,每個小型服務都需要集群,那么集群如何選舉呢?就出現了負載均衡技術Ribbon。最后通過網關統一管理請求路徑的配置,進行請求的轉發。SpringCloud還為我們提供了斷路器,用于監控服務的各種指標信息。
所以,SpringCloud是一套微服務架構的落地技術方案,對于程序員而言,只要在這套技術框架里面,進行業務模塊的開發實現即可。
同時可以發現,我們要使用SpringCloud,還需要維護注冊中心,網關等等技術,這也是使用微服務架構需要花費的成本。
官網: https://spring.io/projects/spring-cloud
中文文檔: https://www.springcloud.cc/
Spring Cloud中國社區:http://springcloud.cn/
SpringCloud微服務架構圖
五、SpringCloud與SpringCloud Alibaba的關系
SpringCloud Alibaba是阿里研發的一套微服務架構的落地技術方案,可以很好的兼容SpringCloud,只需修改一些配置和注解,原生SpringCloud就可以接入到SpringCloud Alibaba中。
SpringCloud Alibaba提供了一些新組件,來落地微服務架構,阿里之所以要開發這套技術架構,主要是為了推廣相關的產品,當然有付費產品。
下面看SpringCloud與Alibaba組件對比:
SpringCloud Alibaba技術架構: