Joris Kuipers在一次演講中聲稱,將現(xiàn)有系統(tǒng)遷移到微服務(wù)與構(gòu)建一個(gè)新的系統(tǒng)迥然不同。該演講描述了一個(gè)正在進(jìn)行中的將大型單片應(yīng)用重構(gòu)成更加分布式的或基于微服務(wù)的架構(gòu)的過(guò)程。
Kuipers是Trifork Amsterdam的一名架構(gòu)師,他所描述的應(yīng)用是一個(gè)醫(yī)療保障的電子病歷系統(tǒng)。它于六年前創(chuàng)建,頭兩年是一個(gè)帶有少量B2B集成的單片應(yīng)用。從一開(kāi)始,它就是使用Trifork開(kāi)發(fā)的開(kāi)源框架Axon基于命令查詢責(zé)任隔離(CQRS)構(gòu)建的。它運(yùn)行得很好,但是隨著系統(tǒng)和用戶數(shù)量的增長(zhǎng),新需求出現(xiàn)了,包含針對(duì)保險(xiǎn)開(kāi)支的需求,保險(xiǎn)開(kāi)支必須是一個(gè)單獨(dú)的應(yīng)用,但是仍然需要使用當(dāng)前應(yīng)用的數(shù)據(jù)。因?yàn)樗麄儸F(xiàn)在不得不轉(zhuǎn)向共享狀態(tài)的多個(gè)應(yīng)用,這是一個(gè)巨大的改變。
今天,核心應(yīng)用仍然相當(dāng)龐大,周?chē)鷩@著三個(gè)獨(dú)立的保險(xiǎn)開(kāi)支應(yīng)用,在十多個(gè)可部署的應(yīng)用中,一共包含了近40個(gè)第三方集成功能。它擁有約65個(gè)租戶和12,000個(gè)用戶。
許多集成的生命周期比核心應(yīng)用短得多,所以他們轉(zhuǎn)向微服務(wù)的主要原因是因?yàn)樾枰獢U(kuò)展開(kāi)發(fā)以適應(yīng)集成的不同的生命周期。擴(kuò)展開(kāi)發(fā)團(tuán)隊(duì)和加大開(kāi)發(fā)步伐是這一轉(zhuǎn)變的真實(shí)動(dòng)力。
因?yàn)樵陂_(kāi)始重構(gòu)的時(shí)候他們的應(yīng)用是基于CQRS和事件的,他們決定使用事件作為集成點(diǎn),通過(guò)消息代理向其它集成應(yīng)用廣播所有事件。他們將所有存在的B2B集成相關(guān)的代碼抽取到單獨(dú)的應(yīng)用中,將它們連接到代理上以獲取所有發(fā)送的事件。針對(duì)抽取出來(lái)的應(yīng)用,需要與核心應(yīng)用通信的,他們使用了核心應(yīng)用中已經(jīng)存在的CQRS命令。
數(shù)據(jù)流的典型例子是用戶使用核心應(yīng)用更新一些數(shù)據(jù)。該更新進(jìn)而會(huì)引起事件的發(fā)布,然后集成應(yīng)用異步讀取事件,基于這種邏輯,這會(huì)發(fā)送通知給外部應(yīng)用。Kuipers把這看作一個(gè)軸輻式架構(gòu),核心應(yīng)用是hub,被幾個(gè)更小的應(yīng)用圍繞。他指出這種通過(guò)消費(fèi)者解藕的方式是一種非常適合他們的轉(zhuǎn)向微服務(wù)的方式。
對(duì)于Kuipers來(lái)講,事件對(duì)于拆分一個(gè)系統(tǒng)有非常大的幫助,因?yàn)樗鼈儽举|(zhì)上是異步的,描述已經(jīng)發(fā)生的事情,并且其它系統(tǒng)能夠監(jiān)聽(tīng)并響應(yīng)它。他指出使用事件也會(huì)引入一些挑戰(zhàn),當(dāng)事件成為集成的支柱時(shí),考慮這些挑戰(zhàn)尤其重要。這些挑戰(zhàn)有:
既然事件是共享的數(shù)據(jù)結(jié)構(gòu),它們可能導(dǎo)致耦合 一些事件可能需要在一個(gè)應(yīng)用或者一個(gè)服務(wù)內(nèi)私有 需要考慮類(lèi)型粒度和數(shù)據(jù)量,它們能夠防止事件處理器請(qǐng)求更多的數(shù)據(jù) 不破壞客戶端的情況下事件如何隨著時(shí)間演化作為結(jié)論,Kuipers指出,他們現(xiàn)在能快速開(kāi)發(fā)和部署與主應(yīng)用隔離的新集成功能,這也意味著風(fēng)險(xiǎn)的降低,因?yàn)楹诵南到y(tǒng)沒(méi)有被動(dòng)過(guò),Kuipers聲稱所有這些讓他們有了重要的競(jìng)爭(zhēng)優(yōu)勢(shì)。
查看英文原文:Moving a Monolithic Application towards a Microservices Architecture