近日,Tareq Abedrabbo在倫敦2017 μCon微服務(wù)大會上說,SOA對微服務(wù)架構(gòu)設(shè)計的殘余影響仍然存在,包括技術(shù)選型和組織方面的問題。最直接的一個例子就是大多數(shù)企業(yè)仍然區(qū)分對待架構(gòu)師和開發(fā)人員,架構(gòu)師負(fù)責(zé)出規(guī)范,開發(fā)人員負(fù)責(zé)實(shí)現(xiàn)。
OpenCredo CTO Abedrabbo在大公司和小公司都工作過,這些公司在向微服務(wù)架構(gòu)遷移的過程中仍然受到SOA的影響。他在演講中對SOA和微服務(wù)進(jìn)行了有趣的對比,不過他也強(qiáng)調(diào),盡管SOA存在問題,但不能把全部責(zé)任都推給SOA。
重用性與變更管理。Abedrabbo認(rèn)為,重用性之所以對SOA來說十分重要,主要是因?yàn)镾OA缺乏成熟的變更管理工具。服務(wù)一旦部署好了,就不太愿意做出變更,因?yàn)槌杀咎摺6⒎?wù)在變更管理方面具有一定的優(yōu)勢,因?yàn)閷ξ⒎?wù)做出變更的成本要小得多。
集成與組合。SOA架構(gòu)強(qiáng)調(diào)的是集成,客戶端可以向服務(wù)器端發(fā)送任何格式的數(shù)據(jù),包括XML,服務(wù)器端負(fù)責(zé)解析和處理這些數(shù)據(jù)。而在微服務(wù)架構(gòu)里則恰好相反,微服務(wù)注重組合,服務(wù)調(diào)用端需要自己知道如何調(diào)用其他服務(wù)。Abedrabbo對此總結(jié)說,集成增加復(fù)雜性,而組合降低復(fù)雜性。
技術(shù)重用與功能重用。SOA注重技術(shù)重用,我們總是希望盡可能多地重用一個服務(wù),盡管對服務(wù)做出變更有很大阻力。而微服務(wù)架構(gòu)更注重讓小型的服務(wù)專注于特定的業(yè)務(wù)功能上。
靜態(tài)與動態(tài)。SOA需要處理所有的事情,一個SOAP調(diào)用不僅要處理業(yè)務(wù)邏輯,還要處理安全和事務(wù)方面的問題。而微服務(wù)更加動態(tài),微服務(wù)生態(tài)系統(tǒng)的不同部分負(fù)責(zé)處理不同的問題。
有SOA背景的開發(fā)人員在構(gòu)建微服務(wù)時容易使用反模式,比如分布式單體,他們只是對一個邊界進(jìn)行無機(jī)拆解。對一個已有的單體進(jìn)行解耦時,如果不考慮邊界問題就很容易犯這個錯。在與遺留系統(tǒng)進(jìn)行集成時太過關(guān)注底層的解耦,但沒有考慮到通信保證、冪等性等因素,這也是很常見的問題。這樣的系統(tǒng)只會增加復(fù)雜性,體現(xiàn)不出微服務(wù)的優(yōu)勢。
Abedrabbo給出了一些建議用于解決這方面的問題:
采用領(lǐng)域驅(qū)動設(shè)計。使用微服務(wù)實(shí)現(xiàn)領(lǐng)域邏輯,避免單純地從技術(shù)角度設(shè)計可重用的微服務(wù)。不要使用規(guī)范的數(shù)據(jù)模型。規(guī)范的數(shù)據(jù)模型只會阻礙微服務(wù)系統(tǒng)的演化,所以我們應(yīng)該使用局部數(shù)據(jù)視圖。正常化元數(shù)據(jù),并將它們從其他數(shù)據(jù)中分離出來。使用正確的工具。比如,每個微服務(wù)都應(yīng)該有自己的數(shù)據(jù)庫。多個服務(wù)共享一個數(shù)據(jù)庫是一種反模式,不過如果使用圖數(shù)據(jù)庫或許會是個好辦法。明年的微服務(wù)大會將于2018年11月5號至6號召開。
查看英文原文:About the SOA Heritage Impact on Microservices