本文作者為廣發證券首席架構師梁啟鴻,他講結合自己的經歷,分享他在在傳統券商環境引入與推動容器化技術的思考歷程,嘗試陳述為什么云計算對證券業甚至整個金融業重要,而容器化技術的出現又帶來何種契機。整個文章比較長,聊聊架構將拆分為多篇分時發送,如果你對這個話題感興趣,請根據文末指引掃碼入群交流。
廣發證券是一家本土的券商公司,于2014年Docker等容器技術尚未盛行之時開始投入容器化技術的研究,并于2015年開始大規模投入應用 - 成交量六百億(2015年)規模的金融電商平臺、消息推送日均數千萬條級別的社會化投顧問答平臺以及日均流經交易量峰值近五十億的交易總線均被容器化;投入生產的容器化云服務包括行情、資訊、消息推送、自選股、統一認證、實時事件處理等等。
2016年并開始基于Docker、Kubernetes、Rancher等技術研發運維機器人投顧(已投產)、極速交易系統、社會化CRM,構建容器化的混合云解決方案??赡苁菫閿挡欢喟讶萜骰夹g大規模用到“真金白銀”的金融業務中的案例。容器化技術幫助一家傳統券商在云計算領域“彎道超車”。
在此分享本人在這兩年里的在傳統券商環境引入與推動容器化技術的思考歷程,嘗試陳述為什么云計算對證券業甚至整個金融業重要、而容器化技術的出現又帶來何種契機。
歷史學家黃仁宇在其被認為是“大歷史觀”典范之作的《萬歷十五年》序言中提到兩個觀點,一是對一件歷史事件的評價,要把時間坐標推到三四百年的范圍,才能看清楚該事件的來龍去脈;另一是“可以數目字上管理”是區分社會現代化與非現代化的分水嶺。
借這個角度看,我們現在的技術發展,是物理世界不可逆轉的日益數字化虛擬化的過程 – 一切都為了更高效更“數目字可管理”,數字化進程也許可以追溯到電子計算機出現前并因技術革命而以指數級別加速推進,而云計算的出現,是這一進程里的關鍵事件之一,對于未來的IT系統技術與架構有著深遠的影響。
在此之前,我們以物理世界的硬件(服務器與網絡設備)承載著一個虛擬世界,這個物理載體很大程度上依然靠人肉運維(最多加上一些半自動化的工具,然而稱不上“智能”);在此之后,物理載體本身被數字化 – 虛擬機(Virtual Machine)、容器(Container)、軟件定義網絡(SDN),物理設施固然還在,但是它上面的軟件棧(stack)卻越來越關鍵。
數字世界像一個黑洞,它把一切線下的、非數字化的東西都席卷進來。連基礎設施(infrastructure)都數字化的IT系統 – 所謂Infrastructure As Code(基礎設施即代碼、可編程基礎設施),一旦結合大數據、機器學習,智能化、自動化的運維逐漸成為可能;一個因應突發事件而彈性自伸縮、自愈、自適應的軟件系統,“自己運維自己”的“無人值守”運維,相信到今天對于一部分IT人而言,并不是科幻電影。
開場白引用黃仁宇先生,乃因為個人深受其“大歷史觀”(macro history)之影響,傾向于認同事物在“歷史上長期的合理性”,這對于金融業這個受高度監管的行業有特別寓意。 目前金融業大部分機構,未能積極擁抱與利用云技術,原因之一恐怕是因為監管方面就“信息安全”尚有顧慮,原因之二是金融業相對傳統之IT,對云計算本身缺乏深刻認識。云計算是數字化進程里一個必然環節,被本身即已高度數字化的金融業以合理合規的方式采用是早晚的事情,“歷史潮流”是無法阻擋的。
而我們作為高性能交易系統、互聯網金融平臺之研發者,對于云計算、尤其是容器化技術,有著特別的觸覺。自從2013年Docker這種容器技術出現后,我們仿佛嗅到了些什么。在經過兩年的研究與投產應用后,我們反省采用云技術的動機,總結得益好處、落實手段、技術關鍵,以饗同好。
我們研究和應用云技術的動機,來源于對“黑天鵝”事件的應對。“黑天鵝”這一概念,是在美國學者、風險分析師、前量化交易員、前對沖基金經理塔勒布(Nassim Nicholas Taleb)的《黑天鵝》(The Black Swan – The impact of the highly improbable)一書發表后在全球被得以高度認知。在發現澳大利亞之前,17世紀之前的歐洲人認為天鵝都是白色的。但隨著第一只黑天鵝的出現,這個不可動搖的信念崩潰了。黑天鵝的存在寓意著不可預測的重大稀有事件,它在意料之外并且后果非常嚴重。
一個黑天鵝事件,具有這三個特點:(1)稀缺、通常史無前例(rarity),(2)影響很極端(extreme impact),(3)雖然它具有意外性,但人的本性促使我們在事后為它的發生找到理由 – “事后諸葛亮”,并且或多或少認為它是可解釋和可預測的(introspective)。IT系統、尤其是資本市場里的交易系統,所發生的各種重大問題,其實是很符合黑天鵝事件的特點的。
塔勒布用“感恩節的火雞”很形象的解釋了黑天鵝的概念 – 直到被宰掉成為感恩節火雞晚餐前的每一天,火雞都應該是活的很不錯的,它的一生里沒有任何過去的經驗供它預測到自己未來的結果,而后果是致命的。
一套復雜的IT系統,很有可能就是那只火雞,例如就個人近年所遭遇的類似事件最典型的兩次,一是與某機構對接的技術接口,據稱已經存在并穩定使用近10年 – 雖然技術古老但是從未出現問題,然而在過去兩年持續創新高的交易量壓力之下,問題終究以最無法想象到的方式出現并形成系統性風險(因為對接者不僅一兩家);另一,則是老舊的系統因對市場可交易股票數目作了假設(而從未被發現),某天新股上市數量超過一定值而導致部分交易功能無法正常進行。
這兩個例子都符合黑天鵝特征,一是“史無前例” (如果以前發生過,問題早就被處理了),二是可以“事后諸葛亮”(所有IT系統問題,最后不都可以歸結為“一個愚蠢的bug” ?因為開發時需求不清楚、因為開發者粗心、因為技術系統所處的生態環境已經發生變化導致原假設無效…),三是“后果嚴重”(如果技術系統本身是一個廣被采購的第三方的商業軟件,則整個行業都有受災可能;如果是自研發的技術,則最起碼對交易投資者造成災難性損失)。
事實上,資本市場乃至金融業整體,可能都是黑天鵝最愛光顧的地方。甚至連普羅大眾都聽過的例子諸如:2010年5月6日的Flash Crash – 在三十分鐘內道瓊斯指數狂瀉近千點、1987年10月19日的Black Monday、國內著名的“烏龍指”事件導致的市場劇動… 不一而足。
導致黑天鵝降臨的原因,事后分析五花八門,可能是量化交易導致的、可能是市場流動性不足引起的、也可能是市場心理(例如恐慌拋售)觸發的… 無論何者,IT系統幾乎都是最后被壓垮的那只駱駝。正如塔勒布文章中提到,高盛在2007年8月的某天突然經歷的為平常24倍的交易量,如果到了29倍,系統是否就已經坍塌了?
事實上,在這個日益數字化的世界,本身就高度數字化的證券市場,面臨的黑天鵝事件會越來越多,出于但不僅限于以下一些因素:
增長的交易規模。
更高頻、更復雜的交易算法(《高頻交易員》一書里指出,股票市場已經變成機器人之間的戰爭)。
更全球化更加波動 – 海內外政治經濟情況引起的突發變化。
更快速更先進的技術 – 已經出現數百納秒內完成交易處理的專門性硬件芯片,快到人類根本無法響應。
據一篇科技論文(Financial black swans driven by ultrafast machine ecology) 的數據,人類國際象棋大師對棋盤上局勢危機的判斷大概需要650毫秒,而日常人類活動中通常的反應起碼是秒級的;但是在一個高頻交易的世界里,一筆交易可能在極速硬件的支持下只需要萬分之幾毫秒完成。人類,已經無法輕易掌控自己的交易算法在極速之下帶來的問題、更無法了解自己的算法和他人的算法在交易市場上相互作用的集合帶來的后果、甚至無法預測突發性政治經濟事件對自身算法、技術、系統會觸發何種反應。
數字世界,尤其是金融業的數字世界,正好是塔勒布筆下所謂的”極端斯坦“(Extremistan),它完全不受物理世界的規律影響 – 一切極端皆有可能。例如在物理世界常識告訴我們,一個數百斤的超級胖子的體重加到1000人里面比重依然是可以忽略不計的;但在金融世界,一個比爾蓋茨級別的富豪的財產數字,富可敵國。
金融IT,正好生存在這么一個”極端斯坦“ – 這里復雜系統內部充滿難以察覺的相互依賴關系和非線性關系,這里概率分布、統計學的”預測“往往不再生效。塔勒布稱之為”第四象限“,我們,作為證券交易的IT,剛好在這個象限里謀生。
(塔勒布《黑天鵝》第四象限圖)
上述這一切,和云計算有什么關系呢? 我們覺得非常緊密,邏輯如下:
世界越來越數字化、更加“數目字可管理”- 一切效率更高。
本來就數字化的金融世界,日益是個“極端斯坦”,只能更快、更復雜,面臨更多黑天鵝事件。
應對數字世界的黑天鵝,只能用數字世界的手段(而不是“人肉”手工方法),就像《黑客帝國》,你必須進入Matrix,用其中的武器和手段,去解決里面的問題(并影響外面)。
云計算,不過是世界數字化進程里的一步 – 把承載數字世界的物理載體也進一步數字化,但是它剛好是我們應對數字黑天鵝的基本工具 – 運算資源本身也是“數目字可管理”,并且正因為如此而可以是自動的和智能的。
即便到了今天,相信很多企業、機構的機房里的運算資源,依然不是“數目字可管理” – 這本身真是一個諷刺。但直到云技術出現,才解決這個問題。結合云計算的技術,交易系統不再是“your grandmother‘s trading system”。
黑天鵝事件是不可預測的,但是并非不可應對?!逗谔禊Z》的作者塔勒布,在其另一本有巨大影響力的著作《反脆弱》(Anti-Fragile)里,提到了如何在不確定中獲益。這本閃爍著智慧之光的著作,早已超越了金融而進入到政治、經濟、宗教、社會學的思考范疇,對IT系統技術架構的設計,同樣具有啟發意義。想想,一個經常被黑天鵝事件光顧的交易系統,如果不僅沒有坍塌、還隨著每一次的考驗而技術上變的越來越周全和強壯,這對于任何開發工程師、運維工程師來說,是不是一個夢想成真?
實際上,這個過程對于任何IT工程師而言都是非常熟悉的,因為我們中很多人每天的工作,可能就是在不斷的以各種應急手段緊急救援不堪重負的生產系統、或者在線彌補技術缺陷,在這過程中我們發現一個又一個在開發和測試時沒有發現的問題、一次又一次推翻自己在開發時的各種假設、不斷解決所遭遇到的此前完全沒有想象過的場景。如果項目、系統活下來了,顯然它變得更加健壯強韌。
只不過,這一切是被動的、低效的、“人肉”的,而且視系統架構和技術而定,變強韌有時是相對容易的、有時則是不可能的 – 正如一艘結構設計有嚴重缺陷的船,打更多的補丁也總會遇到更大的浪把它打沉。
如果基于《反脆弱》的三元論,也許大部分IT系統大致上可以這么看:
脆弱類:絕大部分企業IT系統,依賴于大量技術假設與條件,不喜歡無序和不穩定環境,暴露于負面“黑天鵝”中。
強韌類:小部分大規模分布式系統(也許通常是互聯網應用),適應互聯網相對不可控的環境(如網絡延遲與穩定性、客戶端設備水平和瀏覽器版本、用戶量及并發請求變化),經受過海量用戶與服務請求的磨練,相對健壯。
反脆弱類:能捕捉到正面“黑天鵝”- 系統不僅在沖擊中存活,并且變的更加強韌,甚至在這過程中獲益。
這里所謂的“脆弱”,并不是指系統不可靠、單薄、技術不堪一擊,而是指這類系統厭惡變化、厭惡不穩定不可控環境、本身架設在基于各種穩定性假設前提的精巧設計上,無法對抗突如其來的、此前無法循證的事件(黑天鵝),更無法從中自適應和壯大。就這個角度看,證券行業甚至整個金融業里,大部分的系統可能都是脆弱系統。傳統IT系統有以下一些常見的技術特點,例如:
一切以關系型數據庫為中心(RDBMS-centric)。
很多歷史遺留系統(legacy system)有數以百計的表、數以千計的存儲過程。
業務邏輯高度依賴數據庫。
中間層與數據層高度緊耦合。
多層架構(multi-tiered architecture),層與層之間依賴于高度的約定假設(協議-protocol、接口- API、數據格式 – data format 等等),并且這些約定經常來不及同步(例如某個團隊改變了維護的接口而沒有通知其他團隊、或者數據庫的表結構改變了但是中間層的對象庫因為疏忽而沒有及時步調一致的重構),有些約定甚至只存在于協作的開發者腦海中而沒有形成文檔(即便形成文檔也經常因需求變化頻繁而無法及時更新)。
應用程序依賴于某些第三方的代碼庫,而這些代碼庫很有可能依賴于某個版本的操作系統及補丁包,并且這種依賴關系是傳遞的 – 例如某個第三方代碼庫依賴于另一個第三方代碼庫而該庫依賴于某個版本的操作系統…
系統設計,往往沒有考慮足夠的失敗場景(因此可能完全沒有容錯機制),沒有考慮例如不穩定網絡延遲對業務邏輯的影響(例如大部分企業系統都假設了一個穩定的LAN)。
組件、模塊、代碼庫、操作系統、應用程序、運維工具各版本之間具有各種線性、非線性依賴關系,形成一個巨大的復雜系統。
然而,以下這些變化是任何IT系統所不喜歡卻無法回避的,例如:
多層架構里,任何一個環節的約定獨立發生細微改變,必定導致系統出錯(只是嚴重性大小的差別),這幾乎無法很好的避免 – 研發團隊的素質不夠高、軟件工程的水平低、瞬息萬變的市場導致的頻繁更改等等,總是客觀存在。
因為安全原因,需要對操作系統進行打補丁或者升級,導致應用程序所依賴的代碼庫發生兼容性問題 – 在打補丁或升級后通過測試及時發現兼容問題已經算是幸運的,最怕是在生產環境運行過程中才觸發非線性關系的模塊中的隱患。
跨系統(尤其是不同團隊、部門、組織負責的系統)的調用協議與接口發生變化,是一個常態性的客觀事實。
互聯網環境、甚至企業內部的網絡環境,并不是一成不變的,網絡拓撲出于安全、合規隔離、性能優化而變化,可能導致延遲、吞吐等性能指標的變化,應用系統本來沒有出現的一些問題,有可能因為運行環境的變化而浮現,而系統內部容錯機制往往沒有考慮到這些問題。
業務需求永遠在變,以數據庫為中心的系統,不可避免產生表結構(schema)調整,系統升級需要做數據遷移,而這總是有風險的(例如data integrity需要保證萬無一失)。
于是,傳統IT對于這些系統的運維,最佳實踐往往不得不這樣:
在使用壓力增大的情況下,最安全的升級手段是停機、換機器、加CPU、加內存,直到硬件升級、垂直擴容(vertical scale、or scale-up)手段用光。
維護一個龐大的運維團隊,隨時救火。
試圖通過軟件工程的管理,例如制定規章制度,讓協作人員、團隊之間在接口升級前走流程、互相通知,來避免隨意的系統變化導致的風險。
加大測試力度 – 通常很有可能是投入更多的人肉測試資源,以保證較高的測試覆蓋率和回歸測試(regression test)能力。
強調“紀律”,以犧牲效率為代價,通過“流程”、“審核”設置重重關卡以達到“維穩”效果。
重度隔離運維與研發,禁止研發人員觸碰生產環境,減少誤操作 – 例如隨意升級操作系統、對應用邏輯抱著僥幸心理打補丁等等。
不可否定,這些“套路”在以往的時代可能是最佳實踐,也體現了一個IT組織的管理水平。但是毫無疑問,這樣研發、運維和管理的系統,是一個典型的“脆弱系統”,它依賴于很多的技術、工具、環境、流程、紀律、管理制度、組織結構,任何一個環節出現問題,都可能導致輕重不一的各種問題。最重要一點,這樣的系統,厭惡變化、喜好穩定,無法在一個“只有變化才是唯一不變”(并且是變化越來越頻繁)的世界里強韌存活,更無所謂擁抱變化而生長。
強韌類的技術系統,情況要好的多,起碼能“響應”變化(如后文所論述)。但是注意,在塔勒布的定義里,“強韌”并非“脆弱”的反面,“強韌系統”只是能相對健壯的對抗更大的壓力、更苛刻的環境,它并不能從變化、不確定中獲益?!按嗳酢钡姆疵?,塔勒布在現有語言里找不到一個合適的詞語,所以他發明了一個新概念,“反脆弱”(Anti-Fragile)。問題是,接受“變化是一種常態”、擁抱變化并從中獲益的“反脆弱”的技術系統,能被構建出來嗎?
云計算的出現,有利于幫助IT構建強韌系統,并且讓“反脆弱”系統成為可能。其最根本原因在于,云計算本身是機房物理設施數字化的過程,如上文所述,數字世界的黑天鵝 – 微秒、納秒內發生的極端事件,只能通過數字化手段才能高效解決。伴隨云計算出現的是DCOS(Data Center Operating System)、APM(Application Performance Monitoring)、Infrastructure As Code(基礎設施即代碼、可編程運維、可編程基礎設施…)、DevOps等等技術方案、技術產品、技術理念和方法論。這些都是構建強韌系統的有力武器,而在云計算時代之前,它們嚴格意義上不曾存在過。
到此為止,本文想立論的,是云計算相關技術的出現,對于金融類尤其是交易系統意義重大,技術架構必須調整以利用之,對于構建強韌的、甚至潛在有“反脆弱”能力的系統,有極大幫助。云技術、尤其是容器化技術出現后,金融軟件系統的研發與運維面貌將被極大的改變。
云計算也許是目前為止對于證券交易系統、甚至對于更廣義的金融技術系統而言最適合應對黑天鵝的技術手段。監管機構不應該見到“云”字就敏感的與“公有云”、信息安全、交易可監管性等問題聯系起來;金融機構則需要與時俱進的學習掌握“云化”的技術手段、架構思維 – 至于系統是運行在公有云、私有云還是混合云,都已經是另一個故事。
未完待續。
梁啟鴻,哥倫比亞大學計算機科學系畢業,出道于紐約IBM T.J. Watson研究院,后投身華爾街,分別在紐約Morgan Stanley、Merrill Lynch和JP Morgan等投行參與交易系統研發。本世紀初加入IT界,在Sun Microsystems大中華區專業服務部負責金融行業技術解決方案。此后創建游戲公司并擔任CTO職位5年。后作為雅虎Senior Principal Architect加入雅虎擔任北京研究院首席架構師角色。
三年前開始厭倦了框架、純技術的研發,開始尋找互聯網前沿技術與線下世界、傳統行業的結合;目前回歸金融業負責前端技術、大數據、云計算在互聯網金融、股票交易系統的應用。
個人興趣是把前沿的互聯網技術應用到垂直行業中,做一點能改變傳統面貌的、最重要是有趣好玩又有用的事情;緊跟Go、Docker、Node.js、AngularJS這些技術但更關注如何把技術用到應用場景里,從中獲得樂趣。