TalkingData何坤:如何搭建高可用的數(shù)據(jù)服務(wù)交易系統(tǒng)?
原創(chuàng)【51CTO.com原創(chuàng)稿件】2017年12月01-02日,由51CTO主辦的WOTD 2017全球軟件開發(fā)技術(shù)峰會(huì)在深圳中洲萬(wàn)豪酒店召開。自2012年以來(lái),WOT品牌大會(huì)成功舉辦了14屆,積累了大量的技術(shù)專家資源,獲得了廣大IT從業(yè)者和技術(shù)愛好者的一致認(rèn)可,成為了業(yè)界重要的技術(shù)分享交流平臺(tái)以及人脈拓展平臺(tái)。本次會(huì)議包含:編程語(yǔ)言與框架,大數(shù)據(jù)系統(tǒng)架構(gòu)設(shè)計(jì)、微服務(wù)與容器技術(shù)、前端開發(fā)實(shí)戰(zhàn)、物聯(lián)網(wǎng)(IoT)技術(shù)、軟件性能優(yōu)化等10大技術(shù)主題。
在大數(shù)據(jù)系統(tǒng)架構(gòu)設(shè)計(jì)專場(chǎng),來(lái)自TalkingData的資深Java工程師何坤分享了主題為《高可用數(shù)據(jù)服務(wù)交易系統(tǒng)架構(gòu)實(shí)踐》精彩演講,介紹了TalkingData在搭建高可用數(shù)據(jù)服務(wù)系統(tǒng)的過(guò)程中,準(zhǔn)確計(jì)量系統(tǒng)的設(shè)計(jì)、實(shí)現(xiàn)和演進(jìn)等內(nèi)容。
演講中,何坤介紹了TalkingData智能數(shù)據(jù)服務(wù)商城SDMK(Smart Data Market)。SDMK是什么?它提供多種形式的數(shù)據(jù)服務(wù),包括 API 服務(wù)、人群數(shù)據(jù)服務(wù)、異步服務(wù)等,還開放了Lookalike,情景感知,預(yù)測(cè)引擎,推薦引擎等人工智能服務(wù)。通過(guò)這些數(shù)據(jù)服務(wù),可以降低數(shù)據(jù)應(yīng)用場(chǎng)景的難度,幫助更多企業(yè)發(fā)現(xiàn)數(shù)據(jù)的深層價(jià)值。
所謂實(shí)踐出真知,談及智能數(shù)據(jù)服務(wù)商城實(shí)踐的經(jīng)驗(yàn)心得,何坤從如何保證數(shù)據(jù)服務(wù)交易系統(tǒng)的高可用,如何做到準(zhǔn)確計(jì)量等多個(gè)方面與51CTO記者進(jìn)行了交流。
如何搭建高可用的數(shù)據(jù)服務(wù)交易系統(tǒng)?
作為基礎(chǔ)設(shè)施,有很多應(yīng)用依賴于SDMK提供的服務(wù),SDMK的自身的總體可用性必須比它們還要高??紤]到南向服務(wù)的多樣性和不可靠性,雖然不能做服務(wù)本身的可用性保證,但是要能做到服務(wù)不可用時(shí),能以合適的方式通知用戶。因此,在SDMK構(gòu)建過(guò)程中,TalkingData技術(shù)團(tuán)隊(duì)充分考慮了系統(tǒng)的可用性。
何坤表示,想要搭建一個(gè)高可用的數(shù)據(jù)服務(wù)交易系統(tǒng),不僅要做好梳理好業(yè)務(wù)流程,劃分出具體的系統(tǒng)功能模塊等這些常規(guī)工作。同時(shí),在可用性上,系統(tǒng)需要達(dá)到兩點(diǎn)要求:一是,計(jì)量最終誤差要求,不高于0.01%;二是,交易系統(tǒng)可用性要求,不低于99.9%。
如何做到準(zhǔn)確計(jì)量,保證計(jì)量誤差不高于0.01%?
那么,我們究竟該如何做到準(zhǔn)確計(jì)量?對(duì)此,何坤認(rèn)為,首先我們要明確準(zhǔn)確計(jì)量的概念,它有兩層含義:一是,實(shí)時(shí)數(shù)量的準(zhǔn)確性;二是,最終數(shù)量的準(zhǔn)確性。但實(shí)時(shí)準(zhǔn)確與高并發(fā)是一對(duì)矛盾,因此只能做到最終準(zhǔn)確+高并發(fā),犧牲一定的實(shí)時(shí)數(shù)量準(zhǔn)確性,也就是說(shuō),實(shí)時(shí)計(jì)量會(huì)有一定誤差。因此,我們需要在保證最終準(zhǔn)確性的前提下,盡量提高實(shí)時(shí)準(zhǔn)確性。
此外,為了保證服務(wù)高并發(fā)和高QPS下服務(wù)的響應(yīng)時(shí)間,可以使用“異步計(jì)量”的方式。在發(fā)生故障時(shí),選擇盡量確保服務(wù)可用,容忍可能的超量;在故障后恢復(fù)數(shù)據(jù),滿足最終準(zhǔn)確的要求。
何坤表示,之所以選擇“異步計(jì)量”的方式而不是“同步計(jì)量”的方式,是因?yàn)椋?/p>
1.對(duì)數(shù)據(jù)庫(kù)壓力大;
2.每次調(diào)用時(shí)延變長(zhǎng),不容易保證主流程時(shí)延穩(wěn)定;
3.MySQL不易擴(kuò)展,要做分庫(kù)分表;
4.異步計(jì)量容易洗數(shù);
5.擴(kuò)展性好,牽涉到異步服務(wù)的所有組件,ES,Kafka,Redis都是原生就支持方便擴(kuò)展的。
此外,為了保證最終一致性,同時(shí)讓實(shí)時(shí)準(zhǔn)確性盡量達(dá)到目標(biāo),TalkingData采用了Lambda架構(gòu)來(lái)降低準(zhǔn)確性和高并發(fā)下實(shí)時(shí)的矛盾。
如何保證系統(tǒng)可用性不低于99.9%?
記者了解到,整體服務(wù)的高可用性,不止故障轉(zhuǎn)移這一個(gè)點(diǎn),它包括四個(gè)方面:事前的預(yù)防、事中的自動(dòng)化故障轉(zhuǎn)移、事中的故障感知、事后的故障恢復(fù)。
何坤表示:“可用性背后是故障,我們預(yù)防故障的發(fā)生,在故障發(fā)生的時(shí)候及時(shí)做到故障轉(zhuǎn)移和故障的感知,并且在感知到故障之后能比較快速地恢復(fù)故障,恢復(fù)之后能做到復(fù)盤或者改進(jìn),就回到預(yù)防這一環(huán),形成良性的循環(huán)。”
要想保證交易系統(tǒng)可用性不低于99.9%,何坤建議可以這樣做:
***,采用分布式部署,無(wú)狀態(tài)設(shè)計(jì)。采用服務(wù)無(wú)狀態(tài)設(shè)計(jì),把必要的狀態(tài)保存在中央存儲(chǔ)中(MySQL/Redis等);所有調(diào)用必須帶trackid,以便定位問(wèn)題,縮短故障恢復(fù)時(shí)間。
第二,可以專注于核心業(yè)務(wù),降低關(guān)鍵路徑復(fù)雜性與負(fù)載,并適時(shí)拆分和合并功能模塊,降低模塊復(fù)雜度。
第三,對(duì)資源的使用進(jìn)行限制,避免無(wú)效調(diào)用或者故障耗盡資源??刹捎萌蹟鄼C(jī)制,分服務(wù)SLA,獨(dú)立適配器,限制pending狀態(tài)等方式,從用戶和服務(wù)兩個(gè)方向來(lái)進(jìn)行。
第四,消息系統(tǒng)的選擇需要能夠保證數(shù)據(jù)可持久化,支持訂閱和隊(duì)列兩種方式,具有高性能和高擴(kuò)展性。
第五,做好監(jiān)控與報(bào)警。所有服務(wù)上線之前必須有基本監(jiān)控與報(bào)警,比如:基礎(chǔ)組件監(jiān)控與報(bào)警、業(yè)務(wù)指標(biāo)監(jiān)控與報(bào)警、調(diào)用追蹤系統(tǒng)等。
第六,減少更新帶來(lái)的故障,因?yàn)榇蠖鄶?shù)故障都是更新引起的。對(duì)此,可以采用灰度系統(tǒng),基于用戶id分流,而不是隨機(jī)分流。無(wú)論gateway請(qǐng)求還是頁(yè)面請(qǐng)求,所有的請(qǐng)求都帶用戶id,因此可以基于這個(gè)特性在Nginx中寫Lua來(lái)識(shí)別用戶,讀取后端配置的灰度用戶列表,決定是進(jìn)入灰度系統(tǒng)還是正式生產(chǎn)系統(tǒng)。接入灰度的可以是友好用戶,也可以是守護(hù)用戶。但是要注意做好守護(hù)用戶數(shù)據(jù)的隔離,不要污染生產(chǎn)數(shù)據(jù)的統(tǒng)計(jì)分析。
此外,何坤強(qiáng)調(diào),為了保證系統(tǒng)的高可用,一方面,要做好功能實(shí)現(xiàn)的演練測(cè)試;另一方面,研發(fā)人員需要深入地切入到運(yùn)維層面,因?yàn)殚_發(fā)出的產(chǎn)品并不是實(shí)現(xiàn)了所有功能就是完成了任務(wù),還需要發(fā)現(xiàn)并解決產(chǎn)品運(yùn)行過(guò)程中存在的問(wèn)題,否則會(huì)出現(xiàn)脫節(jié)的情況。
***,何坤表示,在設(shè)計(jì)系統(tǒng)時(shí),除了計(jì)量本身的邏輯之外,計(jì)量是和可用性是密切聯(lián)系在一起的。如果可用性不夠高,或者不能及時(shí)糾正運(yùn)行過(guò)程中的錯(cuò)誤,那么就會(huì)影響計(jì)量。比如:如果不能快速的恢復(fù)數(shù)據(jù),那么準(zhǔn)確性也無(wú)法保證。
【講師簡(jiǎn)介】
TalkingData資深Java工程師何坤
何坤主要負(fù)責(zé)Smart Data Market研發(fā),主導(dǎo)開發(fā)了智能數(shù)據(jù)服務(wù)商城,為超過(guò)200家客戶以高SLA提供數(shù)百個(gè)在線數(shù)據(jù)服務(wù)。在基于微服務(wù)的高并發(fā)高可用Saas系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)運(yùn)營(yíng)方面具有豐富經(jīng)驗(yàn)。之前曾任職于甲骨文,安捷倫科技等公司。敏捷開發(fā)和DevOps的踐行者。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】