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