微服務(wù)架構(gòu)和SOA區(qū)別
最準(zhǔn)確的說法:微服務(wù)是SOA的一種實(shí)現(xiàn)
最符合實(shí)際的說法:微服務(wù)是去ESB的SOA
背后實(shí)際上是兩種思想的分歧:分布還是集中
當(dāng)然這里說的不是服務(wù)的分布和集中。服務(wù)肯定是分布的,這是大前提,是SOA的本質(zhì)理念之一。分歧在于對(duì)服務(wù)的治理,是分布還是集中。
開發(fā)——在這兩種架構(gòu)中,都可以使用不同的編程語言和工具開發(fā)服務(wù),將技術(shù)的多樣性引入到開發(fā)團(tuán)隊(duì),在多個(gè)團(tuán)隊(duì)中組織開發(fā)。但是,在SOA中,每個(gè)團(tuán)隊(duì)需要了解公共通信機(jī)制。通過微服務(wù),服務(wù)可以獨(dú)立于其他服務(wù)操作和部署。因此,更容易頻繁地部署新版本的微服務(wù),或獨(dú)立擴(kuò)展服務(wù)。
“邊界上下文”——SOA鼓勵(lì)共享組件,而微服務(wù)則試圖通過“邊界上下文”最小化共享?!斑吔缟舷挛摹敝附M件和數(shù)據(jù)作為一個(gè)最小依賴項(xiàng)的單個(gè)單元的耦合。由于SOA依賴于多個(gè)服務(wù)來實(shí)現(xiàn)業(yè)務(wù)請(qǐng)求,因此構(gòu)建在SOA上的系統(tǒng)比微服務(wù)慢。
通信——在SOA中,ESB可能成為影響整個(gè)系統(tǒng)的單一故障點(diǎn)。由于每個(gè)服務(wù)都是通過ESB進(jìn)行通信,如果其中一個(gè)慢下來,就可以通過對(duì)該服務(wù)的請(qǐng)求阻塞ESB。而微服務(wù)的容錯(cuò)能力要好得多。例如,如果一個(gè)微服務(wù)有內(nèi)存故障,那么只會(huì)影響這一個(gè)服務(wù),其他微服務(wù)將繼續(xù)定期處理請(qǐng)求。
互操作性——SOA通過其消息傳遞中間件組件,使用多個(gè)異構(gòu)協(xié)議。微服務(wù)試圖通過減少集成的選擇數(shù)量來簡化體系結(jié)構(gòu)模式。因此,如果希望在異構(gòu)環(huán)境中使用不同的協(xié)議集成多個(gè)系統(tǒng),則需要考慮SOA。如果所有服務(wù)都可以通過相同的遠(yuǎn)程協(xié)議訪問,微服務(wù)是更好的選擇。
范圍——SOA和微服務(wù)的主要區(qū)別在于大小和范圍。微服務(wù)的前綴“Micro”指的是內(nèi)部組件的顆粒度,它比SOA要小得多。微服務(wù)中的服務(wù)組件通常只有一個(gè)目的。而SOA服務(wù)包括更多的業(yè)務(wù)功能,可以視為完整的子系統(tǒng)。
3結(jié)論
不能簡單地說一個(gè)架構(gòu)比另一個(gè)更好,這主要取決于企業(yè)構(gòu)建的應(yīng)用程序的目的。SOA更適合于需要與其他應(yīng)用程序集成的更大、更復(fù)雜的環(huán)境。也就是說,較小的應(yīng)用程序并不適合SOA,因?yàn)樗鼈儾恍枰鬟f中間件組件。另一方面,微服務(wù)更適合于較小的、分區(qū)良好的基于web的系統(tǒng)。如果正在開發(fā)移動(dòng)或web應(yīng)用程序,那么微服務(wù)將給開發(fā)人員更大的控制權(quán)??傊?,微服務(wù)和SOA服務(wù)于不同的目的,是完全不同類型的架構(gòu)。
服務(wù)拆分粒度:SOA首先要解決的是異構(gòu)應(yīng)用的服務(wù)化;微服務(wù)強(qiáng)調(diào)的是服務(wù)拆分盡可能小,最好是獨(dú)立的原子服務(wù)。
服務(wù)依賴:傳統(tǒng)的SOA服務(wù),由于需要重用已有的資產(chǎn),存在大量的服務(wù)間依賴;微服務(wù)的設(shè)計(jì)理念是服務(wù)自治,功能單一獨(dú)立,避免依賴其他服務(wù)產(chǎn)生的耦合,耦合會(huì)帶來更高的復(fù)雜度。
服務(wù)規(guī)模:傳統(tǒng)的SOA服務(wù)粒度比較大,多數(shù)會(huì)采用將多個(gè)服務(wù)合成打成war包的方案,因此服務(wù)實(shí)例比較有限;微服務(wù)強(qiáng)調(diào)盡可能拆分,同時(shí)很多服務(wù)會(huì)獨(dú)立部署,這將導(dǎo)致服務(wù)規(guī)模急劇膨脹,對(duì)服務(wù)治理和運(yùn)維帶來新的挑戰(zhàn)。
架構(gòu)差異:微服務(wù)化后,服務(wù)數(shù)量的激增會(huì)引起框架質(zhì)量性的變化,例如企業(yè)集成總線ESB(實(shí)總線)逐漸被P2P的虛擬總線替代;為了保證高性能低時(shí)延,需要高性能的分布式服務(wù)框架保證微服務(wù)架構(gòu)的實(shí)例。
服務(wù)治理:傳統(tǒng)基于SOA Governance的靜態(tài)治理轉(zhuǎn)型為服務(wù)運(yùn)行態(tài)微治理實(shí)時(shí)生效。
敏捷交付:服務(wù)由小團(tuán)隊(duì)負(fù)責(zé)微服務(wù)設(shè)計(jì) 開發(fā) 測試 部署線上治理,灰度發(fā)布和下線,運(yùn)維珍哥生命周期支撐,實(shí)現(xiàn)真正的DevOps。
總結(jié):量變引起質(zhì)變,這就是微服務(wù)框架和SOA服務(wù)化框架的最大差異。