...

從Excel到(dào)微服務

2021-06-27

Excel很老,Excel很土,Excel一(yī / yì /yí)點也(yě)不(bù)sexy;微服務新,微服務很潮門,微服務很高大(dà)上(shàng)。那麽,Excel和(hé / huò)微服務有什麽關系?


上(shàng)個(gè)月看了(le/liǎo)篇文章,The Unbunlding of Excel。作者認爲(wéi / wèi),對于(yú)初創公司(尤其是(shì)非“純IT”初創公司)來(lái)說(shuō),Excel幾乎包辦各種工作。想要(yào / yāo)計算?請用Excel。想做輕量級的(de)CRM,可用Excel。建立财務分析模型?還是(shì)用Excel。簡單的(de)項目管理?當然Excel。數據分析總攬圖?仍然是(shì)Excel。執行簡單的(de)ETL任務?Excel再合适不(bù)過了(le/liǎo)。


Excel真的(de)這(zhè)麽能幹嗎?從邏輯上(shàng)說(shuō),它是(shì)成立的(de)。首先公司裏很多業務都是(shì)基于(yú)數據的(de),其原型都是(shì)對表格的(de)操作,Excel“天生”就(jiù)是(shì)表格。其次,Excel提供了(le/liǎo)足夠弱又足夠強的(de)“編程能力”,Excel中的(de)VBA、透視表等等功能對于(yú)強大(dà)的(de)編程語言來(lái)說(shuō)或許不(bù)值一(yī / yì /yí)提,但許多對編程語言望而(ér)卻步的(de)人(rén)卻能把這(zhè)些功能運用得無比純熟,玩出(chū)的(de)花樣讓很多程序員也(yě)歎爲(wéi / wèi)觀止。


更重要(yào / yāo)的(de)是(shì),初創公司的(de)業務往往是(shì)不(bù)确定的(de),業務領域需要(yào / yāo)探索,業務規則也(yě)需要(yào / yāo)不(bù)斷修訂。Excel雖然沒有量身定制的(de)系統那麽完善,但成本相當低廉。對初創公司來(lái)說(shuō),除非自己養着非常厲害的(de)開發團隊,系統又做得足夠高質量足夠靈活,一(yī / yì /yí)面猛改一(yī / yì /yí)面還保持穩定,否則即便“上(shàng)系統”,也(yě)經常被系統困住手腳,業務反而(ér)受到(dào)拖累。


如果你覺得這(zhè)隻是(shì)“邏輯上(shàng)”的(de)分析,我還可以(yǐ)給出(chū)更現實的(de)例子(zǐ)。


如今很多公司都知道(dào)要(yào / yāo)有CRM(客戶關系管理)系統,來(lái)處理和(hé / huò)彙總與客戶之(zhī)間的(de)問題。業務還沒開展,CRM先得買一(yī / yì /yí)套或者開發一(yī / yì /yí)套,這(zhè)已經成了(le/liǎo)流行的(de)思維定勢。但是(shì),買來(lái)或者開發的(de)CRM,未必能很好滿足自己的(de)業務需求,因此踩坑的(de)例子(zǐ)數不(bù)勝數。


朋友的(de)一(yī / yì /yí)家公司,一(yī / yì /yí)開始根本沒有上(shàng)CRM,隻要(yào / yāo)求客服每人(rén)每天用Excel把回答的(de)問題記下來(lái),每天晚上(shàng)指定專人(rén)彙總,第二天早上(shàng)把彙總和(hé / huò)更新之(zhī)後最新的(de)Excel通過郵件下發給所有客服,回答問題的(de)時(shí)候就(jiù)在(zài)這(zhè)張表裏用Ctrl+F來(lái)尋找關鍵詞。這(zhè)樣的(de)做法雖然看起來(lái)很累很煩,卻足夠簡單有效。既不(bù)用擔心系統死掉大(dà)家都幹不(bù)了(le/liǎo)活,也(yě)不(bù)用擔心問題分類設定不(bù)合理無法錄入或者數據格式變化導緻的(de)曆史數據清洗成本。


