大概從16年開(kāi)始,微服務(wù)的概念快速升溫,基本上人人在談。微服務(wù)來(lái)源于對(duì)SOA(Services Oriented Architecture)的優(yōu)化重塑。經(jīng)過(guò)這幾年的發(fā)展微服務(wù)在敏捷開(kāi)發(fā)和復(fù)雜的企業(yè)級(jí)應(yīng)用開(kāi)發(fā)中的基本上是事實(shí)標(biāo)準(zhǔn)。
現(xiàn)在的軟件項(xiàng)目不再新開(kāi)發(fā)巨大的單體應(yīng)用,轉(zhuǎn)而開(kāi)發(fā)眾多敏捷輕巧的小應(yīng)用,共同完成一個(gè)大的目標(biāo)。微服務(wù)就是這樣一種應(yīng)用拆分方案的技術(shù)落地。
從上圖看到,每個(gè)微服務(wù)都有自己的業(yè)務(wù)層和數(shù)據(jù)庫(kù)層。相互之間完全獨(dú)立。彼此之間需要采用某種協(xié)議進(jìn)行交互,常見(jiàn)的是HTTP、REST、Dubbo,甚至于使用消息系統(tǒng)交互
原則
1,單一職能原則
這個(gè)原則很熟了,在面向?qū)ο笤O(shè)計(jì)中就經(jīng)常提到。一個(gè)方法,一個(gè)類(lèi),一個(gè)微服務(wù)都應(yīng)該僅負(fù)責(zé)一件事。
2,圍繞業(yè)務(wù)能力構(gòu)建
微服務(wù)算是一種面向業(yè)務(wù)的服務(wù)架構(gòu)設(shè)計(jì)。首先要做的是業(yè)務(wù)模塊的拆解。
微服務(wù)的理念是一切為了業(yè)務(wù)服務(wù)。每個(gè)微服務(wù)要根據(jù)自己解決的業(yè)務(wù)特性而選擇合適的技術(shù)棧。
這一點(diǎn)上和以前的單體應(yīng)用有很大不同。在單體應(yīng)用上,我們通常要考慮各個(gè)業(yè)務(wù)場(chǎng)景的限制,而選擇一些能見(jiàn)過(guò)不能場(chǎng)景的這種方案。
3,持續(xù)運(yùn)維
一個(gè)微服務(wù)開(kāi)發(fā)完成后,會(huì)由開(kāi)發(fā)團(tuán)隊(duì)長(zhǎng)期進(jìn)行后續(xù)的運(yùn)維優(yōu)化工作。
4,基礎(chǔ)設(shè)施的自動(dòng)化
5,應(yīng)對(duì)故障
微服務(wù)強(qiáng)調(diào)故障應(yīng)對(duì)
微服務(wù)強(qiáng)調(diào)監(jiān)控
益處
1,根據(jù)業(yè)務(wù)選擇合適的技術(shù)棧
2,因?yàn)楝F(xiàn)在的服務(wù)都比較小,進(jìn)行顛覆性改造的成本和難度會(huì)小很多
3,服務(wù)集群的水平擴(kuò)展和收縮非常方便
4,服務(wù)是自給自足的,所以服務(wù)底層平臺(tái)的切換更容易。究竟是使用公有云,還是自己搭建私有云平臺(tái)。
5,微服務(wù)可以方便的添加新功能,稱(chēng)為一個(gè)有機(jī)的系統(tǒng)(可以隨著時(shí)間自己成長(zhǎng))
6,隨著技術(shù)的發(fā)展演進(jìn),我們可以將一個(gè)微服務(wù)升級(jí)應(yīng)用新的技術(shù),而不需要升級(jí)整個(gè)系統(tǒng),和前面的有點(diǎn)重復(fù)
7,在一個(gè)微服務(wù)中,可以有多個(gè)版本的某一服務(wù)
8,可以根據(jù)服務(wù)的邊界,確定團(tuán)隊(duì)。在組織劃分上便于打造小而專(zhuān)的團(tuán)隊(duì)
總結(jié)
架構(gòu)選擇的優(yōu)劣只有在系統(tǒng)使用幾年后才能真正顯現(xiàn)出來(lái)
并不是說(shuō)以前的單體架構(gòu)就一無(wú)是處,通過(guò)真確的業(yè)務(wù)理解,優(yōu)秀的設(shè)計(jì),專(zhuān)業(yè)的開(kāi)發(fā)人員。單體應(yīng)用一樣可以支撐業(yè)務(wù)
同樣,對(duì)于微服務(wù)架構(gòu),一個(gè)蹩腳的架構(gòu)設(shè)計(jì),一樣會(huì)導(dǎo)致低劣的產(chǎn)品出來(lái)。要知道,微服務(wù)各個(gè)組件之間的交互是很復(fù)雜的,難以管理和控制。
所以,是一個(gè)好的設(shè)計(jì)+優(yōu)秀的團(tuán)隊(duì)帶來(lái)優(yōu)秀的產(chǎn)品。
我建議先從單體架構(gòu)開(kāi)始設(shè)計(jì)一個(gè)應(yīng)用,但單體應(yīng)用過(guò)于復(fù)雜,可以嘗試拆分微服務(wù)。






