如今新應(yīng)用程序的開發(fā)都與交付速度有關(guān)。向敏捷環(huán)境的大規(guī)模轉(zhuǎn)移已經(jīng)持續(xù)了數(shù)年,這促使人們有一種輕松快速地部署軟件的意識。
微服務(wù)是面向服務(wù)的體系結(jié)構(gòu)(SOA)的一種變體,它將應(yīng)用程序構(gòu)建為松散耦合服務(wù)的集合。將應(yīng)用程序拆分為更小服務(wù)的好處包括:改進(jìn)了模塊化,使應(yīng)用程序更易于開發(fā)和測試。
“微服務(wù)增強(qiáng)了團(tuán)隊(duì)授權(quán),減少了耦合,使各個團(tuán)隊(duì)能更快地進(jìn)行創(chuàng)新,減少跨團(tuán)隊(duì)之間的溝通,并且有權(quán)自己做出有關(guān)架構(gòu)、語言和框架的決策,”Verizon媒體集團(tuán)(Verizon Media Group)工程、體育及媒體制作工程副總裁坎貝爾(EJ Campbell)說道,該集團(tuán)是擁有50個在線品牌的通信公司的子公司。
坎貝爾說:“我們已經(jīng)看到,隨著團(tuán)隊(duì)采用微服務(wù),從提交到制作的周期時(shí)間顯著縮短。” “許多團(tuán)隊(duì)每天多次部署微服務(wù),無需任何人工干預(yù),依靠測試、代碼審查和復(fù)雜的CI/CD(持續(xù)集成/持續(xù)交付)管道來確保變更內(nèi)容的安全交付。”
該公司的“Yahoo Daily Fantasy”產(chǎn)品含有多個微服務(wù),包括核心游戲服務(wù)、體育數(shù)據(jù)服務(wù)、錢包服務(wù)和一些支持內(nèi)部服務(wù)。“這些服務(wù)中的每一個都有自己的持續(xù)部署管道、獨(dú)立的數(shù)據(jù)存儲以及負(fù)責(zé)其開發(fā)和運(yùn)營的各自團(tuán)隊(duì),”坎貝爾說。
使用微服務(wù)時(shí),各個組織可能會遇到許多挑戰(zhàn)。這些挑戰(zhàn)包括確定多個服務(wù)之間的正確邊界,克服微服務(wù)環(huán)境中團(tuán)隊(duì)之間共享代碼的困難,以及克服變更管理的復(fù)雜性,因?yàn)楦鲌F(tuán)隊(duì)都是獨(dú)立發(fā)布代碼。
轉(zhuǎn)向微服務(wù)代表著一場大變革,各個組織需要做好應(yīng)對這種重大轉(zhuǎn)變的準(zhǔn)備。
“向微服務(wù)的演變就像是從馬到自行車,或從自行車到汽車的過程,”Solutions By Design II (SBD)公司項(xiàng)目副經(jīng)理Jay Bercher說道,這是一家管理咨詢和技術(shù)服務(wù)公司,與聯(lián)邦機(jī)構(gòu)合作,協(xié)助其轉(zhuǎn)向基于微服務(wù)的IT工作方式。
“當(dāng)我們經(jīng)歷演變的多個階段時(shí),我們會發(fā)現(xiàn)有更多的東西在變化,”Bercher說。“每個變化的東西都需要一定級別的維護(hù),對這么多方面的支持和監(jiān)督不僅使解決方案更加復(fù)雜,而且還增加了相關(guān)成本。因此,我們必須仔細(xì)審查我們的決定,以確保這些決定不僅是最佳的技術(shù)決策,而且還具有成本效益。”
另一個挑戰(zhàn)是安全性。“我們必須確定是否要在整個應(yīng)用程序中實(shí)施單一驗(yàn)證解決方案,或者我們是否要對每個微服務(wù)都設(shè)置其自己的驗(yàn)證流程,”Bercher說。“這是一個必須根據(jù)具體情況做出的決定,并且是每個項(xiàng)目團(tuán)隊(duì)需要自己做出的決定。”
以下是一些建議的最佳做法,以應(yīng)對挑戰(zhàn)并在微服務(wù)環(huán)境中順利發(fā)展。
采用領(lǐng)域驅(qū)動設(shè)計(jì)
Bercher說,創(chuàng)建微服務(wù)是為了使服務(wù)松散耦合,并應(yīng)用單一責(zé)任原則。
“盡管有各種開發(fā)方式和方法,但領(lǐng)域驅(qū)動設(shè)計(jì)和微服務(wù)似乎是完美組合,”Bercher說。 SBD公司的團(tuán)隊(duì)使用領(lǐng)域驅(qū)動設(shè)計(jì),這是一種構(gòu)建應(yīng)用程序的主題方法,可創(chuàng)建一種高效的開發(fā)模式,消除大多數(shù)團(tuán)隊(duì)的相互依賴性。
“在我們的工作中,領(lǐng)域與微服務(wù)的相關(guān)性基本上是一對一的,”Bercher說。“因此,每個開發(fā)團(tuán)隊(duì)都負(fù)責(zé)一個領(lǐng)域,同時(shí)也負(fù)責(zé)開發(fā)相應(yīng)的微服務(wù)。這就建立了明確的責(zé)任劃分,從而限制了并行開發(fā)工作中可能出現(xiàn)的冗余。”
建立代碼庫指南
坎貝爾說,在微服務(wù)環(huán)境下,團(tuán)隊(duì)之間共享代碼要困難得多。
“不像在一個整體架構(gòu)中,公共代碼只是一個方法調(diào)用,而微服務(wù)架構(gòu)的通用性必須分解到獨(dú)立的服務(wù)中,或者代碼必須打包到一個共享庫中,”坎貝爾說。
使用這些庫通常很慢,并且進(jìn)行更改需要在庫所有者和多個服務(wù)之間進(jìn)行協(xié)調(diào)。“因此,對于公共庫和上線產(chǎn)品的要求,各個組織應(yīng)采用一套強(qiáng)有力的指導(dǎo)方針,這非常重要,”坎貝爾說。
不要在微服務(wù)之間共享數(shù)據(jù)庫
“在構(gòu)建我們的解耦合服務(wù)時(shí),我們允許我們的開發(fā)團(tuán)隊(duì)構(gòu)建自己的數(shù)據(jù)庫,為我們的(后端系統(tǒng))提供數(shù)據(jù),這可限制對其他開發(fā)團(tuán)隊(duì)的依賴性,”Bercher說。
“我們的開發(fā)團(tuán)隊(duì)將他們書寫的內(nèi)容推送到后端,供其他人使用,然后我們的數(shù)據(jù)團(tuán)隊(duì)會管理這些信息,”Bercher說。“這延續(xù)了即插即用的概念。如果您需要更換某一服務(wù),只需將其取出并插入新服務(wù)即可。這就像更換燈泡,只是稍微復(fù)雜一點(diǎn)。”
由于微服務(wù)在設(shè)計(jì)上是模塊化的,因此開發(fā)過程主要是即插即用,從而可以非常輕松地解決可能出現(xiàn)的任何問題。
“因?yàn)榇a不會在整個平臺上傳播,我們可以快速將問題隔離到一個特定的源,然后在微服務(wù)中對其跟蹤,”Bercher說。“通過允許對每個微服務(wù)進(jìn)行零碎的更新和升級,可以輕松更新應(yīng)用程序。你能想象一次升級一個系統(tǒng)而不進(jìn)行大規(guī)模替換嗎?僅這一概念就徹底改變了系統(tǒng)開發(fā)。”
SBD公司在美國各地設(shè)有開發(fā)團(tuán)隊(duì),可以增強(qiáng)微服務(wù)的優(yōu)勢。位于南卡羅來納州查爾斯頓的團(tuán)隊(duì)成員具有更高的開發(fā)獨(dú)立性,因?yàn)樗麄冋陂_發(fā)自己的微服務(wù),并可將其加入解決方案中。
解決安全問題
與IT相關(guān)的任何其他事情一樣,微服務(wù)也有自己的安全問題。
企業(yè)應(yīng)該在軟件開發(fā)生命周期的早期就要頻繁地查找已知的漏洞,電子商務(wù)、支付和營銷服務(wù)提供商數(shù)字湖公司(Digital River)的首席信息官瑞恩•道格拉斯(Ryan Douglas)說。
道格拉斯說:“對于我們在快節(jié)奏環(huán)境中工作的任何IT團(tuán)隊(duì)來說,一個重要信條是識別和修復(fù)本地解決方案以及第三方軟件的漏洞。”“這對維護(hù)安全至關(guān)重要。對軟件生態(tài)系統(tǒng)采取全局方法,了解它如何協(xié)同工作以及潛在問題區(qū)域所在,這是至關(guān)重要的。”
道格拉斯說,使用微服務(wù)時(shí),軟件補(bǔ)丁部署更容易測試。“而且這不僅適用于自己開發(fā)的代碼,”他說。“IT工程師可以在自己開發(fā)軟件的同時(shí)測試第三方軟件的漏洞。一旦發(fā)現(xiàn)漏洞,可以比以前的單一代碼結(jié)構(gòu)更快地部署修復(fù)程序。”
避免出現(xiàn)復(fù)雜情況
DXC Technology公司是在CSC公司和惠普企業(yè)部門合并后成立的一家IT服務(wù)提供商,該公司的應(yīng)用服務(wù)首席技術(shù)官JP Morgenthal說,復(fù)雜情況在大型微服務(wù)部署中很容易發(fā)生。
“如果組織機(jī)構(gòu)沒有謹(jǐn)慎地確保某一系統(tǒng)架構(gòu)來推動微服務(wù)的使用,甚至可能存在遞歸數(shù)據(jù)路徑,Morgenthal說。“在使用獨(dú)立的跨職能團(tuán)隊(duì)和服務(wù)存儲庫之間,可能會出現(xiàn)依賴關(guān)系,從而導(dǎo)致系統(tǒng)使微服務(wù)原則失效,”他說。
應(yīng)該能夠更改或刪除單個微服務(wù),而不會對整個系統(tǒng)產(chǎn)生重大影響。Morgenthal表示,最佳做法是使用企業(yè)架構(gòu)來驗(yàn)證微服務(wù)設(shè)計(jì)。
考慮從頭開始構(gòu)建應(yīng)用程序
房地產(chǎn)服務(wù)提供商Carrington Mortgage Holdings推出的直接面向消費(fèi)者的抵押貸款平臺Vylla.com,該平臺最近將其技術(shù)架構(gòu)轉(zhuǎn)移到微服務(wù)。
“當(dāng)我們決定遷移到微服務(wù)時(shí),我們遇到的挑戰(zhàn)之一是,是否要逐個拆分應(yīng)用程序或進(jìn)行完全重寫,”Carrington Mortgage公司首席技術(shù)官約翰•尼古拉斯(John Nicholas)說。
“由于一些預(yù)先設(shè)定的業(yè)務(wù)需求,我們需要在很短的時(shí)間內(nèi)提供新功能,”尼古拉斯說。 “起初,我們試圖通過一些成功的結(jié)果整合到整體架構(gòu)中。然而,我們也知道,將應(yīng)用程序拆分會比重寫我們現(xiàn)有的大部分功能更加困難。”
考慮到這一點(diǎn),開發(fā)團(tuán)隊(duì)決定最好的前進(jìn)方向是從頭開始構(gòu)建新的應(yīng)用程序。“這是一項(xiàng)艱巨的任務(wù),需要我們所有團(tuán)隊(duì)成員付出巨大努力,但自從做出這種轉(zhuǎn)變后,在短時(shí)間內(nèi)就證明這是值得的,”尼古拉斯說。
尼古拉斯表示,由于成功部署微服務(wù)需要大量的技術(shù)投資,因此必須有一個明確定義的商業(yè)案例,來概述新技術(shù)如何提高性能或提高運(yùn)營效率,這是很重要的。
“這里的關(guān)鍵是找到合適的人才,”尼古拉斯說。“找到有經(jīng)驗(yàn)的工程師能輕松完成這一工作并不容易。我們已經(jīng)能夠建立一個強(qiáng)大的工程團(tuán)隊(duì),了解正確的架構(gòu),并且有一支強(qiáng)大的質(zhì)量保證團(tuán)隊(duì),圍繞應(yīng)用程序構(gòu)建自動化測試。”
進(jìn)行擴(kuò)展時(shí),需衡量其性能
通過添加服務(wù)器,可對整體應(yīng)用程序進(jìn)行全面擴(kuò)展以滿足需求的飆升,SpotCues公司的聯(lián)合創(chuàng)始人Praveen Kanyadi表示,該公司利用人工智能提供生產(chǎn)力軟件。
“對于微服務(wù)來說,模塊化架構(gòu)只允許對系統(tǒng)的某些部分進(jìn)行擴(kuò)展,”Kanyadi說。“然而,微服務(wù)需要一種非常不同的擴(kuò)展方法,因?yàn)榈湫偷奈⒎?wù)架構(gòu)部署可能包含在不同服務(wù)器上運(yùn)行的多個組件以及虛擬化協(xié)同工作。”
在識別哪些單個組件升級方面,這就增加了挑戰(zhàn)。“這是衡量性能變得至關(guān)重要的地方,而像應(yīng)用程序交付控制器等工具可以幫助測量和檢測性能問題,”Kanyadi說。
Kanyadi表示,企業(yè)還應(yīng)考慮根據(jù)業(yè)務(wù)優(yōu)先級為每個微服務(wù)的性能和可靠性定義服務(wù)水平協(xié)議(SLA)。
專注于變革管理
企業(yè)需要更新變革管理和變更控制流程以及支持文檔,以便從整體架構(gòu)向微服務(wù)架構(gòu)的轉(zhuǎn)變中受益。
“更快的開發(fā)過程很好,但不要因?yàn)楹雎宰兏刂坪推渌匾闹卫砹鞒潭鴣G掉微服務(wù)的好處,”Avant Communications公司的首席云計(jì)算官羅恩•海曼(Ron Hayman)說道,該公司為IT渠道銷售市場提供云服務(wù)。
“確保您將變更控制和審批流程與您的敏捷開發(fā)生命周期相匹配,”海曼說。