服務(wù)化到微服務(wù)1、微服務(wù)的產(chǎn)生 隨著互聯(lián)網(wǎng)企業(yè)的不斷發(fā)展,海量用戶發(fā)起的大規(guī)模、高并發(fā)請(qǐng)求是企業(yè)不得不面對(duì)的,上一篇 架構(gòu)雜談《一》雜談的SOA服務(wù)化系統(tǒng)能夠分解任務(wù),讓每個(gè)服務(wù)更簡(jiǎn)單、職責(zé)單一、更易于擴(kuò)展。但無(wú)論是Web Service 還是ESB,都有時(shí)代遺留下的問(wèn)題。 Web Service: 1)依賴中心化的服務(wù)發(fā)現(xiàn)機(jī)制 2)使用SOAP通訊協(xié)議,通常使用XML格式來(lái)序列化通信數(shù)據(jù),XML格式的數(shù)據(jù)冗余太大,協(xié)議太重 3)服務(wù)化管理和治理設(shè)施并不完善 ESB: 1)ESB 雖然是SOA實(shí)現(xiàn)的一種方式,卻更多地體現(xiàn)了系統(tǒng)集成的便利性,通過(guò)統(tǒng)一的服務(wù)總線將各個(gè)服務(wù)組合在一起 2)組合在ESB上的服務(wù)本身有可能是一個(gè)臃腫的服務(wù) 3)系統(tǒng)內(nèi)部的復(fù)雜性仍然存在。ESB試圖通過(guò)總線來(lái)掩蓋系統(tǒng)內(nèi)部的復(fù)雜性 4)對(duì)于總線本身中心化的管道模型,系統(tǒng)變更時(shí)影響的范圍會(huì)隨之?dāng)U大 出現(xiàn)問(wèn)題解決問(wèn)題是人類進(jìn)步的階梯,對(duì)于軟件架構(gòu)也是一樣,近年來(lái)服務(wù)架構(gòu)設(shè)計(jì)得到了進(jìn)一步的演化和發(fā)展,微服務(wù)架構(gòu)已經(jīng)出現(xiàn)在不同公司的討論、設(shè)計(jì)和實(shí)踐中,經(jīng)過(guò)市場(chǎng)檢驗(yàn)的東西肯定會(huì)被大家所接受。 微服務(wù)架構(gòu)提倡將軟件應(yīng)用設(shè)計(jì)成多個(gè)可獨(dú)立開(kāi)發(fā)、配置、運(yùn)行和維護(hù)的子服務(wù),子服務(wù)之間通過(guò)良好的接口定義通信機(jī)制,通常使用RESTful風(fēng)格的API形式來(lái)通信。因?yàn)镽ESTful 風(fēng)格的 API 通常是在 HTTP 或者 HTTPS 通道上傳輸 JSON 格式的數(shù)據(jù)來(lái)實(shí)現(xiàn)的, HTTP協(xié)議有跨語(yǔ)言、跨異構(gòu)系統(tǒng)的優(yōu)點(diǎn), 當(dāng)然也可通過(guò)底層的二進(jìn)制協(xié)議、消息隊(duì)列協(xié)議等進(jìn)行交互。這些服務(wù)不需要中心化的統(tǒng)一管理,每個(gè)服務(wù)的功能可自治,并且可由不同的語(yǔ)言、系統(tǒng)和平臺(tái)實(shí)現(xiàn) 。 微服務(wù)架構(gòu)致力于松耦合和高內(nèi)聚的效果,與SOA和ESB相比,不再?gòu)?qiáng)調(diào)服務(wù)總線和通信機(jī)制的多樣性,通常通過(guò)RESTful 風(fēng)格的API和輕量級(jí)的消息通信協(xié)議來(lái)完成。 微服務(wù)架構(gòu)并不是為了拆分而拆分,真正的目的是通過(guò)對(duì)微服務(wù)進(jìn)行水平擴(kuò)展解決傳統(tǒng)的單體應(yīng)用在業(yè)務(wù)急劇增長(zhǎng)時(shí)遇到的問(wèn)題,而且由于拆分的微服務(wù)系統(tǒng)中專業(yè)的人做 專業(yè)的事,人員和項(xiàng)目的職責(zé)單一、低藕合、高內(nèi)聚,所以產(chǎn)生問(wèn)題的概率就會(huì)降到最小。 2、微服務(wù)與單體的對(duì)比
(微服務(wù)架構(gòu)圖) 從上圖可以得到: 1) 微服務(wù)把每一個(gè)職責(zé)單一的功能放在一個(gè)獨(dú)立的服務(wù)中 2) 每個(gè)服務(wù)運(yùn)行在一個(gè)單獨(dú)的進(jìn)程中 3) 每個(gè)服務(wù)有多個(gè)實(shí)例在運(yùn)行,每個(gè)實(shí)例可以運(yùn)行在容器化平臺(tái)內(nèi) 4) 每個(gè)服務(wù)有自己的數(shù)據(jù)存儲(chǔ),實(shí)際上,每個(gè)服務(wù)應(yīng)該有自己獨(dú)享的數(shù)據(jù)庫(kù)、緩存、消息隊(duì)列等 5) 每個(gè)服務(wù)都可根據(jù)性能需求獨(dú)立地水平伸縮
(單體架構(gòu)圖) 通過(guò)對(duì)比,可以得到傳統(tǒng)單體架構(gòu)的特點(diǎn): 1) 傳統(tǒng)單體架構(gòu)將所有模塊化組件糅合后運(yùn)行在同一個(gè)服務(wù)的進(jìn)程中 2) 某個(gè)模塊發(fā)生變更時(shí),需要將所有的模塊編譯、打包上線 3) 久而久之,模塊間的依賴將會(huì)不清晰,互相耦合,互相依賴成為常態(tài) 通過(guò)將兩種架構(gòu)對(duì)比來(lái)看,微服務(wù)架構(gòu)更加的靈活并且可水平伸縮,可以讓專業(yè)的人干專業(yè)的事。 3、微服務(wù)與SOA服務(wù)的對(duì)比 微服務(wù)架構(gòu)的一些特點(diǎn)與 SOA 服務(wù)化架構(gòu)相似, 事實(shí)上微服務(wù)架構(gòu)與 SOA 服務(wù)化架構(gòu)并不沖突,它們一脈相承,微服務(wù)架構(gòu)是服務(wù)化架構(gòu)響應(yīng)特定歷史時(shí)期的使用場(chǎng)景的延續(xù),是服務(wù)化進(jìn)行升華井落地的一種實(shí)現(xiàn)方式。 SOA 服務(wù)化的理念在微服務(wù)架構(gòu)中仍然有效,微服務(wù)在 SOA 服務(wù)化的基礎(chǔ)上進(jìn)行了演進(jìn)和疊加,形成了適合現(xiàn)代化應(yīng)用場(chǎng)景的一個(gè)方法論。 經(jīng)過(guò)幾十年互聯(lián)網(wǎng)的高速發(fā)展,以及敏捷、持續(xù)集成、持續(xù)交付、DevOps、云技術(shù)等的深入人心,服務(wù)架構(gòu)的開(kāi)發(fā)、測(cè)試、部署以及監(jiān)控等,相比SOA已經(jīng)發(fā)生大的變化。 1) SOA 服務(wù)化涉及的范圍更廣一些,強(qiáng)調(diào)不同的異構(gòu)服務(wù)之間的協(xié)作和契約 ,并強(qiáng)調(diào)有效集成、業(yè)務(wù)流程編排、歷史應(yīng)用集成等,典型代表為 Web Service 和 ESB 2) 微服務(wù)使用一系列的微小服務(wù)來(lái)實(shí)現(xiàn)整體的業(yè)務(wù)流程,目的是有效地拆分應(yīng)用,實(shí)現(xiàn)敏捷開(kāi)發(fā)和部署,在每個(gè)微小服務(wù)的團(tuán)隊(duì)里,減少了跨團(tuán)隊(duì)的溝通,讓專業(yè)的人做專業(yè)的事,縮小變更和法代影響的范圍,并達(dá)到單一微服務(wù)更容易水平擴(kuò)展的目的 3) 微服務(wù)將完整的應(yīng)用拆分成多個(gè)細(xì)小的服務(wù),通常使用敏捷擴(kuò)容、縮容的 Docker 技術(shù)來(lái)實(shí)現(xiàn)自動(dòng)化的容器管理 , 每個(gè)微服務(wù)運(yùn)行在單一的進(jìn)程內(nèi),微服務(wù)中的部署互相獨(dú)立 、 互不影響。 4) SOA 服務(wù)化通常將多個(gè)業(yè)務(wù)服務(wù)通過(guò)組件化模塊方式打在一個(gè)包里,然后統(tǒng)一部署在一個(gè)應(yīng)用服務(wù)器上。 6) SOA 對(duì)粒度沒(méi)有要求 , 在實(shí)踐中服務(wù)通常是粗粒度的,強(qiáng)調(diào)接口契約的規(guī)范化,內(nèi)部實(shí)現(xiàn)可以更粗粒度。 相比SOA的服務(wù)實(shí)現(xiàn)方式,微服務(wù)更具靈活性、可實(shí)施性以及可擴(kuò)展性,其強(qiáng)調(diào)的是一種獨(dú)立測(cè)試、獨(dú)立部署、獨(dú)立運(yùn)行的軟件架構(gòu)模式。對(duì)于微服務(wù)的概念而言,它是SOA的一個(gè)子集,而對(duì)于其實(shí)現(xiàn)方式而言,它是一種更符合現(xiàn)代化互聯(lián)網(wǎng)發(fā)展趨勢(shì)的實(shí)踐,是一種更容易幫助企業(yè)或組織有效并成功實(shí)施的服務(wù)架構(gòu)。 總結(jié) 最后讓我來(lái)總結(jié)下微服務(wù)架構(gòu)的主要特點(diǎn)
說(shuō)明: 1、文中的圖都來(lái)自于百度圖片 2、參考書(shū)籍:《分布式服務(wù)架構(gòu):原理、設(shè)計(jì)與實(shí)戰(zhàn)》 3、如有不合適的地方請(qǐng)反饋。綜合后更改。 |
|
來(lái)自: python_lover > 《待分類》