軟件正變得越來(lái)越大。企業(yè)軟件的每一次迭代和發(fā)布都立足于一堆已經(jīng)很龐大的代碼、數(shù)據(jù)集、功能和公式,最終形成更龐大、更廣泛、越來(lái)越全面的軟件應(yīng)用程序、套件或平臺(tái)。
同時(shí),軟件也變得越來(lái)越小。
在分解式互聯(lián)網(wǎng)和云計(jì)算網(wǎng)絡(luò)中,我們?nèi)找媸褂幂^小的增量式(通??芍赜玫模┙M件和微服務(wù)。使用微服務(wù)(和微服務(wù)架構(gòu))描述了一種使用模塊構(gòu)建的軟件系統(tǒng),所有模塊都有自己特別定義的功能、任務(wù)和角色——每個(gè)模塊通過(guò)一個(gè)標(biāo)準(zhǔn)化的、定義清晰的接口(比如API)加以連接。
毫無(wú)疑問(wèn),微服務(wù)方法在大多數(shù)方面都優(yōu)于傳統(tǒng)的單體架構(gòu)。許多組織轉(zhuǎn)向微服務(wù),以避免供應(yīng)商鎖定,消除與單體方法相關(guān)的成本和限制,并提升敏捷性(比如,每個(gè)服務(wù)可以獨(dú)立開發(fā)和部署,無(wú)需引起停運(yùn)或需要重構(gòu)應(yīng)用程序的其他部分)。此外,獲得擁有處理任務(wù)所需的合適功能的工具有明顯的好處。
1、如何運(yùn)行微服務(wù)?如果這些介紹性陳述描述了現(xiàn)代軟件的形態(tài),那么我們應(yīng)該以什么樣的節(jié)奏、什么樣的操作方式來(lái)使用微服務(wù)呢?開源數(shù)據(jù)平臺(tái)公司Directus的聯(lián)合創(chuàng)始人兼首席執(zhí)行官Ben Haynes認(rèn)為,輪輻式(hub and spoke)方案是關(guān)鍵。
他認(rèn)為其理論是體現(xiàn)在軟件應(yīng)用開發(fā)領(lǐng)域的這個(gè)明顯事實(shí)的結(jié)果,即部署大量的微服務(wù)有許多缺點(diǎn)。
Haynes解釋:“從一種簡(jiǎn)單的單體模型到一種有成百上千個(gè)相互依賴關(guān)系的復(fù)雜模型,會(huì)導(dǎo)致難以理解和維護(hù)的數(shù)據(jù)生態(tài)系統(tǒng),需要許多昂貴的許可證,迫使用戶培訓(xùn)和入職面臨陡峭的學(xué)習(xí)曲線。如果其中一項(xiàng)服務(wù)向前邁進(jìn),另一項(xiàng)服務(wù)停滯不前或不再受到支持,它們之間的集成和依賴關(guān)系可能會(huì)隨之破裂。一個(gè)依賴關(guān)系的破裂可能會(huì)造成多米諾骨牌效應(yīng),導(dǎo)致運(yùn)營(yíng)戛然而止。”
由于微服務(wù)常常不能完美地首尾銜接,因此功能上可能存在缺口,需要用定制的軟件代碼和邏輯來(lái)填補(bǔ)。在數(shù)據(jù)在不同平臺(tái)上彼此孤立的情況下,數(shù)據(jù)流之間脆弱的連接也會(huì)讓情況變得更復(fù)雜。
2、為什么采用輪輻式?Haynes面對(duì)一小群國(guó)際媒體時(shí)暢談:“許多組織在評(píng)估技術(shù)架構(gòu)時(shí),應(yīng)改而竭力采用更均衡的‘輪輻式’方法,它們借助的解決方案奠定了完整而堅(jiān)實(shí)的數(shù)據(jù)基礎(chǔ),覆蓋業(yè)務(wù)需求(輪),同時(shí)根據(jù)需要,仍然與微服務(wù)相集成,允許專業(yè)化(輻)。這種方法將單體架構(gòu)的穩(wěn)定性與微服務(wù)的敏捷性相結(jié)合,因此組織可以在不必為復(fù)雜性過(guò)度操心的情況下充分利用優(yōu)勢(shì)。”
他的整個(gè)理論和基本原理比較容易理解和掌握;組織可以將輪視為基礎(chǔ)數(shù)據(jù)層,即可以提供大約80%的所需功能的單一數(shù)據(jù)訪問(wèn)點(diǎn)。
Haynes解釋道:“輪旨在通過(guò)API、軟件開發(fā)工具包(SDK)和webhook等其他工具與應(yīng)用程序連接,以便專門的解決方案結(jié)合在一起,最有效地滿足業(yè)務(wù)需求。”
他接著表示,輪相當(dāng)于通用或關(guān)鍵功能的基準(zhǔn),但仍然允許組織輕松連接其他關(guān)鍵業(yè)務(wù)系統(tǒng),比如Stripe、Hubspot、Salesforce或眾多高度專業(yè)化的工具。
Haynes澄清道:“無(wú)需管理多個(gè)基礎(chǔ)服務(wù),這消除了任何功能缺口,因?yàn)樵诓桓淖兌褩;蚋蓴_運(yùn)營(yíng)的情況下,連接新工具或功能變得很容易。”
3、須經(jīng)實(shí)際檢驗(yàn)他怎么如此自信地認(rèn)為這種方法有效呢?因?yàn)樗_表示,Directus正是使用這種模板創(chuàng)建了今天推向市場(chǎng)的開放數(shù)據(jù)平臺(tái)技術(shù)。其平臺(tái)旨在取代單一平臺(tái)中的許多不同系統(tǒng)(通過(guò)單一可擴(kuò)展的API整合數(shù)據(jù),并確保數(shù)據(jù)易于訪問(wèn))。
在最近一個(gè)例子中,一家國(guó)際航空公司使用Directus平臺(tái)整合了單一數(shù)據(jù)源的多個(gè)系統(tǒng),包括預(yù)訂、庫(kù)存、機(jī)場(chǎng)服務(wù)亭、移動(dòng)應(yīng)用程序等,最終降低了成本,消除了系統(tǒng)之間的數(shù)據(jù)差異。
Haynes總結(jié)道:“通常來(lái)說(shuō),我們發(fā)現(xiàn)輪輻模型消除了軟件開發(fā)/部署方面的障礙,減輕了工程師的負(fù)擔(dān)——讓他們可以騰出時(shí)間,以處理更高價(jià)值的創(chuàng)收活動(dòng)。”
軟件工程社區(qū)有一句很受歡迎的格言,說(shuō)的是“面臨選擇時(shí),兩者都要”——這句真理在這里得到了很好的證明和驗(yàn)證。隨著軟件世界變得越來(lái)越大的同時(shí)變得越來(lái)越小,我們就需要能夠在每個(gè)層面都倡導(dǎo)平衡之道。
現(xiàn)在是時(shí)候做大了,但也要借助輪輻式邏輯做小,不過(guò)先不妨給輪胎打打氣。
原文鏈接:https://www.forbes.com/sites/adrianbridgwater/2023/01/10/how-to-use-software-microservices/?sh=3bd18ea11085