總第335篇 2019年 第13篇 美美導讀:美團到餐研發(fā)團隊對資源成本進行了一系列優(yōu)化,目前總體技術資源成本每月下降近32%,一年節(jié)省開支幾千萬,而且獲得了多項專利,他們是怎么做到的? 背景 工程師主要面對的是技術挑戰(zhàn),更關注技術層面的目標。研發(fā)團隊的管理者則會把實現項目成果和業(yè)務需求作為核心目標。實際項目中,研發(fā)團隊所需資源(比如物理機器、內存、硬盤、網絡帶寬等)的成本,很容易被忽略,或者在很晚才考慮。 在一般情況下,如果要滿足更多的技術指標如并發(fā)量和復雜度等,或者滿足峰值業(yè)務的壓力,最直接有效的方法就是投入更多的資源。然而,從全局來看,如果資源成本缺乏優(yōu)化,最終會出現如下圖所示的“邊際效用遞減”現象——技術能力的提升和資源的增幅并不匹配,甚至資源的膨脹速度會超過技術能力的提升,從而使技術項目本身的ROI大打折扣。 從筆者十余年的工作經驗來看,資源成本優(yōu)化宜早不宜遲。很多管理者在業(yè)務發(fā)展的較前期階段,可能并沒有意識到資源成本膨脹所帶來的壓力。等到業(yè)務到了一定規(guī)模,拿到機器賬單的時候,驚呼“機器怎么這么費錢”,再想立即降低成本,可能已經錯過了最佳時機,因為技術本身是一個相對長期的改造過程。 所以,正在閱讀此文的讀者,假如你已經感覺到了成本膨脹的壓力,或者正在做成本控制相關的工作,恭喜,這是幸福的煩惱,貴公司的業(yè)務體量應該已經達到一定規(guī)模,同時也說明你的管理意識已經超前于業(yè)務發(fā)展了(握手)。 本文我們將分享美團到餐研發(fā)團隊在資源成本優(yōu)化方面的工作,通過近一年的實踐,降低了幾千萬的資源成本,取得了一些成就。 實踐在美團公司內,資源的提供方有多個團隊,除了到店餐飲研發(fā)團隊自用的資源外,還有多個兄弟團隊提供資源支持或者聯合共建,比如SRE、大數據團隊、風控團隊、廣告團隊等等。每個月拿到成本賬單之后,我們都需要抽絲剝繭,對每一項進行拆解,才能制定對應的解決策略。具體流程如下圖所示。 1. 確定方法論“凡事預則立,不預則廢。”在做一件事之前,要充分評估整個工作完整生命周期的要素,并進行整體工作框架的設計,一個科學的方法論是十分有必要的。成本優(yōu)化遵循的是一個行業(yè)內成熟的P(Plan)D(Do)C(Check)A(Act)方法論,在每個階段都又有對應的二次迭代和微循環(huán)。
2. 計劃規(guī)劃階段(Plan&Standard)在這個階段的核心目標是:用2-3個指標來衡量自己的工作。很多工作之所以最后失敗,很多時候是相關人員根本沒有辦法用具體可衡量的指標來衡量自己的工作,這樣對于工作結果,只能有一個“定性”的認識(比如很好,很不錯,不好,較差),而無法做到“定量”。 對于研發(fā)人員來講,不能定量的結果是不夠科學的,具體如何確定指標,或者確定哪些指標作為工作目標,其實也是一門學問(有機會另外發(fā)文章討論)。這個階段的幾個建議步驟為:
本階段最大的經驗是“知易行難”,雖然拍腦袋想出來一兩個方向和目標很容易,但是最后用數據論證現狀時,如何判斷自己這個指標是“優(yōu)秀”、“良好”還是“不及格”?對標的團隊是誰?為什么對標的對象是TA?都是需要從人員規(guī)模、業(yè)務階段、業(yè)務量、行業(yè)特點等方面考慮仔細,也需要想清楚,其工作量甚至不比實際干活階段小。 3. 執(zhí)行階段(Do)3.1 建立思考流程在執(zhí)行階段的流程是:分解原子項目->確定方案->落實到人->優(yōu)化原子指標。在這里包括兩個核心要素:1)把核心指標相關的工作向下一層分解;2)在下一層,找到具體的人來執(zhí)行,這個人要具備將自己負責的指標繼續(xù)分解到更細的能力,類似于我們說的樹狀結構。這樣層層地分解下去,每一層的葉子節(jié)點都可以找到對應的負責人。這種“總分”結構,在一本經典教材《金字塔原理》中也有詳細的闡述。
再根據開篇描述的方法,確定每個原子的評價指標,無法量化的項目都是“耍流氓”。這樣就形成了一個更完整的金字塔結構,如下圖所示:
3.2 實踐分析框架在具體實踐中,我們可以把以上的過程,再次用一個金字塔結構來表述,如下圖所示: 建立了以上的結構,就可以根據各個專業(yè)的不同,對各自的指標進行優(yōu)化了,如果最細一級的指標被成功優(yōu)化之后,最上層的指標一定會有下降。因為上述指標都有其各自深層次的業(yè)務、技術,甚至是財務上的邏輯,故在此把一些需要關注的概念再贅述一下。 很多公司每個技術團隊的機器成本,在財務上叫做“網站運維成本”(網站?聽起來還像PC時代的概念對不對),從頂層可以分為兩類構成因素,就是“自己產生的成本”(自己用的)和“被分攤的成本”(別人替你用的)兩大類。跟自己有關的繼續(xù)向下鉆取,可以分為交易相關的資源成本(跟業(yè)務流程相關的)以及跟分析有關的大數據成本(分析、算法、決策相關)。 3.2.1 業(yè)務主機成本 大部分業(yè)務系統的團隊,使用的資源成本都包含在這個部分,比如商戶研發(fā)團隊、訂單系統研發(fā)團隊、前端研發(fā)團隊、供應鏈研發(fā)團隊、營銷系統研發(fā)團隊、CRM研發(fā)團隊等。這些資源典型的物理載體就是物理機、虛擬機、容器資源以及對應的機器連接的存儲(數據庫、緩存、KV存儲等)資源,還會包含由于交換、存儲以上資源之間的數據產生的帶寬、云資源、CDN等。 這部分資源,我們從控制成本的角度,最淺的層次,建議關注服務組(OWT)所消耗主機的資源利用率,如果資源利用率較低的主機數量較多,建議及時下線。同時,從技術方案本身來說,任何一個服務承載的業(yè)務能力和消耗資源之間,會有相對的一個“比例”或者權重。某些高利用率的服務從架構上是否可以重構、解耦或者改造,也非常有利于節(jié)省資源。這塊內容到餐研發(fā)團隊在過去一年的工作中,對于核心、非核心的服務都進行了梳理,對于其中可以優(yōu)化的服務也進行了部分重構。相比年初,極大的降低了資源的成本,業(yè)務主機成本的兩個主要指標變化情況如下: 3.2.2 大數據成本 大數據在互聯網行業(yè)的應用目前已經較為成熟,行業(yè)主流的數據處理架構都是YARN 2.0或者類似框架,核心的資源消耗主要基于Container(Vcore+Mem)的計算資源+基于HDFS的存儲資源消耗這兩部分。 第一部分,是存儲資源的消耗,行業(yè)通用的模型是基于物理HDFS或自研的類似存儲引擎,這部分主要是指離線ETL用來按分區(qū)(一般是按時間戳)進行存儲的資源,由于數據倉庫的核心理念之一是保存“所有”的數據,并在此基礎上按照維度建模理論對數據進行預匯總、加和。但是,由于對模型建設本身的理解深度不同,故在基礎數據之上的數據冗余,在很多數據研發(fā)人員看來是理所應當的,進而導致存儲資源的快速膨脹,這是每個數據團隊在管理過程中面臨的難題。 在此,到餐研發(fā)團隊主要采取了兩種手段:
到餐研發(fā)團隊對于數據倉庫進行了二次迭代,每次都基于新的業(yè)務模式,重新構建中間層以及之上的集市、寬表層,有效節(jié)省了空間。還有一種技術手段是壓縮,比如流量的數據往往是存儲大戶,但是流量數據相對的格式比較固定,所以很多流量數據可以進行壓縮或者改變其存儲格式(如map型),根據實測可以節(jié)省20%以上的流量數據空間。 另外需要補充的,還有一部分OLAP存儲資源,也會消耗大量資源,比如Kylin、Elasticsearch、Druid、MySQL等,這些數據庫主要用來將基于HDFS上的文件,同步到前端可以直接訪問的介質上,供系統訪問。這部分資源有些也是基于HDFS的(如Kylin、HBase),有些需要單獨的存儲介質,也需要關注其膨脹速度以及存儲周期。 第二部分,是計算資源的消耗,主要滿足基于復雜規(guī)則的分析或者機器學習算法中的計算,也就是實時ETL計算和離線ETL計算的場景(代表性的引擎如Storm、Flink的計算還有MapReduce的計算)。這部分計算消耗的資源類似于業(yè)務系統,可以參照業(yè)務系統的“資源利用率”確定幾個指標,進行機器優(yōu)化或者算法邏輯優(yōu)化。 3.2.3 分攤成本(一):風控及反爬 在某些公司里,某個技術團隊開發(fā)的內容,有可能為了服務其他團隊業(yè)務,比如前文中提到的風控、反爬、廣告等,會為各種業(yè)務提供基礎的技術能力。這時候就涉及到一個重要的概念“分攤”。分攤有兩種規(guī)則,一種是按“實際用量進行”,另外一種是按照“使用比例”進行,這兩種模式之上,可能還有混合計費模式,即“按照實際發(fā)生的比例進行整體費用的分攤”。做成本控制時,就要清楚地知道這部分成本是按哪種邏輯來進行計算的。 在風控及反爬的實踐中,美團的風控及反爬按照整體風控技術團隊的總體成本,按比例分攤給業(yè)務團隊。所以作為業(yè)務團隊,如果試圖降低這部分成本,也要關注兩個組成項:一是自己使用的風控及反爬的原子業(yè)務數量的絕對值,對每天風控及反爬的總體請求次數是否合理需要進行判斷,以保證自己的業(yè)務請求量不增加;二是自己業(yè)務使用的比例。需要跟相關技術團隊一起進行分析,以防止某些場景下,自身業(yè)務使用的絕對值下降了,但是因為其他業(yè)務絕對值下降的更快,導致自己比例反而上升,進而導致成本上升。 3.2.4 分攤成本(二):安全數倉成本 為了保證各個業(yè)務團隊之間的離線數據交換,美團集團層面建設了安全數據倉庫,用來滿足跨團隊之間的數據交換。這部分的費用也按照實際發(fā)生的資源占比進行統計,所以同理,為了降低成本,需要關注兩個組成項目:一是自己使用的數量,從架構設計上能否將相關數據模型的效率提升、降低空間是關鍵因素;二是自己的使用資源在整體資源的占比,這時候也需要跟相關團隊一起努力降低總成本。很多公司的技術團隊,也有類似的數據共享倉庫或者共建倉庫的概念。 3.2.5 分攤成本(三):廣告成本 很多互聯網公司都有做廣告業(yè)務的技術團隊,廣告的形式主要有按點擊收費CPC,按時長收費CPT等等,這部分分攤的邏輯同上述兩者,也是按最終的總費用中的占比進行分攤。但是這塊有一個需要關注的點是,由于廣告的業(yè)務邏輯并不在到餐自己的業(yè)務方,也就是說歸到餐研發(fā)團隊可以控制的部分較小,故在這個過程中需要建立有效的評價體系,來衡量廣告分攤的費用,在此采用的指標是“千次曝光成本”和“千元廣告收入成本”,這里僅供大家參考。 3.2.6 其他成本 除了以上梳理的項目之外,每月還會有一些新增的成本項目加入進來,團隊要保持足夠的關注。在實踐中會發(fā)現某項成本在個別月份突然升高,這時候就要找到是新增加了項目,還是某個指標在業(yè)務或者算法上有所調整。 4. 檢查(Check)在這個階段,建議關注以下結果:
在到餐研發(fā)團隊的實踐中,業(yè)務系統的指標定義上也有類似的經驗可以分享。開始進行優(yōu)化工作的時候,定義了非常多的的項目和指標,比如業(yè)務主機分為云存儲、帶寬、CDN、Tair、Redis等等,關注到每一項對于RD投入的時間和精力都是巨大的損耗。后來經過反復跟相關兄弟團隊確認,向上抽象了一層“服務組的資源利用率”,這時候就不需要關注太多細碎的項目,而只關注與這些服務有關機器的使用情況,因為機器會自然的消耗CPU、內存、帶寬、CDN等,這樣可以有效節(jié)省運營的時間成本,把精力集中在優(yōu)化機器和優(yōu)化服務架構設計層面。 5. 復盤總結,繼續(xù)迭代(Act)
總結成本優(yōu)化這件事,有可能被階段性忽略,但是重要性一直存在。到餐研發(fā)團隊通過將近一年時間的運營,幫助公司節(jié)省了幾千萬的成本。這個過程有時候枯燥,有時候讓人興奮,有時候又讓人懊惱和沮喪,某些時候其實是在拷問自己一個問題,即“保證業(yè)務不停的前提下,敢砍掉多余的機器嗎?”在管理越來越精細化的今天,相信更多的有識之士也有一些需求或者進行了一些實踐。期待跟行業(yè)同儕一起,在保證技術能力和滿足業(yè)務的前提下,更加合理使用資源,節(jié)約公司成本,不斷提升研發(fā)團隊的效率,希望本文能給大家?guī)硪恍﹩l(fā)。 作者簡介 |
|