等這(zhè)套流程真正跑順穩定了(le/liǎo),公司業務也(yě)足夠大(dà)了(le/liǎo),有時(shí)間有資本把已經摸索的(de)客服管理的(de)經驗和(hé / huò)流程固化到(dào)系統裏,CRM系統開發順理成章,上(shàng)線到(dào)投入使用相當自然。


我還見過一(yī / yì /yí)家電商公司,因爲(wéi / wèi)趕上(shàng)了(le/liǎo)風口,業務發展極其迅猛。于(yú)是(shì)公司也(yě)馬上(shàng)遇到(dào)了(le/liǎo)問題,創始人(rén)都是(shì)做互聯網的(de)出(chū)身,對實業并沒有多麽豐富的(de)經驗,多地(dì / de)倉庫的(de)管理成了(le/liǎo)老大(dà)難,庫存經常亂套了(le/liǎo)。


怎麽辦?雖然自己有一(yī / yì /yí)支小的(de)開發團隊,但日常業務已經足夠他(tā)們忙的(de)了(le/liǎo),而(ér)且倉儲是(shì)個(gè)專門的(de)領域,即便沒做過,專門去看看也(yě)知道(dào)水很深,何況倉庫運營的(de)規則和(hé / huò)辦法還在(zài)不(bù)斷優化,這(zhè)時(shí)候要(yào / yāo)做出(chū)一(yī / yì /yí)套好用的(de)倉儲系統,幾乎是(shì)癡人(rén)說(shuō)夢。然而(ér)每次出(chū)問題,很多基層員工都會抱怨,要(yào / yāo)是(shì)有系統就(jiù)好了(le/liǎo)。


創始團隊想到(dào)的(de)辦法就(jiù)是(shì)Excel,不(bù)管倉儲規則怎麽千變萬化,基本的(de)庫存管理,無非是(shì)入庫、出(chū)庫、盤庫等幾個(gè)動作,數據格式是(shì)相對固定的(de)。那麽,每個(gè)倉庫每天幹完活,再忙再累再晚,也(yě)要(yào / yāo)把倉儲信息按照約定的(de)Excel模版回傳到(dào)總部,由專人(rén)統計合并。這(zhè)工作說(shuō)起來(lái)簡單,做起來(lái)可讓人(rén)叫苦連天,尤其是(shì)還有些倉庫分布在(zài)海外有時(shí)差,每天光是(shì)統計合并這(zhè)些數據就(jiù)得一(yī / yì /yí)兩天。


既然老大(dà)發了(le/liǎo)話,下面的(de)人(rén)有抱怨也(yě)不(bù)敢發出(chū)來(lái),隻能老老實實執行。整套流程兩三個(gè)禮拜,日常的(de)操作基本都不(bù)會出(chū)問題,要(yào / yāo)完善操作流程時(shí),也(yě)大(dà)概知道(dào)了(le/liǎo)該怎麽修改表格。就(jiù)這(zhè)樣邊錄邊改,磨合了(le/liǎo)大(dà)半年,終于(yú)把流程基本定下來(lái)了(le/liǎo)。這(zhè)時(shí)候再安排産品經理、項目經理、程序員進場,一(yī / yì /yí)看日常用的(de)Excel,數據項、數據項之(zhī)間的(de)關聯清清楚楚,不(bù)清楚的(de)地(dì / de)方問問操作人(rén)員也(yě)立刻可以(yǐ)得到(dào)解答。這(zhè)時(shí)候再安排開發倉儲管理系統,基本不(bù)存在(zài)什麽領域知識難題,更像是(shì)順水推舟的(de)事情。


仔細觀察這(zhè)兩個(gè)例子(zǐ),你會發現,它們的(de)本質是(shì)一(yī / yì /yí)樣的(de),即在(zài)對問題域還不(bù)夠了(le/liǎo)解、問題解法還沒有徹底明晰之(zhī)前,需要(yào / yāo)一(yī / yì /yí)種具有一(yī / yì /yí)定規範性同時(shí)低成本的(de)手段,一(yī / yì /yí)方面對現有操作進行約束,另一(yī / yì /yí)方面能持續探索問題、完善已有方案。這(zhè)時(shí)候,他(tā)們選擇了(le/liǎo)Excel。


本來(lái)我看完這(zhè)篇講Excel的(de)文章就(jiù)準備談點感想,巧合的(de)是(shì),後來(lái)又看到(dào)一(yī / yì /yí)篇“神似”的(de)文章,You are not Google。作者強調的(de)是(shì),别盲目崇拜那些大(dà)公司吹得神乎其神的(de)技術,真正重要(yào / yāo)的(de)是(shì)理解你的(de)問題。這(zhè)個(gè)主旨,和(hé / huò)上(shàng)面文章裏對Excel的(de)“吹捧“其實是(shì)一(yī / yì /yí)緻的(de)。


你知道(dào)GFS和(hé / huò)Map/Reduce,但是(shì)你知道(dào)它們是(shì)爲(wéi / wèi)了(le/liǎo)解決什麽問題的(de)嗎?是(shì)爲(wéi / wèi)了(le/liǎo)計算、存儲、索引所有的(de)網頁(那個(gè)時(shí)候大(dà)概有8000萬)。你知道(dào)SOA,但是(shì)你知道(dào)亞馬遜什麽時(shí)候上(shàng)的(de)SOA嗎?那時(shí)候亞馬遜已經有7800名雇員,年營業額超過30億美元了(le/liǎo)。你隻知道(dào)數據庫集群、NoSQL,但是(shì)你知道(dào)嗎?StackExchange在(zài)2016年,面對2億的(de)日訪問量,隻有4台SQLServer……


好了(le/liǎo),現在(zài)我要(yào / yāo)回到(dào)題目,說(shuō)起“微服務”了(le/liǎo)。


微服務很新,微服務很潮,微服務很高大(dà)上(shàng)。我在(zài)面試架構師的(de)時(shí)候,很多候選人(rén)說(shuō)到(dào)微服務,都可以(yǐ)侃侃而(ér)談,各種新鮮的(de)名詞、概念、框架止不(bù)住地(dì / de)蹦出(chū)來(lái),卻沒法回答幾個(gè)問題:爲(wéi / wèi)什麽微服務會崛起?什麽時(shí)候應當實行微服務?實行微服務要(yào / yāo)注意什麽?甚至,連微服務與SOA的(de)關系是(shì)什麽都搞不(bù)清楚。


要(yào / yāo)知道(dào),架構師并不(bù)是(shì)“框架和(hé / huò)解決方案推廣落地(dì / de)人(rén)員”,他(tā)是(shì)需要(yào / yāo)做決策的(de),軟件開發中,架構決策對系統的(de)影響往往是(shì)至關重要(yào / yāo)的(de),一(yī / yì /yí)旦出(chū)現問題,後果可能相當嚴重。所以(yǐ),合格的(de)架構師對于(yú)微服務,不(bù)但需要(yào / yāo)了(le/liǎo)解現成的(de)方案和(hé / huò)概念,更應該真正的(de)問題是(shì)什麽,決策的(de)依據是(shì)什麽,然後才能知道(dào),自己的(de)決策是(shì)否合理。


在(zài)我看來(lái),微服務對SOA既是(shì)延續也(yě)是(shì)更新。在(zài)我們談論SOA的(de)時(shí)候,談得更多的(de)是(shì)一(yī / yì /yí)種設計理念,它要(yào / yāo)求脫離軟件本身的(de)限制,從抽象的(de)“服務”角度來(lái)進行思考和(hé / huò)設計。從此,我們可以(yǐ)在(zài)更高更抽象的(de)層面上(shàng)來(lái)思考如何用軟件解決問題,不(bù)再時(shí)時(shí)處處受到(dào)技術的(de)掣肘。然而(ér),SOA談論了(le/liǎo)多年,一(yī / yì /yí)直沒有看到(dào)具體的(de)、公認的(de)、合理的(de)落地(dì / de)案例。


