日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

李伟山:金融撮合架构

發(fā)布時(shí)間:2025/3/16 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 李伟山:金融撮合架构 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

李偉山

《架構(gòu)寶典》聯(lián)合作者

讀完需要

10

分鐘

速讀僅需 4 分鐘

李偉山,某司 CTO,曾負(fù)責(zé)電商平臺(tái)、活動(dòng)營銷平臺(tái)的架構(gòu)設(shè)計(jì)研發(fā)工作,開發(fā)設(shè)計(jì)了一款云同步社交平臺(tái)——號(hào)簿管家。曾參與設(shè)計(jì)開發(fā)億萬級(jí)流量的阿里虛擬業(yè)務(wù)平臺(tái)——話費(fèi)充值、網(wǎng)游聯(lián)運(yùn)平臺(tái)。在分布式系統(tǒng)架構(gòu)設(shè)計(jì)、高并發(fā)系統(tǒng)設(shè)計(jì)、 系統(tǒng)穩(wěn)定性保障等領(lǐng)域積累了豐富的實(shí)踐經(jīng)驗(yàn),對(duì)基于 HTTP 協(xié)議的 SOA 架構(gòu)有深入研究,在排查解決線上問題和故障方面有豐富的實(shí)踐經(jīng)驗(yàn),擅于利用數(shù)據(jù)分析解決實(shí)際問題。對(duì)新技術(shù)有濃厚的興趣,并樂于分享。中生代技術(shù)、技術(shù)瑣話坐館老司機(jī);

1

? ?

概述

隨著信息技術(shù)的日新月異和金融業(yè)務(wù)的快速發(fā)展,金融交易領(lǐng)域?qū)τ诤诵募夹g(shù)的需求也在不斷增強(qiáng),國內(nèi)外金融交易模式已經(jīng)從傳統(tǒng)人工叫價(jià)的方式變成了由高度電子化交易系統(tǒng)撮合訂單的方式。傳統(tǒng)的金融交易主要發(fā)生在有型金融市場(chǎng)中,金融交易的買賣雙方通過叫價(jià)進(jìn)行價(jià)格協(xié)商等方式最終達(dá)成一致,從而形成一筆交易,同時(shí)按照交易訂單到指定的交割地點(diǎn)進(jìn)行實(shí)物交割。傳統(tǒng)的金融交易的整個(gè)過程主要依靠人來執(zhí)行,其缺點(diǎn)主要有效率低、速度慢、交易時(shí)間限制大、交易空間限制大、交易成本非常髙、容易有內(nèi)幕交易、交易擴(kuò)展性差、交易容易出錯(cuò)、資金安全性差等一系列缺點(diǎn)。

通過了解熟悉電子交易市場(chǎng)中訂單的下單流程、交易所的訂單處理機(jī)制及從訂單下達(dá)到交易所形成交易價(jià)格的過程,深入了解交易所撮合訂單的方式與機(jī)制,從而總結(jié)出交易撮合系統(tǒng)的需求,對(duì)系統(tǒng)進(jìn)行分析建模并設(shè)計(jì)系統(tǒng)架構(gòu),根據(jù)真實(shí)市場(chǎng)機(jī)制采用多層分布式體系和內(nèi)存撮合的數(shù)據(jù)存儲(chǔ)模式,構(gòu)建出一個(gè)較為完善的交易撮合系統(tǒng)。

2

? ?

系統(tǒng)總體設(shè)計(jì)

2.1

? ?

系統(tǒng)核心模塊

