本文由百度搜索技術(shù)平臺(tái)研發(fā)部分享,本文有修訂和改動(dòng)。
1、引言
分布式數(shù)據(jù)傳輸系統(tǒng)是一種用于在多個(gè)計(jì)算節(jié)點(diǎn)之間高效傳輸大量數(shù)據(jù)的系統(tǒng),詣在高效的解決大規(guī)模數(shù)據(jù)遷移、備份、跨地域復(fù)制等問(wèn)題。其廣泛應(yīng)用在實(shí)時(shí)數(shù)據(jù)流傳輸、跨數(shù)據(jù)中心數(shù)據(jù)遷移、多媒體傳輸?shù)葓?chǎng)景,在大多數(shù)企業(yè)中的日志管理、業(yè)務(wù)數(shù)據(jù)建庫(kù)等場(chǎng)景中也都會(huì)使用到。
眾所周知,數(shù)據(jù)的高效傳輸往往直接影響著企業(yè)對(duì)市場(chǎng)先機(jī)的把握,對(duì)企業(yè)發(fā)展有重要意義,特別是在金融領(lǐng)域,如證券行業(yè),它對(duì)分布式數(shù)據(jù)傳輸系統(tǒng)的設(shè)計(jì)提出了更高的要求,證券領(lǐng)域數(shù)據(jù)變化飛快,一個(gè)高時(shí)效、穩(wěn)定的數(shù)據(jù)流傳輸系統(tǒng)不僅能有效的提升用戶體驗(yàn),更能提供用戶一手的投資信息,有助于用戶的投資決策,進(jìn)而拉進(jìn)企業(yè)與用戶的距離。
本文將通過(guò)一個(gè)百度搜索旗下的金融場(chǎng)景案例來(lái)分享構(gòu)建高實(shí)時(shí)、高可用的分布式數(shù)據(jù)傳輸系統(tǒng)的技術(shù)實(shí)踐。
2、業(yè)務(wù)背景
作為百度搜索場(chǎng)景下時(shí)效性要求較高的業(yè)務(wù),金融承載著每天數(shù)千萬(wàn)次的用戶搜索請(qǐng)求。
而在2021年以前,金融業(yè)務(wù)的數(shù)據(jù)一直都是采用傳統(tǒng)的互聯(lián)網(wǎng)引入方式,該方式的特點(diǎn)是接入成本較低,但受公網(wǎng)等不可控因素影響,數(shù)據(jù)時(shí)效性較差,且數(shù)據(jù)斷流、錯(cuò)誤等問(wèn)題頻出,隨即而來(lái)的就是業(yè)務(wù)維護(hù)成本較高,十分不利于產(chǎn)品迭代。
我們基于此發(fā)起了一個(gè)證券數(shù)據(jù)直連項(xiàng)目,詣在通過(guò)接駁全球各大證券交易所數(shù)據(jù)中心來(lái)構(gòu)建一個(gè)高時(shí)效、高可用的分布式傳輸系統(tǒng),從而有效的解決傳統(tǒng)數(shù)據(jù)引入方式(公網(wǎng)抓取、推送)所帶來(lái)的時(shí)效性、穩(wěn)定性、正確性等問(wèn)題,進(jìn)而滿足全國(guó)乃至全球用戶的金融需求。
3、設(shè)計(jì)目標(biāo)
3.1業(yè)務(wù)目標(biāo)
接駁全球各大證券交易所Level-1行情數(shù)據(jù),來(lái)覆蓋全量上市公司股票、外匯、期貨、ETF、渦輪牛熊等證券業(yè)務(wù)來(lái)滿足用戶需求,時(shí)效性追平金融行業(yè)競(jìng)品,為打造強(qiáng)大的金融生態(tài)做數(shù)據(jù)基建儲(chǔ)備。
Level-1行情簡(jiǎn)稱LV1行情:是交易所根據(jù)交易規(guī)則發(fā)布的即時(shí)行情信息,數(shù)據(jù)格式包括基于FIX/FAST協(xié)議的接口和TXT文件、二進(jìn)制數(shù)據(jù)流等,行情通過(guò)交易所信息技術(shù)公司的高速地面網(wǎng)和寬帶廣播衛(wèi)星系統(tǒng)發(fā)布或上證所信息網(wǎng)絡(luò)有限公司的互聯(lián)網(wǎng)和專線傳輸。
3.2技術(shù)目標(biāo)
1)基礎(chǔ)設(shè)施建設(shè):協(xié)同交易所、運(yùn)營(yíng)商完成物理專線的鏈路部署,通過(guò)物理專線接入的方式在百度云機(jī)房接入上海、深圳、香港、納斯達(dá)克證券交易所數(shù)據(jù)中心,適配交易所單、組播協(xié)議將二進(jìn)制流/文本數(shù)據(jù)引入到百度內(nèi)部,再分別完成華南、華北、華東、香港(支持海外訪問(wèn))地域的數(shù)據(jù)存儲(chǔ)與轉(zhuǎn)發(fā),同時(shí)支持負(fù)載和流量調(diào)度來(lái)支撐各地域的用戶請(qǐng)求。(注:這里的物理專線特指光纜)
2)時(shí)效性和穩(wěn)定性提升:行情數(shù)據(jù)檢索99分位耗時(shí)不超過(guò)200ms,數(shù)據(jù)穩(wěn)定性從99%提升至99.99%以上,數(shù)據(jù)災(zāi)備能力從1主0備升級(jí)至1主2備。
3)數(shù)據(jù)安全:基于百度安全能力,構(gòu)建類似的防火墻策略來(lái)嚴(yán)格控制每一個(gè)機(jī)房、每一個(gè)集群的出入權(quán)限,并且配置好相應(yīng)的安全組策略。
4、關(guān)鍵思路
從功能和網(wǎng)絡(luò)拓?fù)渖蟻?lái)看,一個(gè)高時(shí)效、高可用的金融數(shù)據(jù)傳輸系統(tǒng)至少需要包含以下幾個(gè)部分,我們逐個(gè)來(lái)進(jìn)行解讀。
4.1接入層
適配全球各大交易所單、組播傳輸協(xié)議,確保數(shù)據(jù)能在專線物理網(wǎng)絡(luò)正常傳輸。
接入主要有2種方式:
- 1)一種是走互聯(lián)網(wǎng);
- 2)一種是走物理專線。
前者相對(duì)比較靈活:各類數(shù)據(jù)協(xié)議基本都可以支持,有直接走HTTP(GET/POST),或者是走消息隊(duì)列的發(fā)布訂閱等等,接入成本較低,屬立即接入那種,但受公網(wǎng)的不可控因素影響,在傳輸效率和安全性上相對(duì)后者會(huì)有比較大的差距,我們一般會(huì)把互聯(lián)網(wǎng)的方式當(dāng)做一個(gè)災(zāi)備能力存在。
專線方式的特點(diǎn):是僅點(diǎn)對(duì)點(diǎn)傳輸,由于用的是獨(dú)立的光纜,在有限帶寬內(nèi)理論可以做到無(wú)爭(zhēng)用狀態(tài),不受公網(wǎng)影響,屬可靠傳輸,傳輸協(xié)議私有化,增加了更多的認(rèn)證機(jī)制。因此也更安全,區(qū)分不同應(yīng)用場(chǎng)景,像證券類數(shù)據(jù)傳輸,一般交易所采用的是單播、組播方式,當(dāng)下用的多的是組播。另外專線中也有主備的概念,一般會(huì)預(yù)留1-2條線路做災(zāi)備,整體下來(lái),專線的費(fèi)用要更昂貴一些,接入的周期也更長(zhǎng),往往長(zhǎng)達(dá)幾個(gè)月。
4.2網(wǎng)絡(luò)層
完成華南、華北、華東百度云機(jī)房虛擬網(wǎng)絡(luò)架構(gòu)建設(shè),包括子網(wǎng)、路由、網(wǎng)關(guān)等。
虛擬網(wǎng)絡(luò)的核心組成部分主要是子網(wǎng)、路由、網(wǎng)關(guān)、虛擬機(jī),其中每個(gè)子網(wǎng)關(guān)聯(lián)著一個(gè)虛擬機(jī)集群,我們把整個(gè)組成部分(域)統(tǒng)稱為一個(gè)VPC(Virtual private Cloud),路由又區(qū)分為TGW路由和對(duì)等連接。
這里主要關(guān)注對(duì)等連接,它是為用戶提供了VPC級(jí)別的網(wǎng)絡(luò)互聯(lián)服務(wù),使用戶實(shí)現(xiàn)在不同虛擬網(wǎng)絡(luò)之間的流量互通,實(shí)現(xiàn)同區(qū)域/跨區(qū)域,同用戶/不同用戶之間穩(wěn)定高速的虛擬網(wǎng)絡(luò)互聯(lián),其核心是基于對(duì)路由表的操作,對(duì)等連接也支持配置地域級(jí)的DNS同步。
網(wǎng)關(guān)又分為NAT網(wǎng)關(guān)和專線網(wǎng)關(guān):
1)一個(gè)對(duì)外:比如設(shè)置SNAT和DNAT規(guī)則用于統(tǒng)一網(wǎng)段的外網(wǎng)出口;
2)一個(gè)對(duì)內(nèi):對(duì)內(nèi)其實(shí)就是確保能夠走專線和內(nèi)部網(wǎng)絡(luò)打通。
4.3傳輸層
完成各機(jī)房?jī)?nèi)的數(shù)據(jù)解析、存儲(chǔ)、同步、轉(zhuǎn)發(fā)等。
對(duì)于接入層獲取到的數(shù)據(jù)我們分為三個(gè)級(jí)別:
1)像交易所主要是二進(jìn)制流、文本為一級(jí)數(shù)據(jù),我們需要保留近一段時(shí)間的原始數(shù)據(jù)落在本地(一級(jí)數(shù)據(jù)管理集群),以便用作應(yīng)急回放。
2)而解碼后的數(shù)據(jù)為二級(jí)數(shù)據(jù),落在二級(jí)數(shù)據(jù)管理集群上,主要用于跨地域同步。
3)最后,對(duì)解碼后的數(shù)據(jù)進(jìn)行計(jì)算&加工,作為三級(jí)數(shù)據(jù),落在三級(jí)數(shù)據(jù)管理集群用于承接應(yīng)用服務(wù)。同時(shí),按協(xié)議解碼后的數(shù)據(jù)按照使用場(chǎng)景區(qū)分為實(shí)時(shí)流(如分時(shí))、延時(shí)流(如K線),延時(shí)流經(jīng)過(guò)實(shí)時(shí)流計(jì)算得來(lái),實(shí)時(shí)流同步進(jìn)內(nèi)存用于提升IO效率,延遲流通過(guò)實(shí)時(shí)流的計(jì)算后異步進(jìn)DB,DB維護(hù)在三級(jí)數(shù)據(jù)管理集群上。
4.4應(yīng)用層
負(fù)載/流量調(diào)度、監(jiān)控能力等建設(shè)。
應(yīng)用層的設(shè)計(jì),主要有兩個(gè)方面的考慮:
1)一方面是對(duì)于接入層的負(fù)載和流量調(diào)度,如通過(guò)部署websocket/http服務(wù)來(lái)支撐百度用戶流量,使用BLB(Baidu Load Balance)將同一區(qū)域的多臺(tái)百度智能云服務(wù)器虛擬成一個(gè)組,設(shè)置一個(gè)內(nèi)網(wǎng)或外網(wǎng)的服務(wù)地址,將前端并發(fā)訪問(wèn)轉(zhuǎn)發(fā)給后臺(tái)多臺(tái)云服務(wù)器(BCC),實(shí)現(xiàn)應(yīng)用程序的流量均衡,性能上實(shí)現(xiàn)業(yè)務(wù)水平擴(kuò)展。
負(fù)載均衡還通過(guò)故障自動(dòng)切換及時(shí)地消除服務(wù)的單點(diǎn)故障,提升服務(wù)的可用性,支持服務(wù)器調(diào)度權(quán)重策略配置,并支持TCP、HTTP等協(xié)議。
2)一方面是對(duì)監(jiān)控的應(yīng)用,如請(qǐng)求/數(shù)據(jù)傳輸日志落盤、統(tǒng)計(jì)、分析以及流量和sla監(jiān)控等。
4.5小結(jié)
將以上四層能力建設(shè)后,此時(shí)單機(jī)房?jī)?nèi)的網(wǎng)絡(luò)拓?fù)鋺?yīng)該如下圖所示。
注:DCC/BBC/BCC都是百度云范疇的機(jī)器類型,更多細(xì)節(jié)可以參考百度智能云私有網(wǎng)絡(luò):https://cloud.baidu.com/doc/VPC/s/Vjwvytu2v。
5、核心難點(diǎn)1
公網(wǎng)和私有網(wǎng)絡(luò)方式下如何在云上完成多協(xié)議適配,尤其是在私有網(wǎng)絡(luò)中適配單播、組播協(xié)議以及如何做組播轉(zhuǎn)單播。
5.1公網(wǎng)&私有網(wǎng)絡(luò)接入介紹
對(duì)于一個(gè)數(shù)據(jù)傳輸系統(tǒng)來(lái)說(shuō),最重要的一點(diǎn)其實(shí)就是能支持多協(xié)議的數(shù)據(jù)適配來(lái)提升系統(tǒng)的靈活性,證券交易所一般提供的接入方式有公網(wǎng)接入和私有網(wǎng)絡(luò)接入,公網(wǎng)接入的成本較低,一般周粒度就可完成,沒(méi)有復(fù)雜協(xié)議約束。
而私有網(wǎng)絡(luò)往往會(huì)有更高的要求,協(xié)議上大部分都要求具備單播介入能力,少部分像納斯達(dá)克和深圳交易所會(huì)要求下游支持組播接入。絕大多數(shù)的云廠商是無(wú)法直接在虛擬機(jī)上適配的,傳統(tǒng)券商基本都是完全使用昂貴的物理機(jī)資源來(lái)承載,雖然物理機(jī)插拔更方便也更穩(wěn)定,但運(yùn)維管理成本也更高。
兩種方式在效果和成本上也有本質(zhì)的區(qū)別:
1)公網(wǎng)接入:公網(wǎng)比較常見(jiàn)的數(shù)據(jù)接入方式主要是HTTP/HTTPS方式,當(dāng)然也會(huì)有RPC/FTP,只是用的相對(duì)少一些。
為了提升數(shù)據(jù)傳輸安全,雙方可以在調(diào)用前協(xié)商好數(shù)據(jù)加密算法和密鑰。優(yōu)點(diǎn)是接入成本較低,能快速應(yīng)用,尤其在跨洋傳輸上會(huì)有體現(xiàn)。缺點(diǎn)是走的公共線路,網(wǎng)絡(luò)不可靠,且數(shù)據(jù)易被截獲,當(dāng)攻擊者捕獲兩端的數(shù)據(jù)包后,哪怕不能完全解析,也可以實(shí)施一些流量攻擊手段以影響服務(wù)穩(wěn)定性。總的來(lái)說(shuō),一般不會(huì)對(duì)于安全性、時(shí)效性要求較高的數(shù)據(jù)采用該方式接入,更多是只是一種備用方式(特殊場(chǎng)景除外,如跨洋傳輸)。
2)私有網(wǎng)絡(luò)接入:公司內(nèi)網(wǎng)其實(shí)就屬于一個(gè)私有網(wǎng)絡(luò),但是對(duì)于跨公司傳輸數(shù)據(jù)的場(chǎng)景,要想構(gòu)建私有網(wǎng)絡(luò),一般會(huì)走物理專線接入的方式。
這種點(diǎn)對(duì)點(diǎn)傳輸方式的顯著優(yōu)點(diǎn)是專網(wǎng)專用且安全性較高,基本不受公共網(wǎng)絡(luò)影響(自然災(zāi)害等不可抗力除外),在帶寬范圍內(nèi)基本可以做到無(wú)網(wǎng)絡(luò)爭(zhēng)用狀態(tài)(數(shù)據(jù)即發(fā)即達(dá)),由于是私有網(wǎng)絡(luò)(雙端內(nèi)網(wǎng)傳輸),基本不用擔(dān)心數(shù)據(jù)安全問(wèn)題,而且往往還會(huì)增加額外的數(shù)據(jù)校驗(yàn)手段,尤其在金融場(chǎng)景,會(huì)有嚴(yán)格的token(硬/軟)認(rèn)證,該方式的缺點(diǎn)是成本相比公網(wǎng)傳輸接入成本更高,一般要持續(xù)數(shù)月,費(fèi)用更昂貴,一般在上百萬(wàn)元,依賴選取的傳輸介質(zhì)(一般選擇光纖)和帶寬。
5.2私有網(wǎng)絡(luò)中單播、組播協(xié)議接入方案
私有網(wǎng)絡(luò)有單播、廣播、組播之分。
1)單播:相對(duì)比較好適配一些,走靜態(tài)路由的方式在同一個(gè)VLANID下分別配置云端和IDC端的IP段作為IPV4專線互聯(lián)地址即可。
2)廣播:一般是對(duì)于服務(wù)端而言,比如證券交易所下游對(duì)接著全球范圍的所有券商,數(shù)據(jù)源是相同的,一般會(huì)采用廣播的機(jī)制把數(shù)據(jù)推送給所有下游。
3)組播:一般是要求下游需要適配,現(xiàn)如今大部分業(yè)務(wù)都已經(jīng)上公有云,在云上常用虛擬化技術(shù)來(lái)完成服務(wù)器集群的部署。
對(duì)于虛擬機(jī)來(lái)說(shuō),更多的支持單播傳輸,不支持組播傳輸,往往需要在專門的物理設(shè)備(組播路由器、或特定的組播軟件)上配置轉(zhuǎn)發(fā)組播報(bào)文的路由,路由表關(guān)聯(lián)著具體的路由協(xié)議(如PIM),再用IGMPV3協(xié)議來(lái)完成組播成員和報(bào)文的管理,通過(guò)動(dòng)態(tài)BGP維護(hù)鄰居關(guān)系(現(xiàn)在的云廠商上對(duì)BGP的可能是固定分配AS號(hào),如果有AS的要求還是需要在物理機(jī)上單獨(dú)做),我們可以圈出一部分物理資源專門承載組播數(shù)據(jù)傳輸,通過(guò)配置IGMP Snooping(可以將組播報(bào)文轉(zhuǎn)發(fā)到二層數(shù)據(jù)鏈路層,實(shí)現(xiàn)組轉(zhuǎn)單,注意版本需要是3,否則無(wú)法轉(zhuǎn)發(fā)IGMPV3報(bào)文)+ AP完成組播轉(zhuǎn)單播配置,再通過(guò)雙網(wǎng)卡(WAN口+LAN口)形式實(shí)現(xiàn)專線網(wǎng)絡(luò)數(shù)據(jù)接入&同步到百度內(nèi)網(wǎng),物理機(jī)通過(guò)三層交換機(jī)來(lái)關(guān)聯(lián),構(gòu)造出類似下面的網(wǎng)絡(luò)拓?fù)洌ㄈ缦聢D所示)。
6、核心難點(diǎn)2
6.1概述
數(shù)據(jù)管理&跨地域同步,數(shù)據(jù)災(zāi)備能力、時(shí)效性提升。
數(shù)據(jù)的分層管理主要是應(yīng)對(duì)單機(jī)房?jī)?nèi)的場(chǎng)景,而對(duì)于跨機(jī)房或者說(shuō)跨地域的主要難點(diǎn)是數(shù)據(jù)同步,后者需要更多的考慮跨機(jī)房數(shù)據(jù)傳輸效率和災(zāi)備管理,核心是網(wǎng)絡(luò)設(shè)計(jì)。
6.2數(shù)據(jù)管理
按使用場(chǎng)景的不同,將數(shù)據(jù)分交易所二進(jìn)制流數(shù)據(jù)(原始數(shù)據(jù)流)、文本數(shù)據(jù)、業(yè)務(wù)數(shù)據(jù)/日志等。
1)原始數(shù)據(jù)流:主要應(yīng)對(duì)單機(jī)房、跨機(jī)房傳輸場(chǎng)景,當(dāng)出現(xiàn)下游業(yè)務(wù)服務(wù)異常導(dǎo)致的數(shù)據(jù)展現(xiàn)錯(cuò)誤時(shí),存儲(chǔ)的原始數(shù)據(jù)流可以很好的對(duì)數(shù)據(jù)進(jìn)行回放,以便快速恢復(fù)業(yè)務(wù),尤其是應(yīng)對(duì)金融證券數(shù)據(jù)傳輸場(chǎng)景,證券交易所一般不會(huì)推送重復(fù)數(shù)據(jù),如果下游業(yè)務(wù)服務(wù)異常導(dǎo)致存儲(chǔ)的業(yè)務(wù)數(shù)據(jù)全部失效或?yàn)榕K數(shù)據(jù),那可能只能通過(guò)refresh主動(dòng)請(qǐng)求上游來(lái)重新獲取。
但這樣做可能會(huì)出現(xiàn)核心數(shù)據(jù)丟失,由于這種方式的效率較低,還會(huì)擴(kuò)大業(yè)務(wù)受損的影響面,因此一般會(huì)先存儲(chǔ)交易所下發(fā)的原始數(shù)據(jù)流,業(yè)務(wù)可以自定義存儲(chǔ)方式和周期,當(dāng)出現(xiàn)問(wèn)題時(shí),可以通過(guò)『重播』原始數(shù)據(jù)流來(lái)止損。
另外原始數(shù)據(jù)流還能用于在對(duì)等網(wǎng)絡(luò)中的跨機(jī)房恢復(fù)業(yè)務(wù)數(shù)據(jù)。
2)業(yè)務(wù)數(shù)據(jù)流:主要應(yīng)對(duì)單機(jī)房傳輸?shù)膱?chǎng)景,根據(jù)模塊分工的不同,分證券的實(shí)時(shí)行情、歷史行情等等,對(duì)于單機(jī)房數(shù)據(jù)集群的管理我們有很多方式,對(duì)于自研的DB,在調(diào)度上可以用一些標(biāo)準(zhǔn)的分布式管理手段(如zk),數(shù)據(jù)同步的手段一般需要自定義,對(duì)于傳統(tǒng)的DB如Mysql、Redis、Mongo等,一般有標(biāo)準(zhǔn)化的數(shù)據(jù)同步方式和調(diào)度模式。
6.3跨地域同步
跨機(jī)房地域同步的前提是多個(gè)機(jī)房之間需要有直接或間接關(guān)聯(lián)關(guān)系的專用物理網(wǎng)絡(luò),即確保網(wǎng)絡(luò)是可達(dá)的,然后再結(jié)合虛擬網(wǎng)絡(luò)完成子網(wǎng)及路由配置。
對(duì)于具有直接網(wǎng)絡(luò)關(guān)聯(lián)關(guān)系的2個(gè)機(jī)房來(lái)說(shuō),我們的對(duì)等網(wǎng)絡(luò)(Peer Connection)設(shè)計(jì)稍微簡(jiǎn)單一些。
現(xiàn)在各個(gè)云廠商也基本都支持直接配置了,其原理是首先在同一個(gè)VPC下劃分好子網(wǎng)并規(guī)劃好集群規(guī)模,其次通過(guò)配置路由表的方式完成本端和對(duì)端的下一跳關(guān)聯(lián),這樣就完成了2個(gè)直接對(duì)端的對(duì)等網(wǎng)絡(luò)建設(shè)。
接著再配置和內(nèi)網(wǎng)專線的路由,就能做到云機(jī)房->內(nèi)網(wǎng)機(jī)房的網(wǎng)絡(luò)互通。
但如果2個(gè)機(jī)房沒(méi)有直接關(guān)聯(lián)關(guān)系,而又需要完成本端和對(duì)端數(shù)據(jù)同步怎么辦呢,比如有A B C三個(gè)機(jī)房,只有A-B B-C有直接關(guān)聯(lián)關(guān)系,而我們想要讓A-C關(guān)聯(lián),這時(shí)候不可能說(shuō)再建立一條物理鏈路,我們可以采用類似橋接的方式(或者叫隧道),同時(shí)關(guān)聯(lián)A-B-C三個(gè)機(jī)房,其中B作為一個(gè)"網(wǎng)橋",再通過(guò)NAT技術(shù)完成IP地址轉(zhuǎn)換,確保C可以識(shí)別從A過(guò)來(lái)的路由,而A-B B-C 正常采用對(duì)等網(wǎng)絡(luò)的方式完成基礎(chǔ)網(wǎng)絡(luò)配置,這樣就可以胯多個(gè)機(jī)房進(jìn)行通信,由于是物理網(wǎng)絡(luò)傳輸,機(jī)房間的耗時(shí)不會(huì)有很大差別(30ms內(nèi))。
由于網(wǎng)絡(luò)細(xì)節(jié)的篇幅較多,我們不做詳細(xì)的贅述,這里我們看看跨地域同步的網(wǎng)絡(luò)架構(gòu)(如下圖所示)。

