做好一個(gè)中臺(tái),需要具備哪些能力?
關(guān)于中臺(tái),現(xiàn)在已經(jīng)爛大街了。隨便幾個(gè)微服務(wù)整一整,對(duì)外就號(hào)稱中臺(tái)。但中臺(tái)到底是什么?做好中臺(tái)需要具備哪些能力?今天我們就來(lái)聊一聊中臺(tái)。
什么是中臺(tái)?
2015 年阿里巴巴提出中臺(tái)概念和戰(zhàn)略,從那時(shí)候開始「中臺(tái)」這個(gè)技術(shù)名詞就開始火熱起來(lái),尤其是從 2019 年開始進(jìn)入了爆發(fā)期。前段時(shí)間還有一篇關(guān)于阿里拆中臺(tái)的文章,刷遍了全網(wǎng)。
在我看來(lái),中臺(tái)就是功能的復(fù)用,并且還是業(yè)務(wù)功能的復(fù)用。例如:一個(gè)電商公司里,所有系統(tǒng)都需要給用戶發(fā)送消息。如果每個(gè)系統(tǒng)都要自行實(shí)現(xiàn)消息發(fā)送,那這個(gè)成本就太大了。于是乎就有一個(gè)系統(tǒng)專門來(lái)做這個(gè)事情,實(shí)現(xiàn)「發(fā)送消息」這個(gè)業(yè)務(wù)功能的復(fù)用。
如此一來(lái)的話,那其實(shí)用微服務(wù)不就可以了,何德何能叫得上中臺(tái)呢?
這是一個(gè)很好的問(wèn)題,可以讓我們進(jìn)一步深入思考中臺(tái)這個(gè)事。
在微服務(wù)時(shí)代,消息服務(wù)提供接口出去,各個(gè)系統(tǒng)直接調(diào)用發(fā)送就行了。這個(gè)時(shí)候,系統(tǒng)調(diào)用方與系統(tǒng)提供方之間的通信,還是非常技術(shù)性的,他們之間的通信可能是這樣的:我要發(fā)給 XX 用戶、內(nèi)容是 XX、用 XX 賬號(hào)發(fā)送、要發(fā)送的是 XX 語(yǔ)言等等。
對(duì)比起微服務(wù),中臺(tái)應(yīng)該是微服務(wù)的產(chǎn)品化。比起微服務(wù)方式,中臺(tái)的設(shè)計(jì)需要抽象出自己的一套業(yè)務(wù)邏輯,屏蔽底層的細(xì)節(jié)。 就拿發(fā)消息這個(gè)例子來(lái)說(shuō):之前是非常簡(jiǎn)單地將要發(fā)送的參數(shù)傳遞給消息發(fā)送系統(tǒng),消息發(fā)送系統(tǒng)不做任何封裝。
但對(duì)于消息中臺(tái)來(lái)說(shuō),它可能提出一個(gè)業(yè)務(wù)編碼的概念,通過(guò)業(yè)務(wù)編碼與模板與賬號(hào)關(guān)聯(lián)。而對(duì)于調(diào)用系統(tǒng)來(lái)說(shuō),只需要告訴我你需要發(fā)給哪個(gè)用戶,發(fā)哪個(gè)業(yè)務(wù)的消息即可。至于怎么匹配模板、怎么匹配賬號(hào),調(diào)用方不需要關(guān)心。
總的來(lái)說(shuō),中臺(tái)與微服務(wù)的區(qū)別在于:中臺(tái)是對(duì)功能的更深層次封裝,可以說(shuō)是產(chǎn)品層面上的包裝。
說(shuō)起中臺(tái)與微服務(wù)的區(qū)別,可能還不止功能封裝程度上的區(qū)別,可能還有數(shù)據(jù)開放、權(quán)限管控等方面的區(qū)別。對(duì)于微服務(wù)來(lái)說(shuō),其只是簡(jiǎn)單的提供一個(gè)服務(wù)。如果后續(xù)調(diào)用方的 B 端管理系統(tǒng)需要查詢消息發(fā)送記錄,那么你就會(huì)讓一個(gè) B 端系統(tǒng)去查詢一個(gè) C 端系統(tǒng),這明顯不合適。另外,查詢數(shù)據(jù)時(shí)需要做權(quán)限控制,一個(gè)系統(tǒng)只能查詢自己的數(shù)據(jù),這時(shí)候你又得在 C 端的消息發(fā)送系統(tǒng)里去做權(quán)限控制,整個(gè)系統(tǒng)就非常冗余了。
對(duì)于中臺(tái)來(lái)說(shuō),其思考的層次會(huì)更高一些。中臺(tái)將自己當(dāng)成是某塊通用業(yè)務(wù)的服務(wù)提供者,而不僅僅是一個(gè)內(nèi)部系統(tǒng)。對(duì)于核心的業(yè)務(wù)功能,其與微服務(wù)一樣通過(guò)接口提供功能。對(duì)于數(shù)據(jù)開放,其通過(guò)開放平臺(tái)開放數(shù)據(jù),并做權(quán)限控制。其實(shí)企業(yè)內(nèi)部的業(yè)務(wù)中臺(tái),就很像淘寶開放平臺(tái)、京東開放平臺(tái),只不過(guò)是開放的對(duì)象以及程度不同而已,因此我們完全可以按照開放平臺(tái)的思路去建設(shè)業(yè)務(wù)中臺(tái)。
中臺(tái)的平衡點(diǎn)
我們都說(shuō)中臺(tái)是通用能力的復(fù)用,那么哪些是通用能力?哪些該做、哪些不該做?這或許是困擾我們中臺(tái)設(shè)計(jì)人員一個(gè)很痛苦的問(wèn)題了。
要找到平衡點(diǎn),我的經(jīng)驗(yàn)是首先找到兩個(gè)極端點(diǎn)。 就拿我做過(guò)的消息中臺(tái)這個(gè)例子來(lái)說(shuō),左邊的極端點(diǎn)是極端定制化,即業(yè)務(wù)方要做什么,我們就做什么,冗余了大量的各種各樣的業(yè)務(wù)細(xì)節(jié)。右邊的極端點(diǎn)是極端地平庸化,平庸到提供的服務(wù)其實(shí)和第三方服務(wù)商提供的服務(wù)沒(méi)啥兩樣,那么業(yè)務(wù)方干脆直接對(duì)接第三方得了。
知道了兩個(gè)極端點(diǎn),我們也知道了一個(gè)范圍,我們后續(xù)要做的就是在兩個(gè)點(diǎn)中找到一個(gè)平衡點(diǎn)。 其實(shí)對(duì)于這個(gè)平衡點(diǎn)的選擇,更多的是依賴設(shè)計(jì)人員對(duì)于這塊業(yè)務(wù)的理解。業(yè)務(wù)人員需要深入地了解整個(gè)業(yè)務(wù)流程,了解哪些功能是所有調(diào)用方都重復(fù)做的,以此找出中臺(tái)要實(shí)現(xiàn)的通用功能。接著需要做的,就是將這些內(nèi)容封裝起來(lái),設(shè)計(jì)一套業(yè)務(wù)邏輯和使用流程,讓調(diào)用方能簡(jiǎn)單、方便地使用。
以我做過(guò)的消息中臺(tái)而言,我發(fā)現(xiàn)許多系統(tǒng)存在的重復(fù)功能是:多語(yǔ)言模板匹配和替換、多地區(qū)發(fā)送賬號(hào)匹配。多語(yǔ)言模板匹配和替換,指的是在國(guó)際化背景下,用戶都是各個(gè)國(guó)家的人,我們需要根據(jù)用戶的語(yǔ)言匹配對(duì)應(yīng)的模板。多地區(qū)發(fā)送賬號(hào)匹配,指的是在國(guó)際化背景下,用戶分布于各個(gè)國(guó)家地區(qū),每個(gè)國(guó)家地區(qū)的服務(wù)商都不同,因此需要匹配不同的賬號(hào)去發(fā)送。
找出消息中臺(tái)的重復(fù)功能之后,我們要做的是設(shè)計(jì)一套業(yè)務(wù)邏輯和使用流程。對(duì)于消息中臺(tái),我們?cè)O(shè)計(jì)了:「系統(tǒng) - 業(yè)務(wù) - 模板組(賬號(hào)組)- 模板(賬號(hào))」的核心業(yè)務(wù)邏輯。1 個(gè)調(diào)用方對(duì)應(yīng) 1 個(gè)系統(tǒng),1 個(gè)系統(tǒng)可以有多個(gè)業(yè)務(wù),1 個(gè)業(yè)務(wù)在某個(gè)渠道(郵件、短信等)只對(duì)應(yīng)一個(gè)賬號(hào)組,模板組(賬號(hào)組)則通過(guò)語(yǔ)言 + 站點(diǎn)(國(guó)家)去唯一確定一個(gè)模板(賬號(hào))。
通過(guò)「系統(tǒng) - 業(yè)務(wù) - 模板組(賬號(hào)組)- 模板(賬號(hào))」的業(yè)務(wù)邏輯設(shè)計(jì),以及對(duì)應(yīng)的管理后臺(tái)配置流程,我們?yōu)橄⒅信_(tái)建立了一整套消息發(fā)送邏輯。調(diào)用方系統(tǒng)可以建立多個(gè)業(yè)務(wù),來(lái)關(guān)聯(lián)其真實(shí)的消息發(fā)送場(chǎng)景。每次需要發(fā)送某個(gè)消息發(fā)送場(chǎng)景,提前在管理后臺(tái)配置好對(duì)應(yīng)的模板組和賬號(hào)組。在發(fā)送的時(shí)候,只需要告訴消息中臺(tái)發(fā)送哪個(gè)業(yè)務(wù)、發(fā)給誰(shuí)就可以了。
中臺(tái)的演變
當(dāng)我們?cè)O(shè)計(jì)好一個(gè)中臺(tái)之后,我們可能希望其實(shí)一成不變的。但事實(shí)上,中臺(tái)也是隨著業(yè)務(wù)的變化而變化的。就拿我做過(guò)的消息中臺(tái)來(lái)說(shuō),一開始其定位只是發(fā)送消息通知類,即注冊(cè)發(fā)送郵件、發(fā)貨通知等小批量的消息。但隨著業(yè)務(wù)的發(fā)展,有些系統(tǒng)需要在很短的時(shí)間內(nèi)發(fā)送幾百萬(wàn)甚至幾千萬(wàn)的消息。
這時(shí)候如果使用原有的系統(tǒng)功能,那么勢(shì)必導(dǎo)致消息擠壓,造成消息發(fā)送延遲。這時(shí)候作為中臺(tái)的設(shè)計(jì)者就需要根據(jù)自己對(duì)業(yè)務(wù)的理解,以及未來(lái)需要的可能性,去做一個(gè)架構(gòu)上的調(diào)整。如果判斷未來(lái)很可能有更多的系統(tǒng)需要這個(gè)功能,那么我們需要調(diào)整中臺(tái)的業(yè)務(wù)架構(gòu),去實(shí)現(xiàn)這個(gè)功能。對(duì)于短時(shí)間內(nèi)發(fā)送幾百萬(wàn)消息的這種功能,我們后續(xù)是用了與之前完全不同的架構(gòu)去實(shí)現(xiàn)的,也設(shè)計(jì)了完全不同的數(shù)據(jù)結(jié)構(gòu)以及實(shí)現(xiàn)方法。但整體上,還是與原有功能融為一體,成為一個(gè)統(tǒng)一的消息中臺(tái)服務(wù)的。
前面說(shuō)的是屬于業(yè)務(wù)發(fā)展中出現(xiàn)的新功能,但實(shí)際上也有可能是原有功能的不斷精細(xì)化。例如我們所說(shuō)的通知類消息,它們可能有:發(fā)貨通知、注冊(cè)驗(yàn)證碼郵件、COD 貨到付款郵件等。隨著業(yè)務(wù)的發(fā)展,通知類消息越來(lái)越多,不同類型的消息的優(yōu)先級(jí)矛盾會(huì)越來(lái)越明顯。
對(duì)于 COD 貨到付款郵件來(lái)說(shuō),其涉及到用戶訂單付款,因此優(yōu)先級(jí)無(wú)疑是最高的。而注冊(cè)驗(yàn)證碼郵件,影響到用戶的注冊(cè),相對(duì)來(lái)說(shuō)也是優(yōu)先級(jí)較高的。而發(fā)貨通知,則只是一個(gè)通知的功能,優(yōu)先級(jí)相對(duì)優(yōu)先。在消息越來(lái)越多的情況下,消息中臺(tái)需要支持發(fā)送資源完全隔離的功能,以此來(lái)保障高優(yōu)先級(jí)業(yè)務(wù)的低延遲快速發(fā)送。
那么如何進(jìn)行業(yè)務(wù)架構(gòu)調(diào)整,既能滿足新功能的需要,又不影響原有的業(yè)務(wù)功能。這其實(shí)就極度考驗(yàn)中臺(tái)設(shè)計(jì)者對(duì)于業(yè)務(wù)的理解以及對(duì)于系統(tǒng)的理解了。
說(shuō)到消息優(yōu)先級(jí)的問(wèn)題,有些朋友會(huì)說(shuō):那我一開始設(shè)計(jì)的時(shí)候就考慮到優(yōu)先級(jí)問(wèn)題,直接解決了不就好了么?
這個(gè)想法很好,但事實(shí)是很骨感的。很多時(shí)候我們不僅要考慮技術(shù)實(shí)現(xiàn),還要考慮業(yè)務(wù)當(dāng)前的情況。如果業(yè)務(wù)當(dāng)前并沒(méi)有多少消息發(fā)送流量,所有消息基本上都能很快發(fā)送出去,這時(shí)消息中臺(tái)來(lái)實(shí)現(xiàn)優(yōu)先級(jí)的功能,有什么意義呢?不僅增加研發(fā)成本不說(shuō),還讓系統(tǒng)更加復(fù)雜,增加了維護(hù)成本。
業(yè)務(wù)這個(gè)因素,其實(shí)是很多技術(shù)人員忽略的一個(gè)問(wèn)題。我們做設(shè)計(jì)以及實(shí)現(xiàn)的時(shí)候,不僅要考慮技術(shù)擴(kuò)展性,還要考慮業(yè)務(wù)目前的發(fā)展情況、團(tuán)隊(duì)成員的能力情況,才能做出適合當(dāng)下情況的最優(yōu)選擇。 而不是簡(jiǎn)單地拍腦袋做一個(gè)大而全的東西,用大炮打蚊子,浪費(fèi)資源。其實(shí)對(duì)于是否要在項(xiàng)目中使用設(shè)計(jì)模式,也是類似的思考方式,重點(diǎn)還是得看團(tuán)隊(duì)成員的專業(yè)能力。
總結(jié)
什么是中臺(tái)?我認(rèn)為中臺(tái)是對(duì)重復(fù)業(yè)務(wù)功能的產(chǎn)品級(jí)別封裝,有別于微服務(wù)的系統(tǒng)級(jí)簡(jiǎn)單封裝。產(chǎn)品級(jí)別的封裝需要深入了解業(yè)務(wù),定制出一套自己的業(yè)務(wù)概念,屏蔽底層的細(xì)節(jié)。此外,數(shù)據(jù)開放也是中臺(tái)本身有別于微服務(wù)的一個(gè)關(guān)鍵點(diǎn)。
如何找到中臺(tái)的平衡點(diǎn)?對(duì)于平衡點(diǎn),我提出了一個(gè)方法論:確定區(qū)間范圍,即知道最好、最差的情況下是什么,然后找到合理的中間態(tài)。這個(gè)中間態(tài)取決于中臺(tái)的定位,如果你的定位是公司級(jí)的中臺(tái),那么你解決的就應(yīng)該是公司級(jí)別的通用功能。
如何看待中臺(tái)的演進(jìn)?中臺(tái)是隨著業(yè)務(wù)發(fā)展的,中臺(tái)設(shè)計(jì)者需要緊跟業(yè)務(wù)需求,從需求中洞見未來(lái)的趨勢(shì),找到中臺(tái)的方向。此外,設(shè)計(jì)之時(shí)不僅應(yīng)該考慮技術(shù)問(wèn)題,也應(yīng)該考慮當(dāng)時(shí)業(yè)務(wù)規(guī)模、團(tuán)隊(duì)協(xié)作、人員能力問(wèn)題,做出綜合成本最低的設(shè)計(jì)方案,而不是用大炮打蚊子。
那么做中臺(tái)需要哪些能力呢?
其實(shí)從上面我的一些思考不難看出:需要有高度抽象思考的能力。 這可以說(shuō)是最最重要的能力,沒(méi)有這種能力,你很難找出共同的功能點(diǎn),也就很難找到中臺(tái)的定位。另一個(gè)能力是綜合權(quán)衡,做出最優(yōu)選擇的能力。 在中臺(tái)的演進(jìn)中我們說(shuō)到要考慮業(yè)務(wù)規(guī)模、團(tuán)隊(duì)協(xié)作等情況,這就需要中臺(tái)設(shè)計(jì)者去綜合各種因素,做出最優(yōu)選擇,而不是單單追求技術(shù)的高大上。