微服務(wù)是一種用于構(gòu)建應(yīng)用的架構(gòu)方案。微服務(wù)架構(gòu)有別于更為傳統(tǒng)的單體式方案,可將應(yīng)用拆分成多個核心功能。每個功能都被稱為一項服務(wù),可以單獨構(gòu)建和部署,這意味著各項服務(wù)在工作(和出現(xiàn)故障)時不會相互影響。
微服務(wù)架構(gòu)模式與面向服務(wù)的架構(gòu)(SOA)類似,而SOA已經(jīng)是一種非常成熟的軟件設(shè)計模式。
早期在開發(fā)應(yīng)用時,即使要對現(xiàn)有應(yīng)用做很小的改動,也需要對整個版本及其質(zhì)量保證(QA)周期進(jìn)行批量式更新,而這很可能會影響很許多子團(tuán)隊的工作推進(jìn)速度。這種方案常被稱為“單體式”,因為整個應(yīng)用的源代碼都被構(gòu)建到了單個部署單元(如.war或.ear)中。如果應(yīng)用因某個部分的更新而出錯,則整個應(yīng)用都要下線,然后縮減,再加以修復(fù)。雖然這種方案如今仍適用于小型應(yīng)用,但是眾多正在成長中的企業(yè)無法承受停機(jī)所帶來的影響。
改用面向服務(wù)的架構(gòu)后,應(yīng)用被構(gòu)建為可重復(fù)使用的離散型服務(wù),這些服務(wù)會通過企業(yè)服務(wù)總線(ESB)進(jìn)行通信。采用這種架構(gòu)時,各項服務(wù)會分別圍繞特定的業(yè)務(wù)流程來規(guī)劃,并會遵循相應(yīng)的通信協(xié)議(如SOAP、ActiveMQ或Apache Thrift)通過ESB進(jìn)行共享。在通過ESB集成后,這套服務(wù)就可以形成一個完整的應(yīng)用。
一方面,這種架構(gòu)方式使得各項服務(wù)可以同時構(gòu)建、測試和調(diào)整,不會再受限于單體式開發(fā)周期。另一方面,雖然使用ESB意味著整個系統(tǒng)只會出現(xiàn)單點故障,但在某種程度上,消除單體式結(jié)構(gòu)只會形成新的故障點:即ESB本身,因此它可能會成為整個企業(yè)的瓶頸所在。