注:圖中網(wǎng)段可以根據(jù)不同場(chǎng)景做劃分,這里只做簡(jiǎn)單介紹。
6.4數(shù)據(jù)災(zāi)備能力、時(shí)效性提升
數(shù)據(jù)災(zāi)備:我們一般選擇離各個(gè)證券交易所就近的一個(gè)接入點(diǎn),比如上證選擇在上海機(jī)房接入,深證選擇在廣州接入,納斯達(dá)克在香港接入,每個(gè)接入點(diǎn)配置2條專線用做物理鏈路的主備,同時(shí)擴(kuò)展一條互聯(lián)網(wǎng)通路(注意這里的互聯(lián)網(wǎng)也是直接和交易所對(duì)接,已經(jīng)不是傳統(tǒng)數(shù)據(jù)引入渠道)做次備,鏈路默認(rèn)都是活躍狀態(tài),有專們的物理設(shè)備會(huì)根據(jù)專線的健康狀況(自定義邏輯)自動(dòng)切換。
最后,再根據(jù)上面提到的跨地域同步的原理,在云機(jī)房關(guān)聯(lián)各條物理鏈路,在每條物理鏈路上抽象出獨(dú)立的VPC,通過(guò)構(gòu)建網(wǎng)絡(luò)拓?fù)鋵?shí)現(xiàn)跨機(jī)房數(shù)據(jù)復(fù)制及災(zāi)備。
時(shí)效性:物理專線(光纜)接入方式天然的優(yōu)勢(shì)就是數(shù)據(jù)"即發(fā)即達(dá)",因?yàn)樵诠潭◣拑?nèi)基本不存在網(wǎng)絡(luò)爭(zhēng)用,而且現(xiàn)在大部分線路都會(huì)配置中繼,其損耗帶來(lái)的影響相對(duì)可控,因此接入方式就決定了數(shù)據(jù)傳輸?shù)臅r(shí)效性。
相比傳統(tǒng)互聯(lián)網(wǎng)接入方式,單從數(shù)據(jù)上來(lái)看,專線接入SLA超過(guò)5個(gè)9(互聯(lián)網(wǎng)接入2個(gè)9),當(dāng)然也會(huì)配置上重傳機(jī)制來(lái)進(jìn)一步提升數(shù)據(jù)到達(dá)的可靠性。
交易所下發(fā)數(shù)據(jù)的數(shù)據(jù)頻率按市場(chǎng)劃分,A股一般3s/筆,港美股沒(méi)有特殊限制,即有成交即下發(fā),除去光損耗帶來(lái)的影響,最快可以到3ms/筆,由于頻率越高,對(duì)機(jī)器要求也越高,為此我們特殊做了一些限頻操作,整體的數(shù)據(jù)時(shí)效性基本會(huì)在60ms(99.99+分位)內(nèi)。
7、核心難點(diǎn)3
7.1概述
集群管理&單地域、跨地域流量調(diào)度。
流量調(diào)度生效在應(yīng)用層,主要是找到一種高效的調(diào)度/負(fù)載方式來(lái)對(duì)內(nèi)/外的業(yè)務(wù)提供數(shù)據(jù)支撐,從協(xié)議上/應(yīng)用場(chǎng)景劃分主要有TCP/HTTP,策略上因業(yè)務(wù)而異,主要還是基于對(duì)流量分配中權(quán)重的定義。
比如有基于RS健康檢查的分配,每隔一段時(shí)間探測(cè)一下下游集群的健康狀況來(lái)動(dòng)態(tài)調(diào)整流量配比,也可以根據(jù)下游機(jī)器的連接數(shù)來(lái)分配,還可以基于對(duì)資源訪問(wèn)的熱度來(lái)分配,區(qū)分單地域和跨地域場(chǎng)景如下面所述。
7.2單地域場(chǎng)景
現(xiàn)在各個(gè)云廠商都有相應(yīng)的流量調(diào)度產(chǎn)品支撐,比如百度云上有BLB(Baidu Load Balance),可以很輕松構(gòu)建一個(gè)調(diào)度規(guī)則出來(lái),在BLB下可以設(shè)置調(diào)度集群的協(xié)議(TCP/HTTP),然后關(guān)聯(lián)對(duì)應(yīng)的服務(wù)器集群,最后給不同的服務(wù)器集群配置權(quán)重策略。
當(dāng)流量進(jìn)來(lái)時(shí),BLB會(huì)幫我們完成自動(dòng)分配,在某一個(gè)集群出現(xiàn)問(wèn)題時(shí),可以手動(dòng)調(diào)整集群權(quán)重來(lái)干預(yù)流量配比,即所謂的切流。
7.3多地域場(chǎng)景
多個(gè)機(jī)房間的流量調(diào)度策略是在云上一般是隔離開(kāi)的,當(dāng)然我們可以在多個(gè)機(jī)房的最上層再抽象出一個(gè)專門的調(diào)度集群,對(duì)外暴露一個(gè)VIP。
在這個(gè)VIP上配置多個(gè)地域之間的調(diào)度關(guān)系,互聯(lián)網(wǎng)公司基本上也都是這么做的,更多的是針對(duì)超大集群規(guī)模的場(chǎng)景,而且VIP的選取也是有條件/成本的。
但如果想低成本快速在云上創(chuàng)建一個(gè)能支持多地域同時(shí)訪問(wèn)且具備自動(dòng)化流量調(diào)度的應(yīng)用,且云上又不支持多地域共享VIP的功能時(shí),我們可以盡可能多的基于云上已有的功能自己完成,在每個(gè)機(jī)房?jī)?nèi)部單獨(dú)抽出一個(gè)類似nginx的集群,每個(gè)集群上維護(hù)著不同于本地域的調(diào)度關(guān)系,它們的下游就是不同于本機(jī)房的BLB,同時(shí)互相檢查對(duì)方的健康狀況并上報(bào)監(jiān)控系統(tǒng),這樣當(dāng)出現(xiàn)異常時(shí),除了能針對(duì)性的在本機(jī)房?jī)?nèi)完成BLB級(jí)的流量調(diào)度,還能做到多機(jī)房間的流量切換,以提升機(jī)房間的災(zāi)備能力。當(dāng)然,也需要有足夠的容量。