交易撮合系統(tǒng)中包括以下幾個(gè)核心模塊。

  • 交易層: 用戶最終可以通過終端進(jìn)行撮合委托、委托查詢、出入金等操作。

  • 接口層: 將用戶的商品查詢、下單等請(qǐng)求派發(fā)給業(yè)務(wù)層,并把交易詳情反饋給交易層。

  • 業(yè)務(wù)層: 交易系統(tǒng)中的核心部分,用于接收訂單,根據(jù)業(yè)務(wù)邏輯實(shí)現(xiàn)訂單撮合,同時(shí)生成交易記錄,隨后給予用戶交易結(jié)果反饋。

  • 數(shù)據(jù)層: 用來存儲(chǔ)商品信息、交易信息、資金信息、用戶信息,并實(shí)現(xiàn)數(shù)據(jù)持久化,

  • 同時(shí)對(duì)交易詳情按行進(jìn)行緩存,以減輕數(shù)據(jù)庫的壓力。此外,根據(jù)不同類型的金融交易產(chǎn)品將撮合模塊劃分為若干業(yè)務(wù)分區(qū),每個(gè)分區(qū)獨(dú)立進(jìn)行撮合,彼此不受影響。對(duì)于單個(gè)業(yè)務(wù)分區(qū)而言,撮合系統(tǒng)的整體架構(gòu)設(shè)計(jì)如圖 15.1 所示。本章的總體設(shè)計(jì)圍繞業(yè)務(wù)層(撮合引擎層),以及撮合引擎與接口層(網(wǎng)關(guān)層)、數(shù)據(jù)層(數(shù)據(jù)庫)的交互方式進(jìn)行。

    2.2

    ? ?

    撮合算法設(shè)計(jì)

    如圖 15.2 所示,撮合引擎的核心業(yè)務(wù)模塊就是交易撮合算法,其可以對(duì)客戶訂單進(jìn)行公平合理的排列和撮合,但是我們需要保證撮合算法的公平性、高效性及高擴(kuò)展性等。由于不同金融交易系統(tǒng)的撮合業(yè)務(wù)各有不同,因此本節(jié)僅對(duì)通用的交易撮合算法進(jìn)行概括性描述。

    訂單隊(duì)列

    交易撮合的重要組成部分就是買賣訂單,通過對(duì)買賣訂單進(jìn)行撮合,最后形成交易記錄,所以對(duì)無法立刻完成撮合的訂單需要有買入隊(duì)列和賣出隊(duì)列來保存訂單。隊(duì)列按照“價(jià)格優(yōu)先,同價(jià)格下時(shí)間優(yōu)先”的原則排序。買入隊(duì)列按照委托價(jià)格由高到低的順序排列, 賣出隊(duì)列則按照委托價(jià)格由低到高的順序排列,如圖 15.3 所示。

    交易委托有如下四種情況。

    一. 新進(jìn)的訂單是買入市價(jià)委托: 如果賣出隊(duì)列中有市價(jià)委托,則對(duì)它們進(jìn)行撮合;如果將賣出隊(duì)列中的市價(jià)委托全部進(jìn)行撮合后,該買入市價(jià)委托還有可交易數(shù)量,則將買入市價(jià)委托和賣出隊(duì)列中的限價(jià)委托進(jìn)行撮合。如果賣出隊(duì)列中沒有市價(jià)委托,則直接將買入市價(jià)委托和賣出隊(duì)列中的限價(jià)委托進(jìn)行撮合。如果賣出隊(duì)列為空, 則只將該買入市價(jià)委托插入買入隊(duì)列。

    二. 新進(jìn)的訂單是買入限價(jià)委托: 如果賣出隊(duì)列中有市價(jià)委托,則先對(duì)它們進(jìn)行撮合; 如果市價(jià)委托全部撮合完畢后,該買入限價(jià)委托還存在可交易數(shù)量且價(jià)格大于等于賣出隊(duì)列中限價(jià)委托的最低價(jià)格,則繼續(xù)跟限價(jià)委托撮合。如果賣出隊(duì)列中只有限價(jià)委托且該買入委托的價(jià)格大于等于賣出隊(duì)列中的最低價(jià)格,則對(duì)它們進(jìn)行撮合, 否則只能將該買入委托按照撮合原則插入買入隊(duì)列。如果賣出隊(duì)列為空,則直接將該買入限價(jià)委托按照撮合原則插入買入隊(duì)列。

    三. 新進(jìn)的訂單是賣出市價(jià)委托: 如果買入隊(duì)列中有市價(jià)委托,則先對(duì)它們進(jìn)行撮合; 如果撮合后該賣出隊(duì)列還有未成交量,則和買入隊(duì)列中限價(jià)委托撮合。如果買入隊(duì)列中僅有限價(jià)委托,則和限價(jià)委托撮合。如果買入隊(duì)列為空,則將該賣出市價(jià)委托插入賣出隊(duì)列中。

    四. 新進(jìn)的訂單是賣出限價(jià)委托: 如果買入隊(duì)列中有市價(jià)委托,則先對(duì)它們進(jìn)行撮合; 如果將市價(jià)委托全部撮合完畢后,該賣出限價(jià)委托還存在可交易數(shù)量且價(jià)格小于等于買入隊(duì)列中的最高價(jià)格,則繼續(xù)跟限價(jià)委托撮合。如果買入隊(duì)列中只有限價(jià)委托 且該賣出限價(jià)委托的價(jià)格小于等于買入隊(duì)列中的最高價(jià)格,則將其進(jìn)行撮合,否則只能將該賣出限價(jià)委托按照撮合原則插入賣出隊(duì)列。如果買入隊(duì)列為空,則直接將該賣出限價(jià)委托按照撮合原則插入賣出隊(duì)列。

    撮合順序

    撮合引擎接收到新的買入訂單,則會(huì)到賣出隊(duì)列的頭部查找是否存在符合價(jià)格規(guī)則的賣出訂單,如果存在賣出價(jià)格小于或等于買入價(jià)格的訂單,則從隊(duì)列中取出此訂單并撮合成一筆交易;如果賣出隊(duì)列為空或隊(duì)列頭部不滿足價(jià)格關(guān)系,則將買入訂單插入買入隊(duì)列中,由于買入隊(duì)列是按照價(jià)格與時(shí)間進(jìn)行排序的,所以新插入的訂單會(huì)經(jīng)過一次排序再插入買入隊(duì)列。

    相同地,當(dāng)撮合引擎接收到新的賣出訂單時(shí),會(huì)到買入隊(duì)列的頭部查找是否存在符合價(jià)格規(guī)則的買入訂單,如果存在買入價(jià)格大于或等于賣出價(jià)格的訂單,則從訂單隊(duì)列中取出此訂單并撮合成一筆交易; 如果買入隊(duì)列為空或隊(duì)列頭部不滿足價(jià)格關(guān)系,則將賣出訂單插入賣出隊(duì)列中,由于賣出隊(duì)列也是按照價(jià)格與時(shí)間進(jìn)行排序的,所以新插入的訂單會(huì)經(jīng)過一次排序再插入賣出隊(duì)列。結(jié)合買賣訂單情況,撮合算法的流程如圖 15.4 所示。從圖 15.4 所示的撮合順序可知,買賣隊(duì)列的有序性是保證撮合順序的基礎(chǔ),并且撮合過程中的每筆訂單都可以撮合出當(dāng)前最優(yōu)交易。

    2.3

    ? ?

    基于內(nèi)存撮合

    當(dāng)前的數(shù)據(jù)庫撮合技術(shù)性能低下的原因在于與數(shù)據(jù)庫交互過多,使得 I/O 操作很多,系統(tǒng)整體處理速度受數(shù)據(jù)庫事務(wù)邏輯約束。

    這里釆用內(nèi)存撮合技術(shù),通過最大限度地去除與數(shù)據(jù)庫的交互(如圖 15.5 所示),將整個(gè)撮合邏輯放在內(nèi)存中進(jìn)行,因此比數(shù)據(jù)庫撮合技術(shù)少了許多 I/O 操作,在性能上可以大幅提升撮合速度; 內(nèi)存撮合的弊端就是在由于內(nèi)存的易失性而使服務(wù)器出現(xiàn)故障停機(jī)時(shí),所有的交易數(shù)據(jù)將會(huì)丟失,系統(tǒng)的可靠性及一致性都會(huì)相應(yīng)降低。因此,本章在提高內(nèi)存撮合技術(shù)可靠性方面采用了多機(jī)熱備份及分布式一致性技術(shù)作為補(bǔ)充,從而獲得內(nèi)存撮合技術(shù)的高性能及數(shù)據(jù)庫撮合技術(shù)的數(shù)據(jù)持久性。

    2.4

    ? ?

    災(zāi)備的多機(jī)設(shè)計(jì)

    由于內(nèi)存撮合技術(shù)在撮合引擎出現(xiàn)異常時(shí)的可靠性和一致性非常差,而金融交易系統(tǒng)因?yàn)槠錁I(yè)務(wù)特性對(duì)服務(wù)中斷及數(shù)據(jù)丟失的容忍度非常低,所以為了提高容錯(cuò)性,一般多采用多機(jī)熱備份技術(shù)。采用多機(jī)熱備份技術(shù)將一組撮合引擎部署成互為備份的撮合引擎集群, 并在同一時(shí)間內(nèi)只讓一臺(tái)撮合引擎提供服務(wù),當(dāng)這臺(tái)撮合引擎出現(xiàn)故障無法繼續(xù)正常工作時(shí),撮合引擎集群便會(huì)迅速檢測(cè)到這個(gè)故障,并選舉出一個(gè)備份撮合引擎接管故障撮合引擎的任務(wù),從而保證整個(gè)撮合系統(tǒng)正常運(yùn)行。多機(jī)熱備份技術(shù)的本質(zhì)就是針對(duì)服務(wù)器臨時(shí)故障所做的一種備份技術(shù),本章采用多機(jī)熱備份技術(shù)來避免長(zhǎng)時(shí)間的撮合服務(wù)中斷,保證撮合系統(tǒng)長(zhǎng)期、可靠的服務(wù)。如圖 15.6 所示,通過用多臺(tái)撮合引擎做熱備份來保證在撮合引擎出現(xiàn)故障時(shí),在可以接受的時(shí)間內(nèi)完成主機(jī)和備份機(jī)之間的切換,由備份機(jī)提供無縫連續(xù)服務(wù)。

    通過釆用多機(jī)熱備份技術(shù),盡可能地避免了單一內(nèi)存撮合引擎發(fā)生故障時(shí)導(dǎo)致的系統(tǒng)不可用問題,但仍舊無法提供 100%的可用性,因?yàn)楫?dāng)大規(guī)模服務(wù)器集群發(fā)生故障時(shí)仍舊存在服務(wù)不可用的可能性,但在實(shí)際生產(chǎn)環(huán)境中,3 臺(tái)互為備份的服務(wù)器可以提供較高的、用于生產(chǎn)環(huán)境的可靠性。

    2.5

    ? ?

    狀態(tài)機(jī)復(fù)制

    由于內(nèi)存撮合技術(shù)在撮合引擎出現(xiàn)異常時(shí)的可靠性和一致性非常差,而金融交易系統(tǒng)因?yàn)槠錁I(yè)務(wù)特性對(duì)服務(wù)中斷及數(shù)據(jù)丟失的容忍度非常低,所以為了提高容錯(cuò)性,一般多采用多機(jī)熱備份技術(shù)。采用多機(jī)熱備份技術(shù)將一組撮合引擎部署成互為備份的撮合引擎集群, 并在同一時(shí)間內(nèi)只讓一臺(tái)撮合引擎提供服務(wù),當(dāng)這臺(tái)撮合引擎出現(xiàn)故障無法繼續(xù)正常工作時(shí),撮合引擎集群便會(huì)迅速檢測(cè)到這個(gè)故障,并選舉出一個(gè)備份撮合引擎接管故障撮合引擎的任務(wù),從而保證整個(gè)撮合系統(tǒng)正常運(yùn)行。多機(jī)熱備份技術(shù)的本質(zhì)就是針對(duì)服務(wù)器臨時(shí)故障所做的一種備份技術(shù),本章采用多機(jī)熱備份技術(shù)來避免長(zhǎng)時(shí)間的撮合服務(wù)中斷,保證撮合系統(tǒng)長(zhǎng)期、可靠的服務(wù)。如圖 15.6 所示,通過用多臺(tái)撮合引擎做熱備份來保證在撮合引擎出現(xiàn)故障時(shí),在可以接受的時(shí)間內(nèi)完成主機(jī)和備份機(jī)之間的切換,由備份機(jī)提供無縫連續(xù)服務(wù)。

    通過釆用多機(jī)熱備份技術(shù),盡可能地避免了單一內(nèi)存撮合引擎發(fā)生故障時(shí)導(dǎo)致的系統(tǒng)不可用問題,但仍舊無法提供 100%的可用性,因?yàn)楫?dāng)大規(guī)模服務(wù)器集群發(fā)生故障時(shí)仍舊存在服務(wù)不可用的可能性,但在實(shí)際生產(chǎn)環(huán)境中,3 臺(tái)互為備份的服務(wù)器可以提供較高的、 用于生產(chǎn)環(huán)境的可靠性。

    2.6

    ? ?

    狀態(tài)機(jī)復(fù)制

    由于多機(jī)熱備份技術(shù)引入了多臺(tái)互為熱備份的撮合引擎,因此根據(jù)撮合系統(tǒng)設(shè)計(jì)及撮合邏輯要求,需要保證服務(wù)器之間的數(shù)據(jù)一致,這就需要保證多服務(wù)器之間的一致性,這也是該系統(tǒng)的難點(diǎn)之一。

    在設(shè)計(jì)中使用一種內(nèi)存狀態(tài)機(jī)復(fù)制方案,即將撮合算法視作一個(gè)確定性狀態(tài)機(jī),將其復(fù)制多份并部署到撮合系統(tǒng)的多臺(tái)撮合引擎中。每個(gè)撮合引擎副本從相同的初始狀態(tài)開始運(yùn)行,當(dāng)撮合系統(tǒng)收到網(wǎng)關(guān)發(fā)來的訂單時(shí),系統(tǒng)中的每個(gè)撮合引擎都會(huì)撮合這個(gè)訂單,并依次產(chǎn)生交易記錄,同時(shí)更新確定性撮合算法狀態(tài)機(jī)的獨(dú)立狀態(tài)。通過這樣的方式,可以使每個(gè)撮合引擎副本在撮合系統(tǒng)正常運(yùn)轉(zhuǎn)時(shí)具有相同的結(jié)果狀態(tài),而在撮合系統(tǒng)出現(xiàn)故障或異常時(shí),撮合引擎就會(huì)出現(xiàn)狀態(tài)不一致的情況,換句話說,一旦撮合系統(tǒng)的結(jié)果或狀態(tài)出現(xiàn)了不一致的情況就可以斷定系統(tǒng)出現(xiàn)了異常。

    一. 關(guān)鍵技術(shù)點(diǎn)系統(tǒng)為了實(shí)現(xiàn)基于內(nèi)存狀態(tài)機(jī)復(fù)制的撮合系統(tǒng),總結(jié)出撮合系統(tǒng)中的幾個(gè)關(guān)鍵技術(shù)點(diǎn):

    • 將確定性撮合算法狀態(tài)機(jī)服務(wù)部署到多臺(tái)獨(dú)立撮合引擎中。

    • 接收網(wǎng)關(guān)訂單,并將其作為確定性撮合算法狀態(tài)機(jī)的輸入。

    • 根據(jù)撮合算法的需求,選擇一種訂單排序方式。

    • 每臺(tái)撮合引擎對(duì)按照排序方式排序過的訂單進(jìn)行撮合。

    • 將確定性撮合算法狀態(tài)機(jī)輸出的交易記錄作為給用戶或數(shù)據(jù)庫的響應(yīng)。

    • 監(jiān)控撮合引擎副本的狀態(tài)或輸出的差別。

    二. 具體實(shí)現(xiàn)為了實(shí)現(xiàn)基于內(nèi)存狀態(tài)機(jī)復(fù)制的撮合系統(tǒng),系統(tǒng)主要通過以下方案實(shí)現(xiàn)狀態(tài)機(jī)復(fù)制的關(guān)鍵技術(shù)點(diǎn):

    • 采用原子多播解決撮合引擎訂單的可靠多播與全局有序性。

    • 采用基于無鎖訂單隊(duì)列的流水線撮合技術(shù)提供快速的訂單撮合。

    • 采用異步一致性持久化技術(shù)實(shí)現(xiàn)與數(shù)據(jù)庫的交互。

    • 采用失效備援技術(shù)對(duì)撮合引擎集群進(jìn)行狀態(tài)監(jiān)控并保證系統(tǒng)的容錯(cuò)能力。

    • 采用進(jìn)度追趕技術(shù)解決撮合引擎的故障以及添加新的撮合引擎。

    三. 數(shù)據(jù)庫優(yōu)化撮合系統(tǒng)中對(duì)數(shù)據(jù)庫的查詢操作是很重要的一環(huán),查詢的性能對(duì)是否能夠擁有高效的撮合效率有很大影響。為此,對(duì)數(shù)據(jù)庫進(jìn)行查詢優(yōu)化必不可少。每個(gè)查詢都會(huì)有許多可供選擇的執(zhí)行策略和操作算法,查詢優(yōu)化就是選擇一個(gè)高效執(zhí)行的查詢處理策略。查詢的執(zhí)行開銷主要包括 I/O 開銷(磁盤存取塊數(shù))、CPU 開銷(處理機(jī)時(shí)間)、內(nèi)存開銷,其中 I/O 開銷是最主要的。為此,可以充分利用索引的方法來減少表掃描的 I/O 開銷,盡量避免表搜索的發(fā)生,例如可以在訂單表中對(duì) orderID 或 itemID 建立索引以提高查詢效率。利用好索引可以極大地提高數(shù)據(jù)庫的檢索性能,但是不能基于經(jīng)常修改的列建立索引,因?yàn)檫@樣只會(huì)增加系統(tǒng)搜索的開銷。而且由于撮合系統(tǒng)每秒鐘都需要處理大量的數(shù)據(jù),因此為了提高系統(tǒng)效率,可以盡量建立單索引提高查詢效率。(未完待續(xù))

    本文節(jié)選自中生代技術(shù)社區(qū)叢書之《架構(gòu)寶典》

    往期推薦

    美團(tuán)技術(shù):百億規(guī)模API網(wǎng)關(guān)服務(wù)Shepherd的設(shè)計(jì)與實(shí)現(xiàn)

    阿里巴巴為什么能抗住90秒100億?看完這篇你就明白了!

    八戒科技服務(wù)技術(shù)負(fù)責(zé)人鴻鵠真人:做好技術(shù)負(fù)責(zé)人的4個(gè)關(guān)鍵特質(zhì)

    彭榮新:喜馬拉雅自研網(wǎng)關(guān)架構(gòu)演進(jìn)過程

    Google和Facebook為什么不用Docker?

    追根溯源 - 數(shù)據(jù)中臺(tái)概念的起源


    新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

    總結(jié)

    以上是生活随笔為你收集整理的李伟山:金融撮合架构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。