摘要:二樂(lè)高式松耦合架構(gòu)落地快速實(shí)現(xiàn)需求與需求實(shí)現(xiàn)越來(lái)越慢的矛盾如何解決最終白山的產(chǎn)品架構(gòu)聚焦在解耦上,方便平臺(tái)快速迭代,減少系統(tǒng)間依賴(lài)程度,打通無(wú)關(guān)聯(lián)項(xiàng)目,為運(yùn)營(yíng)互動(dòng)提供高效支持,確保服務(wù)質(zhì)量。
作者:王康
白山聯(lián)合創(chuàng)始人兼產(chǎn)品副總裁。 王康先生主要負(fù)責(zé)產(chǎn)品的完善與升級(jí)、產(chǎn)品開(kāi)發(fā)流程把控及進(jìn)度協(xié)調(diào)、產(chǎn)品設(shè)計(jì)改進(jìn)及定期優(yōu)化、產(chǎn)品全生命周期管理等工作。他帶領(lǐng)團(tuán)隊(duì)實(shí)現(xiàn)白山首款產(chǎn)品CDN-X的多項(xiàng)創(chuàng)新,降低CDN使用門(mén)檻,極大拓展了CDN客戶(hù)資源,提升了白山品牌價(jià)值,促進(jìn)整體CDN市場(chǎng)的擴(kuò)大與發(fā)展。 王康先生曾就職于網(wǎng)宿科技,任該公司產(chǎn)品及售前高級(jí)總監(jiān),負(fù)責(zé)技術(shù)團(tuán)隊(duì)的運(yùn)營(yíng)工作;擁有10年CDN行業(yè)經(jīng)驗(yàn),專(zhuān)注于提高產(chǎn)品輸出的高質(zhì)量和高可靠性。 王康先生擁有三項(xiàng)發(fā)明專(zhuān)利。
現(xiàn)在很多公司都在做松耦合,因?yàn)殡S著業(yè)務(wù)發(fā)展、需求增加,緊耦合系統(tǒng)的問(wèn)題會(huì)慢慢凸顯,并日益加劇。
以云分發(fā)行業(yè)為例,其屬性在逐漸發(fā)生變化。過(guò)去,極少人產(chǎn)生內(nèi)容,絕大多數(shù)人消費(fèi)內(nèi)容,云分發(fā)主要以下行流量為主,而隨著全民直播的興起,云分發(fā)變成了云交互;物聯(lián)網(wǎng)的發(fā)展使物與物的數(shù)據(jù)交流成為主要方式,例如智能家居每天會(huì)產(chǎn)生上千條數(shù)據(jù),但其中只有幾條會(huì)被消費(fèi);VR爆發(fā),用戶(hù)產(chǎn)生的數(shù)據(jù)逐漸會(huì)從圖片、視頻轉(zhuǎn)變?yōu)閂R內(nèi)容;基于此我們可以預(yù)料到上行流量將逐步增加,并逐漸超過(guò)下行流量,成為基礎(chǔ)網(wǎng)絡(luò)架構(gòu)的巨大挑戰(zhàn)。
用戶(hù)需求與網(wǎng)絡(luò)基礎(chǔ)環(huán)境的快速變化,使得我們需要越來(lái)越快的實(shí)現(xiàn)需求,然而緊耦合系統(tǒng)卻為研發(fā)帶來(lái)諸多困難,使功能實(shí)現(xiàn)越來(lái)越耗費(fèi)精力與時(shí)間,所以在白山創(chuàng)立之初就決定做“樂(lè)高式松耦合”架構(gòu),來(lái)構(gòu)建整個(gè)產(chǎn)品體系,像搭積木一般靈活自如。
一、 傳統(tǒng)難點(diǎn)
(1)需求堆積,收斂周期長(zhǎng)
很多創(chuàng)業(yè)公司在成立之初采用野蠻生長(zhǎng)的模式,原則是越快越好。緊耦合架構(gòu)可以很好的滿(mǎn)足這些要求,他們可以快速的建立CMDB與資源管理平臺(tái),并配置自動(dòng)化、portal、監(jiān)控等功能。但隨著功能增多與需求開(kāi)發(fā)的增加,這個(gè)系統(tǒng)逐漸變?yōu)橐槐P(pán)散沙。當(dāng)有新需求發(fā)生時(shí),他們需要為其做很多硬編碼動(dòng)作,收斂周期越來(lái)越長(zhǎng)。
(2)“老中醫(yī)”資源的浪費(fèi)
在緊耦合系統(tǒng)中,看似一個(gè)沒(méi)有什么關(guān)系的小改動(dòng),極有可能會(huì)引起一個(gè)重大bug;為防止錯(cuò)誤發(fā)生,只能將系統(tǒng)設(shè)計(jì)的越來(lái)越復(fù)雜。例如為防止客戶(hù)端掛掉,研發(fā)通常會(huì)為其添加一個(gè)守護(hù)進(jìn)程;當(dāng)守護(hù)進(jìn)程不穩(wěn)定時(shí),新入職的研發(fā)常用的解決方案是再添加一個(gè)守護(hù)進(jìn)程,這就導(dǎo)致了系統(tǒng)越來(lái)越臃腫。
這時(shí)候,公司往往就需要經(jīng)驗(yàn)豐富、了解系統(tǒng)整體情況的“老中醫(yī)”才能對(duì)平臺(tái)進(jìn)行改造。而作為核心資產(chǎn)的“老中醫(yī)”在忙于救火、進(jìn)行技術(shù)攻堅(jiān),很難抽出時(shí)間來(lái)進(jìn)行系統(tǒng)重構(gòu)。
二、 “樂(lè)高式松耦合”架構(gòu)落地
快速實(shí)現(xiàn)需求與需求實(shí)現(xiàn)越來(lái)越慢的矛盾如何解決?最終白山的產(chǎn)品架構(gòu)聚焦在解耦上,方便平臺(tái)快速迭代,減少系統(tǒng)間依賴(lài)程度,打通無(wú)關(guān)聯(lián)項(xiàng)目,為運(yùn)營(yíng)互動(dòng)提供高效支持,確保服務(wù)質(zhì)量。
(1) 第一層松耦合架構(gòu)
以白山云分發(fā)CDN-X系統(tǒng)為例,其根本核心是運(yùn)營(yíng)。為使運(yùn)營(yíng)支撐系統(tǒng)通過(guò)解耦讓公司的研發(fā)、運(yùn)營(yíng)靈活運(yùn)轉(zhuǎn),需要進(jìn)行第一層抽象。將運(yùn)營(yíng)支撐系統(tǒng)抽象為5個(gè)組件,包括:客戶(hù)管理類(lèi)、賬單信息類(lèi)、資源管理、運(yùn)營(yíng)監(jiān)控和配置管理。并對(duì)這5個(gè)組件進(jìn)行畫(huà)像,確定邊界、輸入輸出,按照運(yùn)營(yíng)場(chǎng)景描述用戶(hù)場(chǎng)景。
幾個(gè)組件之間通過(guò)消息總線交互指令,通過(guò)標(biāo)準(zhǔn)的reset接口交互數(shù)據(jù);同時(shí)將5個(gè)組件投入到實(shí)際開(kāi)發(fā)中,按照不同類(lèi)型做實(shí)例化。
(第一層松耦合架構(gòu))
(2)第二層松耦合架構(gòu)
做完第一層解耦之后,我們發(fā)現(xiàn)第二層還可以繼續(xù)做抽象。以配置管理系統(tǒng)為例,又可抽象出4部分。
生成配置:主要負(fù)責(zé)配置的生成以及配置到git倉(cāng)庫(kù);
分發(fā)控制:管理灰度發(fā)布過(guò)程;
執(zhí)行分發(fā):分發(fā)收到的指令,并通過(guò)一些工具(如:salt、ansible、http get)匯報(bào)給上面的組件;
執(zhí)行測(cè)試:調(diào)用已經(jīng)寫(xiě)好的測(cè)試用例倉(cāng)庫(kù)測(cè)試這一次配置分發(fā)過(guò)程的最后效果。
(第二層松耦合架構(gòu))
運(yùn)營(yíng)支撐系統(tǒng)中的各個(gè)組件都可以一直抽象下去,抽象概念貫穿整個(gè)設(shè)計(jì)平臺(tái)的始末。
核心組件設(shè)計(jì)時(shí)再經(jīng)過(guò)進(jìn)一步抽象成工廠模式或單例模式,形成針對(duì)不同特性服務(wù)及場(chǎng)景,只需編寫(xiě)極小的落地代碼即可獲得整個(gè)運(yùn)營(yíng)支撐服務(wù)的可插拔架構(gòu)。
(3)建設(shè)原則
組件即服務(wù)
研發(fā)中人人都是架構(gòu)師,收到研發(fā)需求后不是研究輸入輸出與邊界,而是了解業(yè)務(wù)。根據(jù)情況輸出需求文檔,并與業(yè)務(wù)方進(jìn)行確認(rèn),按照需求設(shè)計(jì)架構(gòu)。每一個(gè)組件,不再是功能,而是服務(wù),有自己的服務(wù)對(duì)象;研發(fā)人員從最初的對(duì)代碼質(zhì)量、輸入輸出負(fù)責(zé),發(fā)展為對(duì)服務(wù)質(zhì)量負(fù)責(zé)。
事件組件化
在最初設(shè)計(jì)過(guò)程中,我們發(fā)現(xiàn),很多運(yùn)營(yíng)中的動(dòng)作稱(chēng)不上是平臺(tái)上的動(dòng)作,而是由事件組成。如果這些事件通過(guò)自動(dòng)化來(lái)完成,就需要投入大量的精力。以節(jié)點(diǎn)上架自動(dòng)化為例:包括自動(dòng)化掃描端口、監(jiān)控、安裝、配置下發(fā)管理,甚至可以將自動(dòng)化加入當(dāng)前系統(tǒng)平臺(tái)為用戶(hù)提供服務(wù)。組件自動(dòng)后,如果包裝成事件,將浪費(fèi)不必要的人力成本。如果將事件組件化,運(yùn)維管理人員則可以在平臺(tái)上方便的拖拽、引用、規(guī)范組件,通過(guò)拖拽、配置工作實(shí)現(xiàn)整體自動(dòng)化。
數(shù)據(jù)聚合管理系統(tǒng)
數(shù)據(jù)往往是運(yùn)營(yíng)中的判斷標(biāo)志,通過(guò)數(shù)據(jù)與數(shù)據(jù)間的關(guān)系來(lái)組建成組件。由于數(shù)據(jù)源之間的API不同,會(huì)導(dǎo)致花費(fèi)過(guò)長(zhǎng)的時(shí)間來(lái)對(duì)接API。我們將機(jī)房質(zhì)量、監(jiān)控負(fù)載、慢速比、卡頓率等數(shù)據(jù)進(jìn)行整理,部分進(jìn)行二次轉(zhuǎn)化,通過(guò)統(tǒng)一的接口調(diào)用,做成一個(gè)數(shù)據(jù)聚合管理系統(tǒng)。
實(shí)例分享-節(jié)點(diǎn)自動(dòng)上線
(運(yùn)維完成過(guò)程)
這個(gè)過(guò)程中運(yùn)維人員完成了很多組件,如:配置管理、內(nèi)部測(cè)試以及外部測(cè)試、入覆蓋地區(qū)等;隨后引入多種數(shù)據(jù)源進(jìn)行追蹤。事件模版完成后只需運(yùn)維人員選擇需上架的節(jié)點(diǎn)及其覆蓋方案與地區(qū),其余過(guò)程均有系統(tǒng)自動(dòng)化完成。
此模版還可以根據(jù)需要不斷修改,例如:丟包率組件等可以隨時(shí)加入,不會(huì)影響業(yè)務(wù)的進(jìn)行。
很多公司也在做同樣的事件管理系統(tǒng),不同的是其管理的是動(dòng)作;而我們發(fā)現(xiàn)往往動(dòng)作完成后還需要進(jìn)行人工跟蹤。鑒于此我們將事件做成一個(gè)完整的生命周期,同時(shí)引入數(shù)據(jù)源來(lái)跟蹤異常服務(wù)狀態(tài)碼。
這個(gè)事件的完成過(guò)程中運(yùn)維人員所需的操作已經(jīng)從寫(xiě)腳本、人肉分析,簡(jiǎn)化為在模版上拖拽、引用組件,根據(jù)經(jīng)驗(yàn)設(shè)置閥值,甚至使用其他的事件模版來(lái)完成事件。
三、 松耦合需要堅(jiān)持的細(xì)節(jié)
(1)保持簡(jiǎn)單
隨著時(shí)間的推移與功能的不斷增加,系統(tǒng)必然會(huì)出現(xiàn)復(fù)雜性,而這種復(fù)雜性很多是由我們自身操作導(dǎo)致的,如上文提到的“守護(hù)進(jìn)程”的例子,當(dāng)使用復(fù)雜方案解決問(wèn)題時(shí)往往會(huì)導(dǎo)致系統(tǒng)的臃腫。如果保證系統(tǒng)具備容錯(cuò)能力,組件運(yùn)營(yíng)不正常時(shí)系統(tǒng)可以自動(dòng)修復(fù),這個(gè)問(wèn)題就會(huì)簡(jiǎn)化。
以消息管理機(jī)制為例,強(qiáng)消息管理機(jī)制要求確認(rèn)消息確實(shí)可以被每臺(tái)設(shè)備收到并執(zhí)行。我們對(duì)此進(jìn)行了改善,使消息病毒式傳播,每臺(tái)設(shè)備可以向周?chē)?-6臺(tái)設(shè)備發(fā)出消息,即便中間有一次失敗,還會(huì)有其他設(shè)備再次向這臺(tái)設(shè)備傳輸。這樣的容錯(cuò)能力保證了系統(tǒng)可以簡(jiǎn)單地自動(dòng)實(shí)現(xiàn)強(qiáng)研發(fā)、強(qiáng)跟蹤等功能。
(2)在平臺(tái)的基礎(chǔ)上構(gòu)建應(yīng)用程序
例如在大數(shù)據(jù)平臺(tái)上構(gòu)建應(yīng)用,研發(fā)人員在開(kāi)發(fā)組件時(shí)無(wú)需考慮數(shù)據(jù)庫(kù)的設(shè)計(jì)以及瓶頸優(yōu)化問(wèn)題,只需要對(duì)接數(shù)據(jù)聚合平臺(tái),大幅提高研發(fā)效率。
(3)不斷迭代
以Facebook為例,目前每秒可以處理12億張圖片;而其第一版系統(tǒng)只能允許用戶(hù)上傳圖片,并將其保存在數(shù)據(jù)庫(kù)中,該系統(tǒng)只存續(xù)3個(gè)月;隨著活躍用戶(hù)的增加, 其后端壓力不斷增加,于是將存儲(chǔ)改為二進(jìn)制存儲(chǔ)方式;Facebook的每一次迭代都不是為了某一特定目標(biāo),而是為了解決業(yè)務(wù)上的痛苦。
所以最開(kāi)始做開(kāi)發(fā)時(shí),我們只需要考慮需求與業(yè)務(wù),設(shè)計(jì)足夠簡(jiǎn)單的方案,再進(jìn)行不斷迭代以滿(mǎn)足新增需求。
四、 帶來(lái)的變化
(1) 快捷引入新特性
我們使用P2P消息管理機(jī)制結(jié)合收斂算法,將文件刪除由5分鐘改進(jìn)至0.7秒,我們對(duì)系統(tǒng)沒(méi)有進(jìn)行大范圍改變,只是替換了其中的消息機(jī)制,利用當(dāng)前基礎(chǔ)的通訊機(jī)制和基礎(chǔ)數(shù)據(jù),過(guò)去所做的優(yōu)化與UI仍可以繼續(xù)使用。引用這些新特性時(shí)保持輕量級(jí),對(duì)其他組件幾乎沒(méi)有影響。
(2) 開(kāi)發(fā)效率高
例如游戲交互過(guò)程中的數(shù)字包交互,業(yè)內(nèi)公認(rèn)很難做到。目前我們正在進(jìn)行嘗試,我們引入開(kāi)源的TCP代理軟件,并規(guī)劃新的應(yīng)用服務(wù)類(lèi)型,軟件按指定好的打包方式放在指定位置,就可以實(shí)現(xiàn)軟件的自動(dòng)發(fā)布,同時(shí)調(diào)用其他組件接口對(duì)新業(yè)務(wù)進(jìn)行監(jiān)控,編寫(xiě)配置生成邏輯實(shí)現(xiàn)業(yè)務(wù)配置自動(dòng)化。只需要編寫(xiě)非常輕量級(jí)的落地代碼,整個(gè)組件落地之后就可以服務(wù)運(yùn)營(yíng)。
(3)運(yùn)維自動(dòng)化提高
在問(wèn)題定位時(shí),如果人工跟蹤一般是“是與否選擇”的串行計(jì)算,而在事件管理系統(tǒng)中,則進(jìn)行并行計(jì)算,即:調(diào)用監(jiān)控系統(tǒng),判斷節(jié)點(diǎn)是否正常;調(diào)用第三方數(shù)據(jù)進(jìn)行及時(shí)測(cè)試,判斷節(jié)點(diǎn)當(dāng)前服務(wù)是否正常;調(diào)用客戶(hù)App數(shù)據(jù)驗(yàn)證服務(wù)質(zhì)量;使用ELK系統(tǒng)分析日志,精準(zhǔn)、快速的定位問(wèn)題,分析時(shí)間由10分鐘大幅度縮減為3分鐘。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/39424.html
摘要:二樂(lè)高式松耦合架構(gòu)落地快速實(shí)現(xiàn)需求與需求實(shí)現(xiàn)越來(lái)越慢的矛盾如何解決最終白山的產(chǎn)品架構(gòu)聚焦在解耦上,方便平臺(tái)快速迭代,減少系統(tǒng)間依賴(lài)程度,打通無(wú)關(guān)聯(lián)項(xiàng)目,為運(yùn)營(yíng)互動(dòng)提供高效支持,確保服務(wù)質(zhì)量。 作者:王康 白山聯(lián)合創(chuàng)始人兼產(chǎn)品副總裁。 王康先生主要負(fù)責(zé)產(chǎn)品的完善與升級(jí)、產(chǎn)品開(kāi)發(fā)流程把控及進(jìn)度協(xié)調(diào)、產(chǎn)品設(shè)計(jì)改進(jìn)及定期優(yōu)化、產(chǎn)品全生命周期管理等工作。他帶領(lǐng)團(tuán)隊(duì)實(shí)現(xiàn)白山首款產(chǎn)品CDN-X的多項(xiàng)...
摘要:大家好,我是冰河有句話叫做投資啥都不如投資自己的回報(bào)率高。馬上就十一國(guó)慶假期了,給小伙伴們分享下,從小白程序員到大廠高級(jí)技術(shù)專(zhuān)家我看過(guò)哪些技術(shù)類(lèi)書(shū)籍。 大家好,我是...
閱讀 821·2021-11-25 09:43
閱讀 1690·2021-09-29 09:42
閱讀 1902·2019-08-30 15:55
閱讀 3423·2019-08-30 15:54
閱讀 2629·2019-08-30 13:20
閱讀 3514·2019-08-29 13:25
閱讀 925·2019-08-28 18:03
閱讀 1787·2019-08-26 13:44