8、總體設(shè)計(jì)
上圖各個(gè)模塊的作用如下(各模塊均采用多路復(fù)用):
1)源數(shù)據(jù)接入集群:適配2種方式(互聯(lián)網(wǎng)/物理專線)+各類協(xié)議(互聯(lián)網(wǎng)、單播、組播)的數(shù)據(jù)源接入;
2)源數(shù)據(jù)轉(zhuǎn)發(fā)集群:確保各機(jī)房源數(shù)據(jù)的一致性,降低由于業(yè)務(wù)服務(wù)本身帶來(lái)的數(shù)據(jù)不一致問(wèn)題;
3)數(shù)據(jù)解析集群:公共模塊,主要是針對(duì)源數(shù)據(jù)進(jìn)行統(tǒng)一的處理,以便轉(zhuǎn)發(fā)給下游各業(yè)務(wù);
4)業(yè)務(wù)數(shù)據(jù)集群(實(shí)時(shí)/延時(shí)流):負(fù)責(zé)將數(shù)據(jù)解析集群下發(fā)的內(nèi)容轉(zhuǎn)換成業(yè)務(wù)詳細(xì)數(shù)據(jù),也就是B端或C端用戶看到的數(shù)據(jù);
5)網(wǎng)關(guān)集群:負(fù)責(zé)承載用戶訪問(wèn)流量;
6)監(jiān)控集群:負(fù)責(zé)收集各個(gè)集群上報(bào)的日志情況,并作為穩(wěn)定性管理手段之一。
可以看到:機(jī)房B相比其他機(jī)房,少了接入層配置,這主是基于成本和性能上考慮,把機(jī)房B當(dāng)做數(shù)據(jù)傳輸樞紐,不僅能保證本機(jī)房數(shù)據(jù)傳輸,也能支持跨機(jī)房的數(shù)據(jù)同步&復(fù)制。該分布式傳輸系統(tǒng)從數(shù)據(jù)接入到監(jiān)控集群,整體機(jī)器規(guī)模不大(100左右),但可支撐超過(guò)10億的流量。
9、本文小結(jié)
一個(gè)良好的產(chǎn)品體驗(yàn)及產(chǎn)品矩陣,其背后一定離不開(kāi)一個(gè)高可用、高時(shí)效的數(shù)據(jù)支撐,尤其是在金融領(lǐng)域,用戶只可能會(huì)為一手的信息、完善的產(chǎn)品功能買單。
自21年完成數(shù)據(jù)通路建設(shè)以來(lái),金融的穩(wěn)定性和業(yè)務(wù)規(guī)模都有了質(zhì)的飛躍,證券數(shù)據(jù)時(shí)效性問(wèn)題從季度數(shù)十個(gè)降低到年度1個(gè)以內(nèi),99分位耗時(shí)更是從過(guò)去的分鐘級(jí)降低到60ms以內(nèi),數(shù)據(jù)SLA從2個(gè)9左右提升至5個(gè)9以上,產(chǎn)品覆蓋股票、外匯、基金、期貨等諸多領(lǐng)域,也是第一個(gè)在搜索領(lǐng)域支持行情長(zhǎng)連接的業(yè)務(wù),基于搜索生態(tài)也孵化出來(lái)了像百度股市通PC站、app等多個(gè)獨(dú)立端產(chǎn)品,目前正在結(jié)合AI能力進(jìn)行持續(xù)優(yōu)化,期望從完善用戶體驗(yàn)->幫助用戶決策進(jìn)階,也讓金融投資變得更智能,更簡(jiǎn)單。
本文主要結(jié)合一個(gè)金融數(shù)據(jù)接入案例對(duì)分布式數(shù)據(jù)傳輸系統(tǒng)做了一個(gè)簡(jiǎn)單的介紹,包括傳輸系統(tǒng)中的一些核心節(jié)點(diǎn)的設(shè)計(jì),如數(shù)據(jù)接入層的多協(xié)議適配、數(shù)據(jù)的分層管理以及跨地域的數(shù)據(jù)同步對(duì)應(yīng)的網(wǎng)絡(luò)拓?fù)涞龋ㄟ^(guò)實(shí)驗(yàn)得出結(jié)論,該方案能很好的應(yīng)用在各種規(guī)模的分布式數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)中。當(dāng)然,由于篇幅問(wèn)題,也省略了很多實(shí)現(xiàn)上的細(xì)節(jié),讀者有任何問(wèn)題可以留言,可以一起探討,也會(huì)盡量答復(fù)。
10、相關(guān)文章
[1] 技術(shù)掃盲:新一代基于UDP的低延時(shí)網(wǎng)絡(luò)傳輸層協(xié)議——QUIC詳解
[2] 以網(wǎng)游服務(wù)端的網(wǎng)絡(luò)接入層設(shè)計(jì)為例,理解實(shí)時(shí)通信的技術(shù)挑戰(zhàn)
[3] 知乎千萬(wàn)級(jí)并發(fā)的高性能長(zhǎng)連接網(wǎng)關(guān)技術(shù)實(shí)踐
[4] 手淘億級(jí)移動(dòng)端接入層網(wǎng)關(guān)的技術(shù)演進(jìn)之路
[5] 喜馬拉雅自研億級(jí)API網(wǎng)關(guān)技術(shù)實(shí)踐
[6] 石墨文檔單機(jī)50萬(wàn)WebSocket長(zhǎng)連接架構(gòu)實(shí)踐
[7] 小米小愛(ài)單機(jī)120萬(wàn)長(zhǎng)連接接入層的架構(gòu)演進(jìn)
[8] B站基于微服務(wù)的API網(wǎng)關(guān)從0到1的演進(jìn)之路
[9] 百度統(tǒng)一socket長(zhǎng)連接組件從0到1的技術(shù)實(shí)踐
[10] 淘寶移動(dòng)端統(tǒng)一網(wǎng)絡(luò)庫(kù)的架構(gòu)演進(jìn)和弱網(wǎng)優(yōu)化技術(shù)實(shí)踐
11、其它百度技術(shù)分享
《百度APP移動(dòng)端網(wǎng)絡(luò)深度優(yōu)化實(shí)踐分享(一):DNS優(yōu)化篇》
《百度APP移動(dòng)端網(wǎng)絡(luò)深度優(yōu)化實(shí)踐分享(二):網(wǎng)絡(luò)連接優(yōu)化篇》
《百度APP移動(dòng)端網(wǎng)絡(luò)深度優(yōu)化實(shí)踐分享(三):移動(dòng)端弱網(wǎng)優(yōu)化篇》
《全面了解移動(dòng)端DNS域名劫持等雜癥:原理、根源、HttpDNS解決方案等》
《深入了解百度開(kāi)源的分布式RPC框架brpc的方方面面》
《直播系統(tǒng)聊天技術(shù)(四):百度直播的海量用戶實(shí)時(shí)消息系統(tǒng)架構(gòu)演進(jìn)實(shí)踐》
《IM消息ID技術(shù)專題(五):開(kāi)源分布式ID生成器UidGenerator的技術(shù)實(shí)現(xiàn)》
《百度統(tǒng)一socket長(zhǎng)連接組件從0到1的技術(shù)實(shí)踐》
《百度網(wǎng)盤千萬(wàn)節(jié)點(diǎn)的P2P架構(gòu)設(shè)計(jì)(PPT) [附件下載]》
《即時(shí)通訊音視頻開(kāi)發(fā)(二十):一文讀懂視頻的顏色模型轉(zhuǎn)換和色域轉(zhuǎn)換》
《揭秘百度IM消息中臺(tái)的全量用戶消息推送技術(shù)改造實(shí)踐》
《百度基于金融場(chǎng)景構(gòu)建高實(shí)時(shí)、高可用的分布式數(shù)據(jù)傳輸系統(tǒng)的技術(shù)實(shí)踐》
(本文已同步發(fā)布于:http://www.52im.net/thread-4602-1-1.html)