高并發(fā)金融應(yīng)用架構(gòu)優(yōu)化與平臺創(chuàng)新
作者簡介
李亞瓊,2015年加入BoCloud博云,任CTO,曾任曙光云計(jì)算產(chǎn)品事業(yè)部總工程師哗讥,兼任電子政務(wù)云集成與應(yīng)用國家工程實(shí)驗(yàn)室專家委員宗兼。
小微金融氯檐、場景金融等新興銀行金融業(yè)務(wù)亟需一種新型的彈性架構(gòu)來應(yīng)對高并發(fā)、大流量的業(yè)務(wù)沖擊寂玲,同時(shí)塔插,要滿足應(yīng)用快速版本迭代升級、敏捷運(yùn)維管理等需求拓哟。本文分享了BoCloud博云如何利用互聯(lián)網(wǎng)應(yīng)用架構(gòu)與Docker容器技術(shù)幫助銀行業(yè)應(yīng)對“互聯(lián)網(wǎng)+”挑戰(zhàn)想许,建設(shè)基于PaaS平臺的敏捷IT架構(gòu)。
移動互聯(lián)網(wǎng)渠道創(chuàng)新是傳統(tǒng)企業(yè)無法也不能躲避的業(yè)務(wù)變革断序,無論是接入或者自建互聯(lián)網(wǎng)渠道都需要回答如下問題:現(xiàn)在的IT架構(gòu)能否應(yīng)對互聯(lián)網(wǎng)渠道創(chuàng)新業(yè)務(wù)的爆炸性沖擊流纹?什么樣的IT架構(gòu)才能夠解決這個(gè)問題并具備應(yīng)對未來需求的良好擴(kuò)展能力?以銀行業(yè)為例违诗,傳統(tǒng)的銀行渠道比較單一漱凝,基本上圍繞各個(gè)分支機(jī)構(gòu)和營業(yè)網(wǎng)點(diǎn)運(yùn)營,IT系統(tǒng)的性能指標(biāo)在整個(gè)體系中的重要性往往要低于業(yè)務(wù)可靠性诸迟。然而茸炒,這一切正在發(fā)生改變,圍繞互聯(lián)網(wǎng)渠道的創(chuàng)新業(yè)務(wù)已經(jīng)改變了這種現(xiàn)狀亮蒋。
新金融IT需求
銀行業(yè)已經(jīng)告別了傳統(tǒng)業(yè)務(wù)為中心的模式扣典,開始轉(zhuǎn)變成以客戶需求為核心進(jìn)行業(yè)務(wù)設(shè)計(jì)與金融創(chuàng)新,這也正是場景金融的內(nèi)涵慎玖。無論是傳統(tǒng)的電子銀行業(yè)務(wù)贮尖,還是渠道創(chuàng)新的直銷銀行業(yè)務(wù),以及互聯(lián)網(wǎng)金融的各種“寶”們趁怔,都是滿足客戶各種場景金融需求而建立的湿硝。圖1是現(xiàn)代銀行的一些業(yè)務(wù)及其基于的運(yùn)營平臺薪前。
圖1 ?現(xiàn)代銀行的業(yè)務(wù)及其運(yùn)營平臺
圍繞客戶、渠道关斜、數(shù)據(jù)和平臺示括,銀行業(yè)CIO需要解決三個(gè)主要問題:
如何快速實(shí)現(xiàn)業(yè)務(wù)上線來應(yīng)對快速變化的市場?
應(yīng)用架構(gòu)如何應(yīng)對互聯(lián)網(wǎng)帶來的瞬時(shí)大規(guī)模并發(fā)請求帶來的負(fù)載壓力痢畜?
如何實(shí)現(xiàn)大量業(yè)務(wù)應(yīng)用垛膝、服務(wù)與數(shù)據(jù)的統(tǒng)一化管理并確保上述兩個(gè)問題的解決?
采用過去煙囪式建設(shè)模式具有如下三個(gè)弊端:
1. 建設(shè)周期過長丁稀。傳統(tǒng)的建設(shè)模式從規(guī)劃吼拥、采購、開發(fā)线衫、上線凿可、試運(yùn)行等階段才能上線一個(gè)新的業(yè)務(wù)應(yīng)用,時(shí)間跨度從幾個(gè)月到幾年授账,十分漫長枯跑。而基于互聯(lián)網(wǎng)事件的營銷類應(yīng)用需要及時(shí)對事件作出響應(yīng),對業(yè)務(wù)上線周期具有十分苛刻的要求白热,傳統(tǒng)模式顯然無法滿足敛助。
2. 擴(kuò)展性不能滿足業(yè)務(wù)需要。傳統(tǒng)的應(yīng)用一般基于規(guī)劃容量進(jìn)行設(shè)計(jì)與開發(fā)棘捣,用戶的規(guī)模是可以估計(jì)辜腺,在極端條件下可以通過排隊(duì)等機(jī)制降低負(fù)載壓力。然而乍恐,“秒殺”评疗、“搶購”等應(yīng)用模式卻不具有這樣的前提條件,用戶規(guī)模會在極短的時(shí)間內(nèi)爆炸性增加茵烈。簡單的排隊(duì)策略會讓用戶大大降低產(chǎn)品和服務(wù)的質(zhì)量評價(jià)百匆,無法滿足快速擴(kuò)展的需要。
3. 業(yè)務(wù)封閉呜投。傳統(tǒng)的業(yè)務(wù)與業(yè)務(wù)之間很少互相訪問加匈,業(yè)務(wù)服務(wù)在設(shè)計(jì)與運(yùn)營過程中也缺乏復(fù)用的考慮,更不用說滿足多個(gè)場景并發(fā)訪問的需求仑荐。
建設(shè)思路
為了解決上述問題雕拼,我們和多家銀行架構(gòu)部門合作,規(guī)劃了“重平臺粘招、輕應(yīng)用啥寇、服務(wù)化”的新金融IT基礎(chǔ)平臺(如圖2)。
圖2 ?“重平臺、輕應(yīng)用辑甜、服務(wù)化”的新金融IT基礎(chǔ)平臺
新一代的IT架構(gòu)應(yīng)該具備如下特點(diǎn):
IT基礎(chǔ)設(shè)施與服務(wù)平臺已經(jīng)集成了應(yīng)用程序所需要的基礎(chǔ)件或服務(wù)衰絮,比如資源申請、調(diào)度服務(wù)磷醋、消息猫牡、數(shù)據(jù)等。重平臺概念的內(nèi)涵就在于大量基礎(chǔ)服務(wù)或經(jīng)驗(yàn)數(shù)據(jù)能“沉積”在平臺中邓线,構(gòu)成應(yīng)用基礎(chǔ)架構(gòu)的核心淌友。
應(yīng)用的開發(fā)、上線骇陈、迭于升級都需要足夠的敏捷亩进。這一方面依賴平臺集成的基礎(chǔ)服務(wù),另一方面需要平臺能快速實(shí)現(xiàn)對于應(yīng)用封裝缩歪、發(fā)布、迭代升級的支持谍憔,具備一鍵式部署匪蝙、升級等特性。
應(yīng)用的架構(gòu)需要由平臺服務(wù)或組件“封裝”而成习贫,服務(wù)或組件能提高系統(tǒng)的并發(fā)逛球,同時(shí)具備可并行化特征,除了能降低服務(wù)響應(yīng)延遲外苫昌,最重要的是可以通過整個(gè)平臺服務(wù)來支撐大并發(fā)訪問需求颤绕。
從業(yè)務(wù)需求的角度來說,“輕應(yīng)用”的平臺能夠快速“組裝”出新的業(yè)務(wù)形態(tài)來滿足市場快速變化的需求祟身,“服務(wù)化”一方面加強(qiáng)各個(gè)業(yè)務(wù)之間更多的關(guān)聯(lián)提高了服務(wù)質(zhì)量奥务,另一方面可以把優(yōu)秀的經(jīng)驗(yàn)和實(shí)踐固化下來增強(qiáng)企業(yè)業(yè)務(wù)競爭力⊥嗔颍“重平臺”特性可以通過整個(gè)平臺的“能力”有效支撐業(yè)務(wù)負(fù)載壓力氯葬,確保應(yīng)用的資源、擴(kuò)展婉陷、并發(fā)需求等得到滿足帚称。
當(dāng)然,上述特性不是天然就具備的秽澳,需要從應(yīng)用架構(gòu)和平臺創(chuàng)新兩個(gè)方面進(jìn)行改變來確保目標(biāo)達(dá)到闯睹。
應(yīng)用架構(gòu)優(yōu)化
回到移動互聯(lián)網(wǎng)模式下應(yīng)用應(yīng)該具備特點(diǎn):1. 需要能夠應(yīng)對大量用戶同時(shí)并發(fā)訪問需求,即應(yīng)用架構(gòu)要具有優(yōu)秀的并發(fā)性和彈性担神;2. 應(yīng)用要能夠快速迭代楼吃,一方面滿足業(yè)務(wù)發(fā)展需要,另一方面可以不斷對性能進(jìn)行調(diào)優(yōu)來改進(jìn)服務(wù)質(zhì)量;3. 應(yīng)用架構(gòu)要滿足能夠快速“組裝”出新的業(yè)務(wù)應(yīng)用來支撐快速變化的市場需要所刀。也就是說衙荐,應(yīng)用架構(gòu)要具備:
強(qiáng)大的并發(fā)能力;
靈活的彈性浮创;
敏捷的迭代能力忧吟;
標(biāo)準(zhǔn)化可組裝性;
這幾種能力的獲得需要從多個(gè)角度對系統(tǒng)進(jìn)行優(yōu)化斩披,典型的優(yōu)化包括:流量負(fù)載均衡溜族、異步IO、消息隊(duì)列垦沉、讀寫分離煌抒、分庫分表、對象緩存厕倍、服務(wù)拆分寡壮、索引服務(wù)、分布式內(nèi)容管理讹弯、CDN况既、空間換時(shí)間優(yōu)化等手段。
負(fù)載均衡
根據(jù)業(yè)務(wù)模型和業(yè)務(wù)服務(wù)協(xié)議组民,一般可選擇的負(fù)載均衡方案包括:鏈路層負(fù)載均衡棒仍、IP層負(fù)載均衡、Http反向代理臭胜、DNS域名解析負(fù)載均衡莫其、Http重定向負(fù)載均衡。大型網(wǎng)站或業(yè)務(wù)服務(wù)往往采用多種手段進(jìn)行流量的負(fù)載均衡耸三,比如先基于DNS實(shí)現(xiàn)多數(shù)據(jù)中心的負(fù)載均衡乱陡,再根據(jù)IP實(shí)現(xiàn)數(shù)據(jù)中心內(nèi)多業(yè)務(wù)負(fù)載均衡,最后在基于反向代理實(shí)現(xiàn)統(tǒng)一業(yè)務(wù)的不同服務(wù)器之間的負(fù)載均衡(如圖3)仪壮。
圖3 ?負(fù)載均衡
異步
異步是提高系統(tǒng)并發(fā)性的重要技術(shù)蛋褥,和異步共同出現(xiàn)的還有任務(wù)(消息)隊(duì)列、線程池和持久化連接等技術(shù)睛驳。異步技術(shù)是事件驅(qū)動的編程模型實(shí)際應(yīng)用的典范:用戶請求先被放入隊(duì)列烙心,然后喚醒任務(wù)分發(fā)器,任務(wù)分發(fā)器從任務(wù)隊(duì)列取下任務(wù)分發(fā)到空閑的線程上乏沸,線程觸發(fā)異步操作并注冊回調(diào)方法淫茵,當(dāng)返回后回調(diào)方法重新從任務(wù)隊(duì)列中把任務(wù)取下并把結(jié)果返回。整個(gè)過程如下(如圖4):
圖4 異步IO
消息隊(duì)列
消息隊(duì)列對于提高系統(tǒng)并發(fā)性能具有四個(gè)方面的作用:1. 通過消息隊(duì)列實(shí)現(xiàn)異步處理蹬跃,如上述異步IO中的任務(wù)隊(duì)列就是可以基于消息隊(duì)列實(shí)現(xiàn)匙瘪;2. 任務(wù)并行執(zhí)行铆铆,通過消息隊(duì)列可以把傳統(tǒng)串行執(zhí)行的任務(wù)盡量改造成可并行的程序;3. 應(yīng)用解耦丹喻,提高系統(tǒng)的擴(kuò)展性薄货;4. 流量削峰,通過消息隊(duì)列引入排隊(duì)機(jī)制碍论,可以把尖峰負(fù)載盡量平整化谅猾。下圖為一個(gè)Web網(wǎng)站的消息系統(tǒng)(如圖5)。
圖5 消息隊(duì)列
數(shù)據(jù)庫讀寫分離/分庫分表
隨著訪問量增多鳍悠,數(shù)據(jù)庫系統(tǒng)的壓力會越來越大税娜。在一個(gè)信息系統(tǒng)中,數(shù)據(jù)庫系統(tǒng)的性能往往是對系統(tǒng)整體性能影響最為關(guān)鍵的指標(biāo)藏研。從數(shù)據(jù)庫架構(gòu)設(shè)計(jì)的角度敬矩,常用的優(yōu)化手段為讀寫分離與分庫分表。前者是采用讀寫請求分別路由到不同的庫中來降低數(shù)據(jù)庫系統(tǒng)壓力的一種技術(shù)蠢挡,采用該技術(shù)可以最大程度提高系統(tǒng)的并發(fā)讀弧岳,特別是對讀多寫少的訪問模式十分有效。兩個(gè)庫之間通過數(shù)據(jù)同步业踏,可以確保數(shù)據(jù)的一致性缩筛。讀寫分離模式如圖6所示。
圖6 數(shù)據(jù)庫讀寫分離/分庫分表
隨著業(yè)務(wù)的運(yùn)行堡称,數(shù)據(jù)量隨之不斷增多。當(dāng)達(dá)到一定的記錄條目時(shí)艺演,一次查詢往往需要消耗很長時(shí)間才能返回結(jié)果却紧。這時(shí)分庫分表設(shè)計(jì)就提到了日程。分庫設(shè)計(jì)一般根據(jù)業(yè)務(wù)把不同的內(nèi)容存到不同的數(shù)據(jù)庫中胎撤,也稱為垂直拆分晓殊。這種拆分模式比較靈活,也易于操作伤提,不足之處在于需要考慮跨多數(shù)據(jù)庫的符合業(yè)務(wù)查詢join問題巫俺。分表設(shè)計(jì)也叫水平拆分,就是把同一個(gè)表中的數(shù)據(jù)拆分到兩個(gè)甚至多個(gè)數(shù)據(jù)庫中肿男。產(chǎn)生數(shù)據(jù)水平拆分的原因是某個(gè)業(yè)務(wù)的數(shù)據(jù)量或者更新量到達(dá)了單個(gè)數(shù)據(jù)庫的瓶頸介汹,這時(shí)就可以把這個(gè)表拆分到兩個(gè)或更多個(gè)數(shù)據(jù)庫中。Mycat是最為常用的分庫分庫中間件舶沛,圖7為Mycat架構(gòu)嘹承,有興趣的同學(xué)可以前往Mycat官方網(wǎng)站學(xué)習(xí)了解。
圖7 Mycat架構(gòu)
服務(wù)拆分
服務(wù)拆分是把過去全部運(yùn)行在一個(gè)應(yīng)用容器內(nèi)部的業(yè)務(wù)邏輯子系統(tǒng)拆分出來如庭,單獨(dú)運(yùn)行在獨(dú)立的容器內(nèi)部叹卷。這樣做有兩個(gè)好處:1,可以降低系統(tǒng)耦合度,使得業(yè)務(wù)具備快速迭代能力骤竹;2帝牡,方便的定位影響性能子系統(tǒng),針對性地進(jìn)行性能優(yōu)化蒙揣。例如靶溜,短信子系統(tǒng)從整個(gè)系統(tǒng)中拆分出來后,系統(tǒng)可以方便地測試短信收發(fā)的并發(fā)效率及延遲鸣奔,這樣可以針對性地進(jìn)行設(shè)計(jì)改進(jìn)與架構(gòu)優(yōu)化墨技。
內(nèi)存緩存
隨著訪問量增加,逐漸出現(xiàn)了許多用戶訪問同一部分內(nèi)容的情況挎狸,對于這些比較熱門的內(nèi)容扣汪,沒必要每次都從數(shù)據(jù)庫讀取。我們可以使用緩存技術(shù)锨匆,例如可以使用Memcacahe作為應(yīng)用層的緩存崭别,也可以使用Redis作為數(shù)據(jù)庫層緩存宛琅。另外压恒,緩存系統(tǒng)也可以用來保存需要分享的數(shù)據(jù),比如用戶登錄的會話信息(Session)弃酌。通過緩存系統(tǒng)共享會話是實(shí)現(xiàn)單點(diǎn)登錄及會話管理的重要技術(shù)土榴。加入緩存后的系統(tǒng)架構(gòu)如圖8所示诀姚。
圖8 加入緩存后的系統(tǒng)架構(gòu)
索引系統(tǒng)
對于模糊查找,利用讀數(shù)據(jù)庫進(jìn)行查詢往往力不從心玷禽,即使做了讀寫分離赫段,這個(gè)問題依然是影響性能的一種重要場景。以交易網(wǎng)站型為例矢赁,基于關(guān)鍵詞查找商品或服務(wù)是一種最為常用的功能糯笙,尤其是根據(jù)商品的標(biāo)題來查找對應(yīng)的商品。對于這種需求撩银,在數(shù)據(jù)庫操作中我們都是通過like功能來實(shí)現(xiàn)的给涕,但是這種方式的開銷很大,且針對大數(shù)量查詢非常耗時(shí)额获。此時(shí)我們可以使用搜索引擎的索引來完成够庙。
分布式存儲系統(tǒng)/CDN
針對非結(jié)構(gòu)化數(shù)據(jù)的訪問優(yōu)化,一般的策略是構(gòu)建分布式存儲系統(tǒng)抄邀。支撐分布式存儲系統(tǒng)是具備良好擴(kuò)展性和并發(fā)性能的存儲系統(tǒng)首启,設(shè)計(jì)良好的分布式存儲系統(tǒng)能夠?qū)崿F(xiàn)訪問文件的快速定位、加速讀寫撤摸、實(shí)現(xiàn)高并發(fā)毅桃。例如Ceph就是一個(gè)優(yōu)秀的開源分布式存儲系統(tǒng)褒纲。
CDN是更大尺度的優(yōu)化手段,通常用戶大型或超大型網(wǎng)絡(luò)服務(wù)運(yùn)營钥飞。利用CDN莺掠,可以把不常變化的資源放置在網(wǎng)絡(luò)的邊緣,加速終端用戶獲取資源的速度读宙。
空間換時(shí)間優(yōu)化
空間換時(shí)間優(yōu)化的一個(gè)典型應(yīng)用場景是應(yīng)對不同分辨率屏幕時(shí)向用戶提供同一圖片的不同分辨率版本彻秆,這是根據(jù)常見的屏幕分辨率在用戶上傳圖片時(shí)自動生成不同分辨率圖片避免用戶請求時(shí)實(shí)時(shí)進(jìn)行轉(zhuǎn)換的開銷。這種優(yōu)化對于視頻结闸、多格式存儲文件等也非常有用唇兑。
綜上所述,利用各種優(yōu)化手段后整個(gè)互聯(lián)網(wǎng)應(yīng)用架構(gòu)如圖9所示桦锄。
圖9 優(yōu)化后整個(gè)互聯(lián)網(wǎng)應(yīng)用架構(gòu)
平臺創(chuàng)新
上述架構(gòu)的落地還面臨一系列挑戰(zhàn)扎附,包括:
1. 如何部署實(shí)施這么復(fù)雜的系統(tǒng)?
2. 如何快速定位高負(fù)載壓力瓶頸子系統(tǒng)并自動進(jìn)行擴(kuò)容處理结耀?
3. 版本的迭代升級如何可控有序地得到執(zhí)行留夜?
上述問題如何解決呢?回顧前文所說的新一代平臺架構(gòu)的三個(gè)特性图甜,即“重平臺碍粥、輕應(yīng)用、服務(wù)化”黑毅,其中重平臺和服務(wù)化的特性就是上述問題的解決思路嚼摩。
重平臺和服務(wù)化概念的背后是整個(gè)平臺已經(jīng)固化了大量可獨(dú)立對外提供服務(wù)的組件或子系統(tǒng),應(yīng)用只需要負(fù)責(zé)業(yè)務(wù)邏輯的部分即可完成整個(gè)系統(tǒng)的部署上線矿瘦。要實(shí)現(xiàn)這一點(diǎn)枕面,需要做到如下三點(diǎn):
1. 應(yīng)用需要進(jìn)行業(yè)務(wù)邏輯、數(shù)據(jù)存儲和服務(wù)組件的分離匪凡,實(shí)現(xiàn)業(yè)務(wù)邏輯、數(shù)據(jù)和組件服務(wù)的獨(dú)立運(yùn)行掘猿。
2. 平臺要具備根據(jù)業(yè)務(wù)病游、數(shù)據(jù)和服務(wù)(組件)定義(編排)業(yè)務(wù)架構(gòu)的能力,能夠?qū)崿F(xiàn)業(yè)務(wù)的編排部署稠通。
3. 平臺要能夠?qū)崿F(xiàn)對業(yè)務(wù)衬衬、組件(服務(wù))和數(shù)據(jù)存儲個(gè)子系統(tǒng)的運(yùn)維管理,確保其在負(fù)載壓力增大時(shí)能夠自動彈性伸縮提升用戶體驗(yàn)改橘。
這就涉及應(yīng)用封裝滋尉、業(yè)務(wù)編排和彈性伸縮(自動運(yùn)維)等方面的技術(shù)。BoCloud博云基于Docker的云應(yīng)用發(fā)布與運(yùn)維管理平臺正是基于這樣的理念和需求而開發(fā)的飞主。圖10為BoCloud的BeyondContainer產(chǎn)品架構(gòu):
圖10 BoCloud的BeyondContainer產(chǎn)品架構(gòu)
如圖所示狮惜,它包括三個(gè)主要部分:
基礎(chǔ)設(shè)施子平臺:負(fù)責(zé)管理平臺的基礎(chǔ)設(shè)施高诺,除了服務(wù)器、存儲碾篡、網(wǎng)絡(luò)等基礎(chǔ)設(shè)施外虱而,還包括圍繞應(yīng)用相關(guān)的基礎(chǔ)組件管理,如鏡像倉庫开泽、容器牡拇、組件等。
應(yīng)用管控子平臺:負(fù)責(zé)管理平臺上的各類應(yīng)用穆律,提供應(yīng)用部署惠呼、維護(hù)、日志等管理管控峦耘,同時(shí)實(shí)現(xiàn)多租戶環(huán)境剔蹋,實(shí)現(xiàn)基于服務(wù)目錄的應(yīng)用發(fā)布服務(wù)。
一體化監(jiān)控子平臺:負(fù)責(zé)對整個(gè)平臺中的資源贡歧、應(yīng)用滩租、通信等進(jìn)行監(jiān)控,并以可視化形式對外呈現(xiàn)系統(tǒng)各類監(jiān)控信息利朵。
限于篇幅律想,關(guān)于BeyondContainer的架構(gòu)和特性就不再這里展開闡述。
總結(jié)
本文分享了BoCloud博云在幫助傳統(tǒng)企業(yè)應(yīng)對移動互聯(lián)網(wǎng)業(yè)務(wù)沖擊時(shí)在應(yīng)用與平臺架構(gòu)上進(jìn)行創(chuàng)新實(shí)踐的經(jīng)驗(yàn)绍弟,希望能夠?qū)Υ蠹矣兴鶈l(fā)技即。
本文為《程序員》原創(chuàng)文章,未經(jīng)允許不得轉(zhuǎn)載樟遣,更多精彩文章請訂閱2016年《程序員》
《程序員》文章推薦閱讀: