譯者 | 李睿
審校 | 重樓
微服務(wù)架構(gòu)作為小型、獨(dú)立、松散耦合的服務(wù)套件,促進(jìn)了應(yīng)用程序的開發(fā)。由于其眾多優(yōu)點(diǎn)(例如可擴(kuò)展性、可靠性、更快的開發(fā)周期、更容易維護(hù)單個(gè)服務(wù)等),在軟件行業(yè)中獲得了廣泛的關(guān)注,很多組織正在按照微服務(wù)架構(gòu)構(gòu)建應(yīng)用程序。然而,微服務(wù)也面臨一些陷阱。
在工作中處理用例時(shí),可以觀察到微服務(wù)架構(gòu)的另一面,即微服務(wù)的激增。本文將詳細(xì)介紹與過度創(chuàng)建微服務(wù)(微服務(wù)激增)相關(guān)的陷阱,并提供有關(guān)其原因、影響和潛在緩解策略的見解。
什么是微服務(wù)激增?
微服務(wù)激增指應(yīng)用程序框架/生態(tài)系統(tǒng)中微服務(wù)數(shù)量的不受控制、不受監(jiān)管,以及在某種程度上不受歡迎的增長(zhǎng)。這通常是由于缺乏架構(gòu)計(jì)劃和治理、架構(gòu)監(jiān)督、服務(wù)定義和邊界不明確,以及組織邊界等一些非技術(shù)原因造成的。微服務(wù)激增會(huì)導(dǎo)致架構(gòu)復(fù)雜性增加、效率和性能下降、運(yùn)營(yíng)和維護(hù)挑戰(zhàn)、功能重復(fù)以及服務(wù)調(diào)用迷宮,進(jìn)而導(dǎo)致性能進(jìn)一步下降和可能對(duì)客戶產(chǎn)生負(fù)面影響。以下討論其中的一些陷阱及其可能的解決方法。
常見的陷阱
1.架構(gòu)復(fù)雜性增加
隨著生態(tài)系統(tǒng)中微服務(wù)數(shù)量的增加,服務(wù)生態(tài)系統(tǒng)(及其架構(gòu))也會(huì)變得越來越復(fù)雜。這將給整個(gè)生態(tài)系統(tǒng)的設(shè)計(jì)、開發(fā)、部署、功能發(fā)布和維護(hù)方面帶來進(jìn)一步復(fù)雜性和挑戰(zhàn)。
影響
(1)服務(wù)可能變得過于依賴其他服務(wù)或與其他服務(wù)過于耦合,從而在服務(wù)中人為地制造了不必要的架構(gòu)分隔,這導(dǎo)致開發(fā)者難以真正理解系統(tǒng)架構(gòu)并對(duì)其進(jìn)行任何更改。
(2)隨著系統(tǒng)中活動(dòng)部件(架構(gòu)中的服務(wù))的增加,維護(hù)系統(tǒng)的操作負(fù)擔(dān)也在增加。每個(gè)微服務(wù)都需要自己的基礎(chǔ)設(shè)施、指標(biāo)和警報(bào)的維護(hù)和管理,從而給值班人員和團(tuán)隊(duì)增加了運(yùn)營(yíng)負(fù)擔(dān)。
潛在的緩解策略
(1)明確服務(wù)的清晰定義和邊界。確保它們具有內(nèi)聚性和功能限制。記住,不需要為每一個(gè)新的映射、每一個(gè)新配置或每一個(gè)系統(tǒng)將擁有的新實(shí)體構(gòu)建一個(gè)新的服務(wù)。
(2)定期審查和審核架構(gòu),棄用不需要的服務(wù)。折疊或合并重復(fù)的服務(wù)以簡(jiǎn)化架構(gòu)。
2.功能發(fā)布的復(fù)雜性增加
由于微服務(wù)激增增加了更多的活動(dòng)部件(也稱為服務(wù)),因此功能發(fā)布可能需要對(duì)相對(duì)較多的服務(wù)進(jìn)行更改。這使功能發(fā)布過程變得復(fù)雜,因?yàn)楣δ苄枰诙鄠€(gè)服務(wù)中進(jìn)行部署。這增加了功能發(fā)布過程中失敗的風(fēng)險(xiǎn),因?yàn)樵谝粋€(gè)服務(wù)中部署失敗可能會(huì)破壞整個(gè)功能發(fā)布過程,并可能導(dǎo)致其他影響(數(shù)據(jù)完整性、系統(tǒng)完整性等)。
影響
(1)增加了跨服務(wù)協(xié)調(diào)部署所需的復(fù)雜性和工作量,從而增加了操作開銷。
(2)復(fù)雜的回滾過程,特別是在服務(wù)相互依賴的情況下,導(dǎo)致操作開銷進(jìn)一步增加。
(3)較長(zhǎng)的發(fā)布計(jì)劃和回滾計(jì)劃可能導(dǎo)致系統(tǒng)處于過渡狀態(tài)的時(shí)間更長(zhǎng),從而導(dǎo)致行為不一致,進(jìn)而導(dǎo)致客戶體驗(yàn)不一致。
潛在的緩解策略
(1)在所有服務(wù)管道中遵循CI/CD原則,以自動(dòng)化部署過程,并在管道之間安全地部署更改,確保發(fā)布的一致性和可靠性。
(2)當(dāng)一個(gè)功能發(fā)布涉及多個(gè)服務(wù)時(shí),使用功能標(biāo)志將功能的啟動(dòng)與部署解耦,并在其中涉及的服務(wù)中干凈地控制新功能的啟動(dòng)。
3.性能下降
微服務(wù)激增可能會(huì)導(dǎo)致整個(gè)系統(tǒng)的性能下降,這主要是因?yàn)檎?qǐng)求需要經(jīng)過多個(gè)躍點(diǎn),從而導(dǎo)致額外的網(wǎng)絡(luò)延遲。
影響
(1)第一個(gè)影響是服務(wù)客戶請(qǐng)求的延遲增加,主要是因?yàn)檎?qǐng)求需要在多個(gè)系統(tǒng)之間進(jìn)行交互。
(2)一個(gè)存在資源競(jìng)爭(zhēng)或?qū)崿F(xiàn)(或基礎(chǔ)設(shè)施)未優(yōu)化的服務(wù)可能會(huì)影響整個(gè)服務(wù)生態(tài)系統(tǒng)。
(3)最后,考慮到維護(hù)系統(tǒng)的成本,這可能意味著更多的基礎(chǔ)設(shè)施成本和相對(duì)較少的性能收益。
潛在的緩解策略
(1)實(shí)現(xiàn)服務(wù)網(wǎng)格以優(yōu)化服務(wù)之間的通信并減少延遲。然而,這給架構(gòu)增加了另一個(gè)組件,并使其更加復(fù)雜。
(2)在必要時(shí)進(jìn)行緩存,以減少網(wǎng)絡(luò)調(diào)用帶來的開銷和延遲。
(3)定期對(duì)服務(wù)進(jìn)行負(fù)載測(cè)試,優(yōu)化服務(wù)瓶頸。
4.重復(fù)
隨著新服務(wù)的創(chuàng)建,重復(fù)和冗余的特性和代碼的風(fēng)險(xiǎn)也隨之增加,從而導(dǎo)致資源的浪費(fèi)。
影響
(1)重復(fù)的服務(wù)導(dǎo)致更高的維護(hù)成本,從而導(dǎo)致系統(tǒng)效率低下。
(2)服務(wù)的客戶可能會(huì)對(duì)使用哪個(gè)服務(wù)感到困惑,從而導(dǎo)致系統(tǒng)進(jìn)一步的低效率和錯(cuò)誤。
潛在的緩解策略
(1)在組織內(nèi)提倡重用文化。只要可能,鼓勵(lì)團(tuán)隊(duì)重用或擴(kuò)展現(xiàn)有服務(wù),而不是創(chuàng)建新服務(wù)。
(2)維護(hù)一個(gè)服務(wù)目錄,詳細(xì)說明每個(gè)服務(wù)的清晰定義、責(zé)任和支持的功能。在團(tuán)隊(duì)內(nèi)部定期審查和審核。
5.測(cè)試復(fù)雜性增加
隨著微服務(wù)數(shù)量的增長(zhǎng),功能端到端測(cè)試的復(fù)雜性也在增加。隨著系統(tǒng)中微服務(wù)的增加,維護(hù)數(shù)據(jù)和系統(tǒng)完整性變得越來越復(fù)雜。
影響
(1)跨多個(gè)服務(wù)協(xié)調(diào)和執(zhí)行測(cè)試用例可能成為后勤上的噩夢(mèng),從而導(dǎo)致測(cè)試不完整,從而導(dǎo)致未檢測(cè)到的問題。
(2)測(cè)試單個(gè)服務(wù)需要付出更多的努力,因?yàn)樗枰獜?fù)雜的模擬設(shè)置,這可能無法準(zhǔn)確地表示實(shí)際場(chǎng)景。
(3)在整個(gè)服務(wù)生態(tài)系統(tǒng)的端到端測(cè)試中需要付出更多的努力,因此需要更高的投資和成本來安全推出新功能。
潛在的緩解策略
(1)實(shí)現(xiàn)自動(dòng)化測(cè)試框架,它可以模擬多個(gè)服務(wù)之間的復(fù)雜交互。
(2)進(jìn)行分階段測(cè)試,首先測(cè)試單個(gè)服務(wù),然后根據(jù)所涉及服務(wù)的接口對(duì)整個(gè)生態(tài)系統(tǒng)進(jìn)行端到端測(cè)試。
6.機(jī)會(huì)成本增加和資源利用不佳
隨著微服務(wù)數(shù)量的增長(zhǎng),維護(hù)服務(wù)的成本、開發(fā)新功能的成本以及這些服務(wù)的基礎(chǔ)設(shè)施成本也在增加。它還增加了機(jī)會(huì)成本,因?yàn)橛糜诰S護(hù)這些服務(wù)或在這些服務(wù)之上進(jìn)行構(gòu)建的資源可以用于解決其他問題。
影響
(1)更高的開發(fā)、維護(hù)和基礎(chǔ)設(shè)施成本。
(2)更高的機(jī)會(huì)成本。
(3)浪費(fèi)資源,因?yàn)閳F(tuán)隊(duì)一直在維護(hù)現(xiàn)有的服務(wù),而不是在解決其他問題上投入資源。
潛在的緩解策略
(1)提倡重用或擴(kuò)展的文化,只在必要時(shí)構(gòu)建新服務(wù)。
(2)定期檢查端到端架構(gòu),并進(jìn)行實(shí)驗(yàn)以發(fā)現(xiàn)瓶頸。合并或棄用服務(wù)以簡(jiǎn)化架構(gòu),從而提高資源利用率。
結(jié)論
微服務(wù)激增是真實(shí)存在的,并帶來了巨大的挑戰(zhàn),可能會(huì)破壞微服務(wù)架構(gòu)的好處,從而導(dǎo)致復(fù)雜性的增加、性能的下降、資源利用率欠佳,以及錯(cuò)失解決其他問題的機(jī)會(huì)。通過認(rèn)識(shí)到這些陷阱并實(shí)現(xiàn)戰(zhàn)略性和有效的緩解措施,組織的團(tuán)隊(duì)可以應(yīng)對(duì)微服務(wù)激增的復(fù)雜性,從而確保他們利用這種架構(gòu)模式的真正好處。
原文標(biāo)題:Microservice Proliferation: Too Many Microservices,作者:Sumit Kumar