從Netflix、Amazon、Airbnb等公司的成功實(shí)踐開始,微服務(wù)因其高度的彈性、靈活性和效率的巨大提升,迅速受到各領(lǐng)域架構(gòu)師和技術(shù)決策者的關(guān)注,一躍成為2016年IT領(lǐng)域最受關(guān)注的技術(shù)潮流之一。
而在幾年前,所謂的微服務(wù)架構(gòu)不過是滿大街充斥的軟件架構(gòu)里的一個(gè)新名詞而已,甚至可以說微服務(wù)架構(gòu)的受寵和容器云的到來不無關(guān)系。
微服務(wù)很美,卻也有太多的不足
很多人將微服務(wù)看作是SOA的升級(jí),或許也正是這個(gè)原因,微服務(wù)架構(gòu)相比于單體應(yīng)用解決了很多問題,本身也帶來了一系列的復(fù)雜性難題。
一般來說,微服務(wù)架構(gòu)的一個(gè)明顯特征就是局部修改,局部更新。比如說對一個(gè)單體應(yīng)用進(jìn)行修改時(shí),可能要先把整個(gè)包給停了,然后再去修改,而微服務(wù)只需逐步修改和更新即可。
此外,微服務(wù)具有故障隔離的有點(diǎn),單體應(yīng)用是跑在一起,所以只要一個(gè)模塊有問題,其他就都會(huì)有問題,而微服務(wù)的故障隔離性、業(yè)務(wù)可持續(xù)性都非常高。
還有就是微服務(wù)的資源利用率非常高,這一點(diǎn)通過Airbnb、迪斯尼、Dropbox、Twitter等公司的實(shí)踐得到了驗(yàn)證,使用微服務(wù)架構(gòu)之后,軟件的構(gòu)建和部署在速度和靈活性上都得到巨大提升,交付成本更低,系統(tǒng)更具彈性,開發(fā)周期削減多達(dá)75%。
不過在現(xiàn)有的架構(gòu)下,微服務(wù)架構(gòu)的復(fù)雜性一直是一些公司將其拒之門外的原因所在。
其一,微服務(wù)間較強(qiáng)的依賴關(guān)系管理。如果拆成微服務(wù)依賴關(guān)系該如何處理,比如說某個(gè)微服務(wù)更新了會(huì)不會(huì)對整個(gè)系統(tǒng)造成影響。
其二,微服務(wù)本身的部署復(fù)雜。因?yàn)槲⒎?wù)是一個(gè)網(wǎng)狀分布的,一個(gè)微服務(wù)應(yīng)用往往有數(shù)百個(gè)實(shí)例構(gòu)成,每個(gè)應(yīng)用實(shí)例都需要配置諸如數(shù)據(jù)庫和消息中間件等基礎(chǔ)服務(wù)。
其三,微服務(wù)面臨資源分配的難題。在使用微服務(wù)的情況下,需要為每一個(gè)微服務(wù)按需分配資源,那么該為每個(gè)微服務(wù)分配多少資源,啟動(dòng)多少個(gè)實(shí)例呢,這也是非常大的問題。
除此之外,微服務(wù)還面臨著監(jiān)管和協(xié)作方面的難題。Docker的崛起似乎讓微服務(wù)架構(gòu)迎來了曙光,尤其是以Docker為基礎(chǔ)的容器云給DevOps帶來了一場革命,也加速了微服務(wù)架構(gòu)的實(shí)現(xiàn)。
微服務(wù)和容器是1+1>2的結(jié)合
和很多容器平臺(tái)一樣,網(wǎng)易蜂巢也看到了微服務(wù)架構(gòu)在容器云平臺(tái)上的優(yōu)越性。微服務(wù)解決了單體式應(yīng)用的復(fù)雜性問題,應(yīng)用被分解為多個(gè)可管理的分支或服務(wù), 每個(gè)服務(wù)有相對獨(dú)立的部署,更容易開發(fā)、理解和維護(hù)。而網(wǎng)易蜂巢正是憑借持續(xù)集成、高可用的平臺(tái)服務(wù)、完善的運(yùn)維工具等吸引了大批的企業(yè)用戶。
首先容器技術(shù)有效提升了微服務(wù)的架構(gòu)能力。比如說網(wǎng)易蜂巢團(tuán)隊(duì)利用Kubernetes容器集群管理技術(shù),結(jié)合網(wǎng)易豐富的互聯(lián)網(wǎng)產(chǎn)品經(jīng)驗(yàn),實(shí)現(xiàn)了微服務(wù)發(fā)布、高可用和集群伸縮等特性。使得應(yīng)用程序能夠更快地進(jìn)行創(chuàng)建,并且更易于維護(hù),同時(shí)又能夠得到更高的質(zhì)量。