對(duì)很多企業(yè)而言,處理遺留軟件現(xiàn)代化問題都是很大的痛點(diǎn)。但是,微服務(wù)可能能夠有所助益。Brad Irby深入解釋了該領(lǐng)域。
遺留軟件現(xiàn)代化一直步履維艱。在周圍技術(shù)世界不斷變化的過程中維護(hù)應(yīng)用本身非常痛苦。開發(fā)人員都想使用最新的技術(shù),因此要求開發(fā)人員停留在舊的技能,使用舊的技術(shù)工作,這也很困難。微服務(wù)能夠提供無需重寫任何東西就可以在舊的技術(shù)里使用的新功能,從而給這些遺留系統(tǒng)帶來了新的生機(jī)。
微服務(wù)提供了一種方式來獲取并且處理應(yīng)用本身之外的數(shù)據(jù)。遺留軟件和微服務(wù)之間的所有通信都是通過JSON完成的,意味著使用數(shù)據(jù)的遺留應(yīng)用和微服務(wù)本身共享的只有這一種通信協(xié)議。因此,可以使用合適的任意語(yǔ)言來編寫微服務(wù)。需要使用F#編寫的業(yè)務(wù)邏輯來加強(qiáng)ASP經(jīng)典網(wǎng)站?使用微服務(wù)完成處理,并且返回結(jié)果。是否已經(jīng)擁有了Cobol程序需要使用的,由C#編寫并且調(diào)試的路由?微服務(wù)是解決方案。
因?yàn)榭梢杂煤线m的任意語(yǔ)言編寫這些服務(wù),它們自然也能讓開發(fā)人員滿意。很少有開發(fā)人員愿意維護(hù)遺留應(yīng)用程序,但是如果能讓他們體驗(yàn)最新的編程語(yǔ)言和最新的架構(gòu),無需被之前存在的架構(gòu)束縛,那么就更容易說服他們。
微服務(wù)也是“傳播愛心”的機(jī)會(huì),讓大家都參與進(jìn)來。因?yàn)樵诜?wù)和遺留應(yīng)用程序之間有很大的組件壁壘,所以編寫服務(wù)的開發(fā)人員不需要像遺留軟件現(xiàn)代化處理那樣屬于同一個(gè)團(tuán)隊(duì)。編寫了合適的需求之后,微服務(wù)是非常好的可以外包到海外更便宜開發(fā)地的項(xiàng)目。它擁有特定的交付需求,是單獨(dú)的系統(tǒng),能夠在虛擬空間開發(fā),必須是插入即可使用的,從而也可以按需替換。
微服務(wù)最大的ROI是關(guān)于遺留軟件現(xiàn)代化正在移除重寫遺留應(yīng)用的需求。使用這種新方案不僅僅能夠加強(qiáng)遺留代碼,而且它還幫助消除了從頭重寫應(yīng)用的壓力——這通常也是一種昂貴的選擇。
即使已經(jīng)決定重寫遺留應(yīng)用,微服務(wù)也提供了一種緩慢并且可預(yù)測(cè)的方式,而且不會(huì)違反任何服務(wù)級(jí)別協(xié)議。已有應(yīng)用上一小步一小步地改動(dòng),使用微服務(wù)替換某個(gè)功能。這樣,大家可以緩慢減少遺留應(yīng)用的規(guī)模,從而減少了重寫所需要的時(shí)間。
使用微服務(wù)有上述這些優(yōu)勢(shì),當(dāng)然也有需要慎重考慮的方面。比如,該方案可能被過度使用。從定義上講,微服務(wù)是小的,但是它們需要完成支持生產(chǎn)環(huán)境的首展流程和測(cè)試。雖然達(dá)到這些目標(biāo)所需的工作量很小,但是的確存在,并且不能忽略。如果想要使用太多的微服務(wù)來加強(qiáng)已有應(yīng)用,那么可能就需要在各個(gè)問題之間均衡考慮。
另一個(gè)問題是性能問題。任何時(shí)候跨越服務(wù)界線,系統(tǒng)性能都會(huì)受到一定的影響。微服務(wù)通過調(diào)用異步實(shí)現(xiàn)有助于讓應(yīng)用程序看上去響應(yīng)更快一些,但是更難(或者不可能)在遺留技術(shù)里這么編碼實(shí)現(xiàn)。當(dāng)使用微服務(wù)作為加強(qiáng)遺留應(yīng)用程序已有特性的方案時(shí),必須假定該特性的性能會(huì)下降。能接受多大幅度的下降取決于業(yè)務(wù)需求。如果通過微服務(wù)在遺留應(yīng)用程序里實(shí)現(xiàn)新功能,會(huì)更加容易一些,因?yàn)橹坝脩魧?duì)此沒有性能上的預(yù)期。
當(dāng)然,所有這些都假定遺留語(yǔ)言擁有某些屬性。比如,我們假定語(yǔ)言能夠構(gòu)建Web服務(wù)調(diào)用。雖然語(yǔ)言越古老,可能越難實(shí)現(xiàn)這一點(diǎn),不過我還不知道有什么語(yǔ)言不能構(gòu)建Web服務(wù)調(diào)用的。
異步調(diào)用也很必要。Web服務(wù)的任何異步調(diào)用都是災(zāi)難可能發(fā)生的地方,因?yàn)橛脩艉芸炀蜁?huì)抱怨系統(tǒng)性能。構(gòu)造異步調(diào)用要求多線程的支持,可能很難找到(我說的就是,COBOL)。在進(jìn)入微服務(wù)世界之前,一定要確保這些基本功能是可用的。