微服務(wù)架構(gòu) 原來(lái)應(yīng)用開(kāi)發(fā)還可以這么美好
單體應(yīng)用這種傳統(tǒng)開(kāi)發(fā)思維已經(jīng)難以在新時(shí)代站住腳了。
一個(gè)簡(jiǎn)單的應(yīng)用會(huì)隨著時(shí)間推移逐漸變大。在每次的sprint中,開(kāi)發(fā)團(tuán)隊(duì)都會(huì)面對(duì)新“故事”,然后開(kāi)發(fā)許多新代碼。幾年后,這個(gè)小而簡(jiǎn)單的應(yīng)用會(huì)變成了一個(gè)巨大的怪物。
一旦你的應(yīng)用變成一個(gè)又大又復(fù)雜的怪物,那開(kāi)發(fā)團(tuán)隊(duì)肯定很痛苦。敏捷開(kāi)發(fā)和部署舉步維艱,其中最主要問(wèn)題就是這個(gè)應(yīng)用太復(fù)雜,以至于任何單個(gè)開(kāi)發(fā)者都不可能搞懂它。因此,修正bug和正確的添加新功能變的非常困難,并且很耗時(shí)。另外,團(tuán)隊(duì)士氣也會(huì)走下坡路。
***,單體式應(yīng)用使得采用新架構(gòu)和語(yǔ)言非常困難。比如,設(shè)想你有兩百萬(wàn)行采用XYZ框架寫(xiě)的代碼。如果想改成ABC框架,無(wú)論是時(shí)間還是成本都是非常昂貴的,即使ABC框架更好。因此,這是一個(gè)無(wú)法逾越的鴻溝。你不得不在最初選擇面前低頭。
相對(duì)于單體(Monolithic)應(yīng)用而言,微服務(wù)是采用一組服務(wù)的方式來(lái)構(gòu)建一個(gè)應(yīng)用,服務(wù)獨(dú)立部署在不同的進(jìn)程中,不同服務(wù)通過(guò)一些輕量級(jí)交互機(jī)制來(lái)通信,例如 RPC、HTTP 等,服務(wù)可獨(dú)立擴(kuò)展伸縮,每個(gè)服務(wù)定義了明確的邊界,不同的服務(wù)甚至可以采用不同的編程語(yǔ)言來(lái)實(shí)現(xiàn),由獨(dú)立的團(tuán)隊(duì)來(lái)維護(hù)。
比喻來(lái)講,單點(diǎn)服務(wù)是把所有的東西放在一個(gè)大盒子里,這個(gè)大盒子里什么都有。微服務(wù)更像是車(chē)箱,每個(gè)箱子里包含特定的功能模塊和物品,所有東西可以很靈活地拆分出來(lái)。換言之,在單點(diǎn)服務(wù)中,所有的部件都在一個(gè)巨大的軟件包中。在微服務(wù)架構(gòu)下,有很多獨(dú)立存在的小服務(wù),通過(guò) API 接口連接成龐大的系統(tǒng)。
表面上看來(lái),微服務(wù)架構(gòu)模式有點(diǎn)像SOA,他們都由多個(gè)服務(wù)構(gòu)成。但是,可以從另外一個(gè)角度看此問(wèn)題,微服務(wù)架構(gòu)模式是一個(gè)不包含Web服務(wù)(WS-)和ESB服務(wù)的SOA。微服務(wù)應(yīng)用樂(lè)于采用簡(jiǎn)單輕量級(jí)協(xié)議,比如REST,而不是WS-,在微服務(wù)內(nèi)部避免使用ESB以及ESB類(lèi)似功能。微服務(wù)架構(gòu)模式也拒絕使用canonical schema等SOA概念。
微服務(wù)架構(gòu)下,技術(shù)選型是去中心化的。每個(gè)團(tuán)隊(duì)可以根據(jù)自身服務(wù)的需求和行業(yè)發(fā)展的現(xiàn)狀,自由選擇最適合的技術(shù)棧。由于每個(gè)微服務(wù)相對(duì)簡(jiǎn)單,當(dāng)需要對(duì)技術(shù)棧進(jìn)行升級(jí)時(shí)所面臨的風(fēng)險(xiǎn)較低,甚至完全重構(gòu)一個(gè)微服務(wù)也是可行的。當(dāng)某一組建發(fā)生故障時(shí),在單一進(jìn)程的傳統(tǒng)架構(gòu)下,故障很有可能在進(jìn)程內(nèi)擴(kuò)散,形成應(yīng)用全局性的不可用。在微服務(wù)架構(gòu)下,故障會(huì)被隔離在單個(gè)服務(wù)中。若設(shè)計(jì)良好,其他服務(wù)可通過(guò)重試、平穩(wěn)退化等機(jī)制實(shí)現(xiàn)應(yīng)用層面的容錯(cuò)。
使用微服務(wù)構(gòu)建適合云的新型應(yīng)用是很有意義的,因?yàn)樗屇慵壤昧藱M向擴(kuò)展架構(gòu),也利用了縱向擴(kuò)展架構(gòu),還額外得到API的組合,且在整個(gè)業(yè)務(wù)中可重復(fù)利用。可能在每一分鐘都在交付新服務(wù),這樣你就會(huì)擁有一個(gè)敏捷的且即時(shí)響應(yīng)的應(yīng)用程序平臺(tái),當(dāng)然這一平臺(tái)一直在不斷改進(jìn)中,微服務(wù)架構(gòu)也在前進(jìn)著。