流行術(shù)語(yǔ)為那些逐步形成的、需要一個(gè)好的“標(biāo)簽”來(lái)方便交流的概念提供了一個(gè)上下文。微服務(wù)就是這樣的一個(gè)新“標(biāo)簽”,它定義了一個(gè)領(lǐng)域,這個(gè)領(lǐng)域我自己也發(fā)現(xiàn)了,并且現(xiàn)在已經(jīng)使用了一段時(shí)間。我慢慢認(rèn)識(shí)到,相關(guān)文章和會(huì)議所描述的東西,我已經(jīng)從自己過(guò)去幾年的個(gè)人經(jīng)歷中引申出來(lái)。行業(yè)和專家對(duì)微服務(wù)的討論讓 Netflix、亞馬遜、谷歌等已經(jīng)成功實(shí)現(xiàn)微服務(wù)的公司成為了焦點(diǎn),而我有一些個(gè)人經(jīng)驗(yàn),可以為成功實(shí)現(xiàn)微服務(wù)提供一些啟發(fā)。
以下是任何架構(gòu)都遵循的三個(gè)標(biāo)準(zhǔn)和常見(jiàn)的業(yè)務(wù)驅(qū)動(dòng)力:
·提高敏捷性——及時(shí)響應(yīng)業(yè)務(wù)需求,促進(jìn)企業(yè)發(fā)展
·提升用戶體驗(yàn)——提升客戶體驗(yàn),減少客戶流失
·降低成本——降低增加產(chǎn)品、客戶或業(yè)務(wù)方案的成本
實(shí)際上,在日常工作中,所有人都試圖這樣做。SOA 創(chuàng)建了一種業(yè)務(wù)一致的軟件框架,使企業(yè)可以達(dá)成上述目標(biāo)。已經(jīng)出現(xiàn)了幾家大型的軟件供應(yīng)商,宣稱他們的產(chǎn)品套件可以推動(dòng)企業(yè)實(shí)現(xiàn) SOA。
如果沒(méi)有合適的人員、文化和投入,那么 SOA 會(huì)無(wú)法實(shí)現(xiàn)業(yè)務(wù)價(jià)值。微服務(wù)同 SOA 并沒(méi)有根本的不同,它們的目標(biāo)和目的是相同的,但微服務(wù)方法更精煉。事實(shí)上,簡(jiǎn)單來(lái)說(shuō),微服務(wù)就是可擴(kuò)展的 SOA。對(duì)于迫切需要由單體實(shí)現(xiàn)轉(zhuǎn)變成分布式、去中心化的服務(wù)平臺(tái)并為許多應(yīng)用程序提供服務(wù)的應(yīng)用程序 / 系統(tǒng),微服務(wù)提供了這種可能。微服務(wù)是獨(dú)立的,它擁抱敏捷,并允許應(yīng)用程序隨企業(yè)的數(shù)字化轉(zhuǎn)型進(jìn)化。微服務(wù)的成功取決于服務(wù)獨(dú)立性和靈活度。
我會(huì)將微服務(wù)定義為“一種實(shí)現(xiàn) SOA 的方法,它通過(guò)構(gòu)建細(xì)粒度的服務(wù)支持分布式的、按功能域組織的業(yè)務(wù)能力”。沒(méi)有哪種模式是魔法棒或銀彈。你應(yīng)該專門針對(duì)一個(gè)企業(yè)構(gòu)思和定制模式。企業(yè)應(yīng)該重點(diǎn)解決那些可以為建立自適應(yīng)平臺(tái)的架構(gòu)提供支持的必要事項(xiàng)。
非常不幸的是,一些企業(yè)在實(shí)現(xiàn) SOA 時(shí)失敗了——因?yàn)樗麄儧](méi)有充分分析他們的業(yè)務(wù)能力模型,認(rèn)為開(kāi)發(fā) Web 服務(wù)就是 SOA,或者從大型供應(yīng)商那里購(gòu)買一個(gè) SOA 套件就實(shí)現(xiàn)了 SOA,或者他們沒(méi)有能力闡述 SOA 同其業(yè)務(wù)驅(qū)動(dòng)力 / 目標(biāo)的一致性。
例子
我經(jīng)歷過(guò)的一個(gè)例子也許可以說(shuō)明這一點(diǎn)。在以前的一個(gè)崗位上,企業(yè)的目標(biāo)是提高敏捷性、提升用戶體驗(yàn)以及降低成本。我們決定構(gòu)建一個(gè)標(biāo)準(zhǔn)的多租戶 SOA 平臺(tái)。我們選擇的方法是開(kāi)發(fā)細(xì)粒度的服務(wù),以便我們能夠經(jīng)常修改,并將便于管理的小變更部署到平臺(tái)。如果今天我們采用了同樣的方法,那么我們會(huì)稱其為微服務(wù)架構(gòu)。當(dāng)時(shí)還沒(méi)有這個(gè)術(shù)語(yǔ),但它就是有效。
服務(wù)根據(jù)業(yè)務(wù)能力建模,初次發(fā)布進(jìn)展順利。這是些基于 JMS 的 XML 同步服務(wù),主要用于為面向代理商、Web 和語(yǔ)音通道應(yīng)用程序的索賠平臺(tái)提供其所需的業(yè)務(wù)能力。它為我們提供了敏捷性,使我們可以頻繁部署小變更,使我們的應(yīng)用程序可以完美支持 A/B 功能。
當(dāng)需求逐步增加(需求總是會(huì)增加)時(shí),由于應(yīng)用程序同消費(fèi)者之間集成復(fù)雜度很高,所以難以實(shí)現(xiàn)方案的快速發(fā)布。集成、功能測(cè)試、產(chǎn)品發(fā)布需要緊密協(xié)作。隨著業(yè)務(wù)開(kāi)始擴(kuò)展,與初次發(fā)布相比,變更多了 10 多倍,而且,由于交付周期中的大部分任務(wù)都是手工的,所以推向市場(chǎng)的時(shí)間無(wú)法達(dá)到企業(yè)預(yù)期。很快,糟糕的微服務(wù)自動(dòng)化和生命周期管理導(dǎo)致了“交付熵(delivery entropy)”,我們的目標(biāo)一個(gè)也實(shí)現(xiàn)不了了。