許多談SOA的(de)書裏都會講到(dào)一(yī / yì /yí)個(gè)概念:ESB。希望有一(yī / yì /yí)天,軟件服務也(yě)可以(yǐ)像硬件服務那樣,有一(yī / yì /yí)條通用的(de)總線,然後各種服務隻需要(yào / yāo)簡單接入就(jiù)可以(yǐ)了(le/liǎo)。但是(shì)這(zhè)或許隻是(shì)一(yī / yì /yí)個(gè)美麗的(de)夢想,真正投入使用的(de)ESB其實相當少。


微服務的(de)興起,很大(dà)程度上(shàng)對應着我們在(zài)探索未知領域、探索未知問題的(de)腳步。我們無法全知全能地(dì / de)知道(dào),系統的(de)什麽部分、哪個(gè)環節,在(zài)什麽時(shí)候會成爲(wéi / wèi)障礙或瓶頸,但是(shì),我們又必須迅速地(dì / de)發現這(zhè)些障礙或瓶頸,解決它們,同時(shí)保證整個(gè)系統的(de)穩定。把系統拆分爲(wéi / wèi)一(yī / yì /yí)個(gè)個(gè)微服務,正是(shì)爲(wéi / wèi)了(le/liǎo)解決這(zhè)樣的(de)問題,它讓我們可以(yǐ)聚焦在(zài)具體部分和(hé / huò)環節上(shàng),又限制了(le/liǎo)複雜性,避免了(le/liǎo)“牽一(yī / yì /yí)發而(ér)動全身”的(de)尴尬。


仔細思考就(jiù)會發現,微服務的(de)興起,也(yě)是(shì)對ESB思路的(de)颠覆。ESB強調的(de)是(shì)“重通訊輕終端”,微服務強調的(de)則是(shì)“重終端輕通訊”,數據通訊一(yī / yì /yí)般隻是(shì)通過簡單的(de)HTTP進行,終端對于(yú)通訊總線并沒有特别強的(de)業務依賴。這(zhè)樣确實降低了(le/liǎo)耦合性,但也(yě)對終端提出(chū)了(le/liǎo)更高的(de)要(yào / yāo)求。


以(yǐ)前大(dà)家隻習慣于(yú)寫一(yī / yì /yí)點業務邏輯代碼,生成幾個(gè)類庫,放到(dào)巨大(dà)的(de)單體系統裏就(jiù)可以(yǐ)放心了(le/liǎo)。進行微服務改造之(zhī)後,你的(de)這(zhè)點業務邏輯代碼隻是(shì)服務的(de)核心,既然名曰“服務”,就(jiù)得五髒俱全,既然名曰“微服務”,就(jiù)得螺蛳殼裏做道(dào)場。


換句話說(shuō),服務必須能獨立部署、獨立維護、方便擴展。你得在(zài)服務的(de)邊界清晰和(hé / huò)技術限制之(zhī)間做出(chū)權衡,你得搭建完整的(de)監控,你得考慮高可用性,你得選擇通訊機制,你得分析負載壓力,你還得仔細規劃容量……身爲(wéi / wèi)架構師,一(yī / yì /yí)門心思考慮分家,一(yī / yì /yí)味鼓吹分家的(de)各種好處,絕對是(shì)不(bù)稱職的(de):分家過日子(zǐ)當然潇灑,但自己當家卻不(bù)知道(dào)柴米油鹽貴,這(zhè)是(shì)絕對要(yào / yāo)餓死的(de)。


最後講個(gè)有意思的(de)事情,這(zhè)些年我有好幾個(gè)技術很好對微服務理解很深刻的(de)朋友,去了(le/liǎo)創業公司首先做的(de)事情往往都是(shì)“技術的(de)倒退”:就(jiù)這(zhè)十來(lái)個(gè)人(rén)、七八條槍,還折騰什麽微服務?快别扯淡了(le/liǎo)!


附:原文鏈接
The Unbunlding of Excel
You are not Google


來(lái)源:cnblogs