趙文華
(中國福利彩票發(fā)行管理中心技術(shù)部,北京 100101)
目前,福彩銷售系統(tǒng)大多是基于分布式存儲結(jié)構(gòu)開發(fā)的單體應(yīng)用程序業(yè)務(wù)系統(tǒng),市場運(yùn)行多年來,總體情況良好,有力保障了福彩的發(fā)行銷售工作。為了保證系統(tǒng)實(shí)時(shí)安全運(yùn)行,通常將上述單體應(yīng)用業(yè)務(wù)系統(tǒng)部署在不同服務(wù)器上實(shí)現(xiàn)備份,保障發(fā)生故障時(shí)系統(tǒng)間相互快速切換,有的地方還建立了異地災(zāi)備中心等。但是傳統(tǒng)的單體應(yīng)用模式也導(dǎo)致了資源嚴(yán)重浪費(fèi),開發(fā)人員運(yùn)維管理困難,系統(tǒng)可擴(kuò)展性差等問題。隨著云計(jì)算技術(shù)、微服務(wù)技術(shù)等新型應(yīng)用架構(gòu)的不斷興起、發(fā)展和完善,為成功解決上述問題提供了思路。
微服務(wù)是以單一應(yīng)用程序構(gòu)成的小服務(wù),自己擁有自己的行程與輕量化處理,服務(wù)依據(jù)業(yè)務(wù)功能設(shè)計(jì),以全自動的方式集成部署,與其他服務(wù)使用HTTP/API 進(jìn)行通信。同時(shí)服務(wù)會使用最小規(guī)模的集中管理能力,服務(wù)可以用不同的編程語言與數(shù)據(jù)庫等組件實(shí)現(xiàn)。微服務(wù)是一種開發(fā)軟件的架構(gòu)和組織方法,其中軟件由通過明確定義的API 進(jìn)行通信的小型獨(dú)立服務(wù)集組成,微服務(wù)架構(gòu)使應(yīng)用程序更易于擴(kuò)展和更好更快的開發(fā),具體特點(diǎn)如下所述。
通俗來講,不同服務(wù)內(nèi)部的開發(fā)技術(shù)或編程語言可以不一致,為不同的服務(wù)選擇最適合的技術(shù),系統(tǒng)中不同部分也可以使用不同存儲技術(shù)。
一個(gè)服務(wù)故障不會導(dǎo)致另一個(gè)服務(wù)癱瘓,因?yàn)楦鱾€(gè)服務(wù)是相互獨(dú)立和自治的系統(tǒng)。
微服務(wù)在出現(xiàn)性能瓶頸的時(shí)候,可以對造成此原因的服務(wù)進(jìn)行擴(kuò)展升級,而不是對整個(gè)系統(tǒng)應(yīng)用進(jìn)行優(yōu)化升級,極大地降低了系統(tǒng)擴(kuò)展性成本。
對于有幾百萬行代碼的單體服務(wù),即使修改了幾行代碼仍需要重新編譯整個(gè)應(yīng)用,而且軟件變更帶來的不確定性也相對較高,軟件部署的影響也比較大。在微服務(wù)架構(gòu)中,各個(gè)服務(wù)的部署是獨(dú)立的,如果真出了問題也只是影響單個(gè)服務(wù),可以快速回滾版本解決。微服務(wù)架構(gòu)中單個(gè)服務(wù)的代碼量通常不會很大,當(dāng)需要重構(gòu)或者優(yōu)化這些服務(wù)的時(shí)候,相對較為容易。
通常情況下,對于大型微服務(wù)架構(gòu)的服務(wù)運(yùn)維,往往需要建立一套完備的服務(wù)監(jiān)控系統(tǒng),服務(wù)運(yùn)維人員需要實(shí)時(shí)掌握服務(wù)運(yùn)行中的各種狀態(tài),在故障發(fā)生時(shí),盡可能降低影響范圍,盡快恢復(fù)正常服務(wù)。
有些服務(wù)的敏感數(shù)據(jù)存在安全問題,服務(wù)安全就是對敏感服務(wù)采用安全鑒權(quán)機(jī)制,對服務(wù)的訪問需要進(jìn)行相應(yīng)的身份驗(yàn)證和授權(quán),防止數(shù)據(jù)泄露外溢的風(fēng)險(xiǎn)。
Dubbo 是阿里巴巴公司開源的一個(gè)Java 高性能服務(wù)框架,應(yīng)用可通過高性能的RPC 實(shí)現(xiàn)服務(wù)的輸入和輸出功能,可以和Spring 框架集成,它提供了三大核心功能:面向接口的遠(yuǎn)程方法調(diào)用,智能容錯(cuò)和負(fù)載均衡以及服務(wù)自動注冊發(fā)現(xiàn)。
騰訊內(nèi)部經(jīng)過多年的實(shí)踐,不斷總結(jié)形成的開源項(xiàng)目微服務(wù)架構(gòu)TAF,目前僅支持C++語言。
Google 開發(fā)的高性能、通用的開源RPC 框架,其由Google 主要面向移動應(yīng)用開發(fā)并基于HTTP/2 協(xié)議和序列化協(xié)議標(biāo)準(zhǔn)而設(shè)計(jì),但其本身不是分布式的,所以要實(shí)現(xiàn)上面的框架功能需要進(jìn)一步開發(fā)。
最初是由Facebook 開發(fā)的內(nèi)部系統(tǒng)跨語言的高性能RPC 框架,之后成為Apache 開源項(xiàng)目之一,跟gRPC一樣,它有一套自己的接口定義語言IDL,可以通過代碼生成器,生成各種編程語言的客戶端和服務(wù)端的SDK 代碼,支持多種語言。
對于微服務(wù)模塊劃分,可以借鑒傳統(tǒng)單體應(yīng)用業(yè)務(wù)功能模塊劃分的思路進(jìn)行,在這個(gè)基礎(chǔ)上,會增加數(shù)據(jù)驅(qū)動,SOA 分層思路等,微服務(wù)劃分不宜太細(xì),粒度劃分越細(xì),后續(xù)微服務(wù)集成和管理的難度就越大。
在IT 應(yīng)用架構(gòu)規(guī)劃大中臺的概念下,實(shí)際上中臺包含了技術(shù)中臺和業(yè)務(wù)中臺,對于技術(shù)中臺重點(diǎn)是各個(gè)技術(shù)組件和技術(shù)服務(wù)能力的實(shí)現(xiàn),而業(yè)務(wù)中臺主要包括了數(shù)據(jù)能力和業(yè)務(wù)規(guī)則處理能力的提供。對于業(yè)務(wù)中臺本身也是分層,包括了最基本的數(shù)據(jù)類中心和業(yè)務(wù)處理類中心。
數(shù)據(jù)類中心本身又包括了基礎(chǔ)主數(shù)據(jù)類和核心共享業(yè)務(wù)數(shù)據(jù)類,例如,產(chǎn)品中心和用戶中心,屬于基礎(chǔ)主數(shù)據(jù)類。而訂單中心和庫存中心則屬于業(yè)務(wù)共享數(shù)據(jù)類。
業(yè)務(wù)處理類則主要是進(jìn)行核心業(yè)務(wù)邏輯和功能的處理,包括交易中心、結(jié)算中心及計(jì)費(fèi)中心等,都可以看作是業(yè)務(wù)處理類的中臺模塊。當(dāng)然,業(yè)務(wù)處理類中臺也可為關(guān)鍵的領(lǐng)域服務(wù)提供組件,此類組件需要調(diào)用底層更多基礎(chǔ)子模塊的核心接口。
數(shù)據(jù)是驅(qū)動業(yè)務(wù)流程的關(guān)鍵性因素,特別是對于一些基礎(chǔ)數(shù)據(jù)和共享數(shù)據(jù),是業(yè)務(wù)系統(tǒng)的核心所在。如果將一個(gè)基礎(chǔ)主數(shù)據(jù)劃分為一個(gè)微服務(wù)模塊,那么會導(dǎo)致微服務(wù)模塊的數(shù)量比較大,從效率上來講不太可行。如果是按標(biāo)準(zhǔn)的主數(shù)據(jù)管理系統(tǒng)的業(yè)務(wù)模塊劃分,一定程度上,它不是按照數(shù)據(jù)維度進(jìn)行劃分,一般主數(shù)據(jù)系統(tǒng)包含元數(shù)據(jù)和數(shù)據(jù)對象,又細(xì)分為數(shù)據(jù)集成和調(diào)度、數(shù)據(jù)清理、流程引擎及數(shù)據(jù)內(nèi)容管理等各個(gè)模塊。
對于基礎(chǔ)主數(shù)據(jù)類微服務(wù)模塊,最好的方式是按數(shù)據(jù)域進(jìn)行拆分,例如對于用戶、組織、崗位和人員等劃分到一個(gè)人力域數(shù)據(jù)中心,對于供應(yīng)鏈、物料編碼和采購類別等劃分到采購或供應(yīng)鏈域微服務(wù)模塊。這種劃分既實(shí)現(xiàn)了一定程度上的模塊拆分和松耦合,同時(shí)按域劃分后,同一個(gè)域的基礎(chǔ)主數(shù)據(jù)本身在一個(gè)數(shù)據(jù)庫中進(jìn)行管理,這些基礎(chǔ)主數(shù)據(jù)本身可能存在一定的耦合關(guān)系,那么這些耦合關(guān)系的處理將不再需要提升到分布式事務(wù)層面去處理。
在把基礎(chǔ)和共享數(shù)據(jù)劃分出來之后,再考慮上層的各個(gè)業(yè)務(wù)以及業(yè)務(wù)流程與業(yè)務(wù)規(guī)則處理等還需要單獨(dú)設(shè)置哪些微服務(wù)模塊。
對于單體業(yè)務(wù)系統(tǒng),還可從已有的業(yè)務(wù)系統(tǒng)入手進(jìn)行微服務(wù)模塊劃分。這種劃分方式通??紤]了高內(nèi)聚低耦合的道理。單體應(yīng)用構(gòu)建更多是從縱向業(yè)務(wù)功能的角度出發(fā),是偏縱向垂直方式構(gòu)建業(yè)務(wù)功能的,而對于微服務(wù)架構(gòu)思想下,引入了SOA 架構(gòu)思路,主要思考目前的業(yè)務(wù)功能和業(yè)務(wù)流程,從數(shù)據(jù)→功能→流程的橫向分層思路來搭建。
參考已有的業(yè)務(wù)系統(tǒng)模塊劃分,也要考慮核心共性基礎(chǔ)數(shù)據(jù)下沉為獨(dú)立的微服務(wù),而流程類業(yè)務(wù)功能上升到前臺類應(yīng)用也作為獨(dú)立的微服務(wù)。在整個(gè)過程中可以多參考業(yè)務(wù)系統(tǒng)的功能架構(gòu)圖,通過對比分析,再結(jié)合實(shí)際業(yè)務(wù)需求和業(yè)務(wù)流程情況進(jìn)行優(yōu)化整合。
福彩銷售系統(tǒng)是發(fā)行福利彩票的重要技術(shù)載體,也是管理福利彩票的主要技術(shù)手段。目前,以在運(yùn)行的福利彩票“快樂8”銷售系統(tǒng)為例,按照功能模塊劃分,主要包括中央核心交易系統(tǒng)、游戲引擎管理系統(tǒng)、線下渠道管理系統(tǒng)及銷售終端軟件系統(tǒng)。系統(tǒng)功能架構(gòu)如圖1 所示。
中央核心交易系統(tǒng)主要實(shí)現(xiàn)彩票交易流轉(zhuǎn)、彩票數(shù)據(jù)稽核、彩民賬戶管理、彩票游戲管理等核心業(yè)務(wù)功能,并且針對游戲引擎和前端服務(wù)系統(tǒng)均提供了標(biāo)準(zhǔn)接口。
游戲引擎管理系統(tǒng)主要完成“快樂8”游戲規(guī)則參數(shù)化設(shè)置、游戲投注方式、游戲風(fēng)險(xiǎn)控制、兌獎查詢及服務(wù)等功能。
線下渠道管理系統(tǒng)主要包括投注站權(quán)限管理、投注站點(diǎn)新增、撤銷以及調(diào)整、站點(diǎn)繳款、業(yè)務(wù)運(yùn)行監(jiān)控、多維度統(tǒng)計(jì)分析及日志審計(jì)等。
銷售終端軟件系統(tǒng)是指安裝部署在銷售終端上(含自助終端)的業(yè)務(wù)軟件系統(tǒng),用于銷售彩票、兌獎服務(wù)、通知公告查詢、銷售報(bào)表查詢和在線培訓(xùn)等。
按照上述系統(tǒng)功能架構(gòu)要求,游戲引擎系統(tǒng)與核心交易系統(tǒng)在基諾游戲彩票核心交易業(yè)務(wù)中的邏輯關(guān)系如圖2 所示。
圖2 功能架構(gòu)
彩票銷售系統(tǒng)中的核心業(yè)務(wù)流程包括銷售和兌獎,業(yè)務(wù)流程如圖3 所示,具體描述如下。
圖3 業(yè)務(wù)流程
4.2.1 彩票銷售流程
(1)業(yè)主、彩民通過銷售終端軟件系統(tǒng)購買彩票,銷售終端軟件系統(tǒng)將購彩請求發(fā)送渠道管理系統(tǒng);(2)渠道管理系統(tǒng)進(jìn)行相關(guān)業(yè)務(wù)規(guī)則校驗(yàn)通過,并完成渠道業(yè)務(wù)處理,將彩票交易請求轉(zhuǎn)發(fā)核心交易系統(tǒng);(3)核心交易系統(tǒng)進(jìn)行相關(guān)業(yè)務(wù)規(guī)則校驗(yàn)通過,并完成彩民業(yè)務(wù)處理,將彩票交易請求轉(zhuǎn)發(fā)游戲引擎系統(tǒng);(4)游戲引擎系統(tǒng)處理投注請求完成,將結(jié)果返回核心交易系統(tǒng);(5)核心交易系統(tǒng)根據(jù)投注結(jié)果,對彩民業(yè)務(wù)進(jìn)行處理,并將交易結(jié)果返回渠道管理系統(tǒng);(6)渠道管理系統(tǒng)根據(jù)投注結(jié)果,對渠道業(yè)務(wù)進(jìn)行處理,并將交易結(jié)果返回銷售終端軟件系統(tǒng);(7)銷售終端軟件系統(tǒng)根據(jù)投注結(jié)果打印彩票或者給予相應(yīng)提示。
4.2.2 彩票兌獎流程
(1)業(yè)主、彩民通過銷售終端軟件系統(tǒng)進(jìn)行彩票兌獎,銷售終端軟件系統(tǒng)將兌獎?wù)埱蟀l(fā)送渠道管理系統(tǒng);(2)渠道管理系統(tǒng)進(jìn)行相關(guān)業(yè)務(wù)規(guī)則校驗(yàn)通過,將彩票兌獎?wù)埱筠D(zhuǎn)發(fā)核心交易系統(tǒng);(3)核心交易系統(tǒng)進(jìn)行相關(guān)業(yè)務(wù)規(guī)則校驗(yàn)通過,將彩票兌獎?wù)埱筠D(zhuǎn)發(fā)游戲引擎系統(tǒng);(4)游戲引擎系統(tǒng)處理兌獎?wù)埱笸瓿桑瑢⒔Y(jié)果返回核心交易系統(tǒng);(5)核心交易系統(tǒng)根據(jù)兌獎結(jié)果,對彩民業(yè)務(wù)進(jìn)行處理,并將交易結(jié)果返回渠道管理系統(tǒng);(6)渠道管理系統(tǒng)根據(jù)兌獎結(jié)果,對渠道業(yè)務(wù)進(jìn)行處理,并將交易結(jié)果返回前端售彩系統(tǒng);(7)銷售終端軟件系統(tǒng)根據(jù)兌獎結(jié)果給予相應(yīng)提示。
在福彩銷售系統(tǒng)中主要應(yīng)用的微服務(wù)包括:注冊發(fā)現(xiàn)服務(wù)(registry)、異步消息通信(MQ)、負(fù)載均衡(load balance)、內(nèi)存數(shù)據(jù)庫(非關(guān)系型數(shù)據(jù)庫)(redis)、安全服務(wù)(security)及日志監(jiān)控服務(wù)(monitor)等。
注冊發(fā)現(xiàn)服務(wù)注冊中心是用來集中管理微服務(wù),實(shí)現(xiàn)服務(wù)的注冊、發(fā)現(xiàn)、檢查等功能;服務(wù)A 與服務(wù)B 在注冊中心C 注冊,形成服務(wù)注冊表(表里登記了服務(wù)A 和服務(wù)B 的地址等相關(guān)信息)。當(dāng)A 服務(wù)想要訪問B 服務(wù)時(shí),可以通過注冊中心C 的服務(wù)發(fā)現(xiàn)機(jī)制,獲取服務(wù)注冊表進(jìn)而找到服務(wù)B。注冊發(fā)現(xiàn)服務(wù)是整個(gè)銷售系統(tǒng)的基礎(chǔ),系統(tǒng)中所涉及的微服務(wù)均在此注冊訪問。
異步消息通信是指兩個(gè)互不同步的設(shè)備通過計(jì)時(shí)機(jī)制或其他技術(shù)進(jìn)行數(shù)據(jù)傳輸,異步通信中兩個(gè)字符之間的時(shí)間間隔是不固定的,而在一個(gè)字符內(nèi)各位的時(shí)間間隔是固定的。基本上,發(fā)送方可以隨時(shí)傳輸數(shù)據(jù),而接收方必須在信息到達(dá)時(shí)準(zhǔn)備好接收。異步消息通信對于解決在銷售彩票高峰階段且并發(fā)量較大的數(shù)據(jù)是一種較好的處理機(jī)制。
負(fù)載均衡就是指將負(fù)載工作任務(wù)進(jìn)行平衡、分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行運(yùn)行,例如核心應(yīng)用服務(wù)器和其他主要任務(wù)服務(wù)器等,從而協(xié)同完成工作任務(wù)。負(fù)載均衡軟件解決方案是指在一臺或多臺服務(wù)器相應(yīng)的操作系統(tǒng)上安裝一個(gè)或多個(gè)附加軟件來實(shí)現(xiàn)負(fù)載均衡,它基于特定環(huán)境,配置簡單且使用靈活,可以滿足一般的負(fù)載均衡需求。
目前使用的負(fù)載均衡算法為動態(tài)負(fù)載均衡算法以服務(wù)器的實(shí)時(shí)負(fù)載狀態(tài)信息來決定任務(wù)的分配,例如加權(quán)最小連接法。最小連接法適用于各個(gè)節(jié)點(diǎn)處理的性能相似時(shí),任務(wù)分發(fā)單元會將任務(wù)平滑分配給服務(wù)器。但當(dāng)服務(wù)器性能差距較大時(shí),就無法達(dá)到預(yù)期的效果。因?yàn)榇藭r(shí)連接數(shù)并不能準(zhǔn)確表明處理能力,連接數(shù)小而自身性能很差的服務(wù)器可能不及連接數(shù)大而自身性能極好的服務(wù)器,所以在這個(gè)時(shí)候就會導(dǎo)致任務(wù)無法準(zhǔn)確地分配到剩余處理能力強(qiáng)的機(jī)器上。
內(nèi)存數(shù)據(jù)庫是一個(gè)非??焖俚?、開源的、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、非關(guān)系類型的數(shù)據(jù)庫,一定程度上是對關(guān)系型數(shù)據(jù)庫的很好補(bǔ)充。它提供了Java,C/C++等客戶端,支持主從同步。數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步,從服務(wù)器可以是關(guān)聯(lián)其他從服務(wù)器的主服務(wù)器。使得其可執(zhí)行單層樹復(fù)制,存盤可以有意無意地對數(shù)據(jù)進(jìn)行寫操作。由于完全實(shí)現(xiàn)了發(fā)布/訂閱機(jī)制,使得從數(shù)據(jù)庫在任何地方同步樹時(shí),可訂閱一個(gè)頻道并接收主服務(wù)器完整的消息發(fā)布記錄。
安全服務(wù)的主要內(nèi)容包括:安全機(jī)制、安全連接、安全協(xié)議和安全策略等,它們能在一定程度上彌補(bǔ)和完善現(xiàn)有操作系統(tǒng)和網(wǎng)絡(luò)信息系統(tǒng)的安全漏洞。具體內(nèi)容包括,鑒別用于保證通信的真實(shí)性,正式接收的數(shù)據(jù)就來自所要求的源方,包括對等實(shí)體鑒別和數(shù)據(jù)源鑒別。數(shù)據(jù)源鑒別連同無連接的服務(wù)一起操作,而對等實(shí)體鑒別通常與面向連接的服務(wù)一起操作,一方面可確保雙方實(shí)體可信,另一方面可確保該連接不被第三方干擾,如假冒其中的一方進(jìn)行非授權(quán)的傳輸或接收;訪問控制用于防止對網(wǎng)絡(luò)資源的非授權(quán)訪問,保證系統(tǒng)的可控性。訪問控制可以用于通信源或目的,或是通信鏈路上的某一地方。
日志監(jiān)控服務(wù)主要是指實(shí)時(shí)掌握服務(wù)運(yùn)行中的各種狀態(tài),例如內(nèi)存使用效率、調(diào)用次數(shù)和健康狀況等,建立一套完備的服務(wù)監(jiān)控體系,包括拓?fù)潢P(guān)系、日志審計(jì)、預(yù)警通知和調(diào)用追蹤等。
福彩銷售系統(tǒng)既是發(fā)行和銷售福利彩票的重要載體,也是管理和服務(wù)福彩市場的有效手段,為我國彩票事業(yè)的持續(xù)發(fā)展提供了有力的技術(shù)支撐。微服務(wù)技術(shù)架構(gòu)在福彩銷售系統(tǒng)中的應(yīng)用將極大程度地提高該系統(tǒng)的可擴(kuò)展性、高可用性及安全性等,進(jìn)一步豐富福彩銷售系統(tǒng)的功能模塊,提升福彩銷售系統(tǒng)的性能指標(biāo),從廣義上來講,也將促進(jìn)福利彩票銷售市場的韌性,擴(kuò)大福利彩票銷售市場的規(guī)模,其必將更好地服務(wù)于我國民生民政事業(yè)和公益慈善事業(yè)持續(xù)創(chuàng)新發(fā)展。