1. 程式人生 > >構建證券行情分析系統——伺服器開發

構建證券行情分析系統——伺服器開發

由於不同證券交易所的行情介面可能不一樣,所以接入不同交易所的行情,需要不同的源程式。這裡討論源程式的共性和技術上以及運維上的要求。

一、源程式

1、共性

一般源程式主要流程是

1)、初始化時讀取配置,完成市場資訊、碼錶、快照資料初始化;

2)、按照交易所的介面,接入行情資料,落盤儲存方便覆盤,並轉換成標準格式,推送資料給下一級;

3)、收盤處理。

2、技術以運維

1)、由於市場環境是多變的,交易所會不時的增加新的證券商品和分類,所以作為源程式要適應這種變化,最好在初始化市場資訊、碼錶的時候使用指令碼語言實現。這樣

後期運維時只需要修改指令碼,而不用升級源程式。我之前寫的接入中金所的行情源程式基本上就是使用lua指令碼實現的,這樣中金所每次新增合約、新增期權、調整交易時間、新增外匯分類等,我都不用修改程式,運維人員只需收盤後替換下指令碼即可,源程式會在初始化時呼叫新的指令碼程式,生成符合要求的市場資訊、碼錶等資料。

2)、證券行情資料對速度是非常苛刻的,所以速度上的要求源要以最快的速度把資料收下來,因此源程式不應該有複雜的邏輯,並且應該將接收資料和處理資料部分分在不同執行緒處理。

3)、在源程式初始化的時候,先斷開所有下級連線,不要對下級提供服務,下級的任何連線和請求都應該遮蔽,因為這個過程中,源無法保證提供完整有效的資料,所以源要保證必須在初始化成功後,才能對下級提供服務。

4)、源程式在收盤後依然要提供完整的服務。

5)、停牌休市的記錄,比如交易所節假日資訊,最好由源提供,這樣保證從源開始的資料的一致性。

二、傳輸程式

1、共性

一般傳輸程式流程是

1)、初始化是讀取配置,接入源,並請求市場資訊、碼錶、節假日資訊等資料,完成初始化

2)、收到源資料,向下級推送

2、技術以運維

1)、傳輸應該只需配置源的IP:Port。

2)、傳輸的初始化,就是第一次開啟以及每次源斷開和傳輸的連線,傳輸都要重新初始化,先斷開下級連線,並連線源,如果連不上就一直重試,初始化過程中也不對下級提供服務。

3)、傳輸不改變源傳來的任何資料,就跟它的名字一樣,就是一個傳輸功能,所以傳輸應該是非常簡單高效的程式。

三、轉碼程式

1、共性

一般轉碼程式流程是

1)、初始化是讀取配置,接入上一級,並請求市場資訊、碼錶、節假日資訊等資料,完成初始化

2)、收到上級資料,分析處理成分時資料、歷史資料、快照資料、明細資料,並向下一級推送

3)、儲存和載入分時資料、歷史資料(分鐘資料、日線資料等)、快照資料、明細資料

4)、收盤

2、技術以運維

1)、轉碼程式應該支援不連上一級,直接從本地儲存的資料初始化,這樣方便直接使用轉碼程式覆盤。

2)、轉碼程式的初始化,就是第一次開啟以及每次上一級斷開和轉碼程式的連線,轉碼程式都要重新初始化,先斷開下級連線,並連線上一級,獲取市場資訊、碼錶、節假日資訊等資料,如果連不上就一直重試,初始化過程中也不對下級提供服務。

3)、對於從本地初始化的,不需要一定要連上上一級,直接從本地快照初始化好資料。

4)、轉碼程式需要儲存所有基礎資料,並保證資料的完整性一致性,這些資料可以直接給證券行情分析客戶端程式使用。

四、小結

上面列舉的服務端程式,是最基本的伺服器程式,為了以後伺服器的可擴充套件性,以上程式全都支援級聯。比如源可以級聯二級源,傳輸可以級聯二級傳輸,轉碼可以級聯轉碼CACHE

源:保證完整的儲存交易所下發的資料。

傳輸:完整的傳輸源傳過來的資料,傳輸快取任何資料。

轉碼:轉換源的資料為標準格式資料,並保證完整性和一致性,有分時資料、歷史資料、快照資料、明細資料等。

五、伺服器均衡

證券行情分析系統,最重要的指標就是資料的準確性和及時性,所以對於伺服器的要求比較高,而一臺伺服器服務的客戶數肯定有限。

面對大量使用者海量資料的情況下,我們使用了源的級聯,傳輸的級聯,轉碼的級聯,來分流使用者和資料。多級能夠分流伺服器壓力,但是會增加延遲,為了保證及時性,我們的源、傳輸、轉碼,分別明確了各自的功能。源只負責收交易所資料,不做其他事情,這樣源基本上收到資料能夠立馬把資料傳輸下去,傳輸收到資料立馬向下傳輸資料,轉碼收到資料加工儲存(可能會消耗一點時間,這種資料加工是無論用什麼方法都避免不了的),所以除了轉碼會耗時,其他的時間消耗就是網路時間了。

所以通過以上步驟,我們基本上已經實現了一個高效均衡系統,並且可擴充套件性也是非常好的。

六、維護

任何伺服器系統開發完成後,大量的工作就是部署維護了,為了方便的部署維護,我們需要做一下事情

1、基本資料在源頭配置,通過源頭下發,這樣可以做到一處配置,各處共享

2、下一級的執行,依賴上一級的執行,這樣可以追本溯源。

3、執行時的日誌記錄,每一級程式都應該有對應的日誌記錄,記錄初始化、執行中、收盤等資訊,記錄出錯資訊,最好能做到通過出錯記錄能夠反推匯出出問題的點。

4、執行是的實時監控,需要有一個實時監控平臺,通過平臺可以隨時檢視各級程式的執行狀態,並控制各級程式的重入、修改配置等,比如: