周敏 江西省公安廳科技信息化總隊 南昌市 330000
隨著金盾工程的推進,警務(wù)信息系統(tǒng)開始蓬勃發(fā)展。一直以來,警務(wù)應(yīng)用系統(tǒng)部署于公安內(nèi)網(wǎng),主要用戶是公安民警,核心任務(wù)就是提供快速、準(zhǔn)確的信息化手段滿足“打、防、管、控”需求。由于民警數(shù)量相對固定、訪問量有限,所以,內(nèi)網(wǎng)警務(wù)系統(tǒng)大部分采取傳統(tǒng)的三層架構(gòu)就能滿足需求。
近年來,“放管服”改革快速推進,要求公安機關(guān)向互聯(lián)網(wǎng)開放能力,直接為廣大群眾公安政務(wù)服務(wù), 讓企業(yè)和群眾少跑腿、好辦事。這一要求給我們公安機關(guān)提出了新的信息化建設(shè)命題,就是如何架構(gòu)滿足海量用戶高并發(fā)訪問需求的互聯(lián)網(wǎng)警務(wù)應(yīng)用系統(tǒng)。廣義的互聯(lián)網(wǎng)警務(wù)系統(tǒng)一般包括三大部分:一是互聯(lián)網(wǎng)端應(yīng)用,通常需要進行身份驗證、業(yè)務(wù)數(shù)據(jù)獲取、業(yè)務(wù)邏輯處理等;二是邊界網(wǎng)關(guān),主要任務(wù)是內(nèi)外網(wǎng)數(shù)據(jù)交互;三是內(nèi)網(wǎng)端警種業(yè)務(wù)系統(tǒng),主要實現(xiàn)業(yè)務(wù)辦理和結(jié)果反饋。本文僅討論互聯(lián)網(wǎng)端的警務(wù)系統(tǒng)設(shè)計。
互聯(lián)網(wǎng)警務(wù)系統(tǒng)與傳統(tǒng)警務(wù)系統(tǒng)最大區(qū)別就是由用戶數(shù)量的不同而帶來的高并發(fā),核心指標(biāo)就是QPS(每秒處理請求數(shù))。警務(wù)內(nèi)網(wǎng)的QPS一般在千級,因此,傳統(tǒng)的客戶端-應(yīng)用服務(wù)器-數(shù)據(jù)庫服務(wù)的結(jié)構(gòu)即能夠很好滿足,但互聯(lián)網(wǎng)端面對的全國上億群眾,QPS每秒數(shù)萬是很正常的,需要新的架構(gòu)以滿足業(yè)務(wù)需求。傳統(tǒng)集中式結(jié)構(gòu)的縱向擴展特性,決定了其性能的非線性增長,而且集群規(guī)模越大,性能衰減越厲害,昂貴的成本無法覆蓋激增業(yè)務(wù)處理需求。因此,對業(yè)務(wù)系統(tǒng)進行解耦、拆分、橫向擴展,構(gòu)建分布式系統(tǒng)成為當(dāng)前互聯(lián)網(wǎng)業(yè)務(wù)的首選。
互聯(lián)網(wǎng)警務(wù)系統(tǒng)的核心設(shè)計思想就是用分布式結(jié)構(gòu)來實現(xiàn)低成本、高并發(fā)、高可擴展要求。主要的技術(shù)手段就是對信息系統(tǒng)進行縱向解耦和橫向拆分,將3層結(jié)構(gòu)解耦為客戶端、接入層、Web前端、接口網(wǎng)關(guān)層、微服務(wù)、緩存層、數(shù)據(jù)庫層6層結(jié)構(gòu)。在Web層、接口網(wǎng)關(guān)層使用負(fù)載均衡,做成高可用集群;在微服務(wù)層,將業(yè)務(wù)邏輯進行解耦,將應(yīng)用系統(tǒng)功能進行解耦,拆分為最小服務(wù)單位,由管理中心進行統(tǒng)一調(diào)度和維護,向下層請求數(shù)據(jù),向上層提供服務(wù);在緩存層,使用集群存儲熱點數(shù)據(jù),以提高I/O讀寫;在數(shù)據(jù)庫層,使用分庫分表技術(shù),將結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)數(shù)據(jù)分離,將一個海量數(shù)據(jù)庫拆分成多個數(shù)據(jù)庫,提高數(shù)據(jù)讀寫速度。
用戶接入層設(shè)計主要是滿足分散在不同地域、不同網(wǎng)絡(luò)的用戶快速訪問Web服務(wù)的需求。根據(jù)這一目的,我們使用內(nèi)容分發(fā)技術(shù)(CDN)在不同區(qū)域部署Web服務(wù)器,提供靜態(tài)頁面元素的訪問。
將應(yīng)用層劃分為Web前端、接口網(wǎng)關(guān)以及微服務(wù)3層。其中,Web前端僅僅負(fù)責(zé)Html、JavaScript等頁面元素的緩存、解析和加載,直接與用戶瀏覽器進行交互。需要與服務(wù)器交互的工作都提交給后端接口網(wǎng)關(guān)。Web層采取負(fù)載均衡集群部署的方式,對外提供一個虛擬IP,提供用戶訪問。負(fù)載均衡的基本思想是把高并發(fā)的訪問平均分配到每一個服務(wù)器節(jié)點上,從而減小每一個節(jié)點的壓力。
接口網(wǎng)關(guān)部署于Web前端之后、微服務(wù)之前,是外界系統(tǒng)和內(nèi)部系統(tǒng)之間的一道門,所有的客戶端請求通過網(wǎng)關(guān)訪問后臺服務(wù)。接口為了應(yīng)對高并發(fā)訪問,接口服務(wù)網(wǎng)關(guān)通常做成Nginx負(fù)載均衡集群。外部請求經(jīng)過負(fù)載均衡后路由到網(wǎng)關(guān)集群中服務(wù),由網(wǎng)關(guān)服務(wù)轉(zhuǎn)發(fā)到后臺微服務(wù)進行業(yè)務(wù)處理。服務(wù)網(wǎng)關(guān)作為內(nèi)部系統(tǒng)的邊界,它有以下基本能力:
(1)動態(tài)路由
動態(tài)的將請求路由到所需要的后端服務(wù)集群。
(2)限流和容錯
為每種類型的請求分配容量,當(dāng)請求數(shù)量超過閥值時拋掉外部請求,限制流量,保護后臺服務(wù)不被大流量沖垮; 當(dāng)內(nèi)部服務(wù)出現(xiàn)故障時直接在邊界創(chuàng)建一些響應(yīng),集中做容錯處理,而不是將請求轉(zhuǎn)發(fā)到內(nèi)部集群,保證用戶良好的體驗。
(3)身份認(rèn)證和安全性控制
對每個外部請求進行用戶認(rèn)證,實現(xiàn)安全控制。
(4)監(jiān)控和日志
網(wǎng)關(guān)可以監(jiān)控系統(tǒng)運行狀態(tài)、收集訪問日志信息,通過分析日志內(nèi)容,對后臺系統(tǒng)做進一步優(yōu)化。
我們可以采用Spring Cloud Netflix框架的開源組件Zuul來實現(xiàn)網(wǎng)關(guān)服務(wù)。
微服務(wù)設(shè)計就是進行應(yīng)用軟件功能分解,將系統(tǒng)不同職能的模塊分成不同的服務(wù)、分布在不同的服務(wù)器上,各個服務(wù)之間通過統(tǒng)一的注冊管理中心進行相互調(diào)用和對外服務(wù)。例如將一個在線商店系統(tǒng)劃分成訂單管理中心、客戶信息管理中心、商品管理中心等多個服務(wù)中心。微服務(wù)模塊通過接口網(wǎng)關(guān)集群對外服務(wù),內(nèi)部通訊可以采取兩種通訊框架:一是基于HTTP協(xié)議的同步機制(REST、RPC),典型代表是阿里巴巴開源的分布式服務(wù)框架Dubbo;二是基于消息隊列的異步分布式消息處理系統(tǒng),例如Kafka、RabbitMQ。這種分布式的通訊機制保障了Web服務(wù)高并發(fā)訪問能力。
使用Memcache,Redis等緩存數(shù)據(jù)庫作為緩存層,存儲數(shù)據(jù)庫熱點數(shù)據(jù)以及不常改變數(shù)據(jù),直接在內(nèi)存中快速讀取數(shù)據(jù),從而避免從硬盤多次讀寫數(shù)據(jù),大大提升響應(yīng)速度。
對于互聯(lián)網(wǎng)業(yè)務(wù)常常需要提交的圖片以及其他非結(jié)構(gòu)化附件文檔,采取文件服務(wù)器或?qū)ο蟠鎯iT存放,減少網(wǎng)絡(luò)數(shù)據(jù)流量,提升系統(tǒng)可用性。
數(shù)據(jù)庫服務(wù)為上層Web應(yīng)用提供關(guān)系式或結(jié)構(gòu)化的數(shù)據(jù)存儲與查詢支持,是整個系統(tǒng)核心所在?;ヂ?lián)網(wǎng)數(shù)據(jù)庫通常采用開源MySQL、PostgreSQL等數(shù)據(jù)庫。在數(shù)據(jù)庫架構(gòu)上,在業(yè)務(wù)負(fù)載較低時可以采取主備模式,當(dāng)負(fù)載上升后,應(yīng)用采用一主多從的分布式集群,進行讀寫分離、業(yè)務(wù)分擔(dān)。在數(shù)據(jù)庫設(shè)計上,可以進行數(shù)據(jù)分散存儲,一是業(yè)務(wù)分庫,按照業(yè)務(wù)模塊將數(shù)據(jù)分散到不同的數(shù)據(jù)庫服務(wù)器中,每臺服務(wù)器負(fù)責(zé)一個業(yè)務(wù)子庫,降低單庫數(shù)據(jù)容量,提升讀寫效率;二是數(shù)據(jù)分表,使用垂直分表或水平分表技術(shù),將單表數(shù)據(jù)量減少。垂直分表一般是將數(shù)據(jù)表中不常用的字段分離出去,減少磁盤讀寫量;水平分表是按照某種算法如時間、范圍、hash函數(shù)等將數(shù)據(jù)表切分成多個同樣結(jié)構(gòu)的數(shù)據(jù)表,提升單表查詢性能。
通過分布式改造,整個系統(tǒng)框架從應(yīng)用到數(shù)據(jù)、從前端到后端,都是以微服務(wù)和大集群的方式對外提供服務(wù),只需要橫向增加服務(wù)器就能夠線性提升處理能力,滿足海量用戶高并發(fā)訪問需求,為互聯(lián)網(wǎng)警務(wù)系統(tǒng)提供堅實支撐。基于這一系統(tǒng)架構(gòu)設(shè)計,我們建設(shè)了江西省為民服務(wù)網(wǎng)上辦事系統(tǒng),為全省5000萬群眾提供互聯(lián)網(wǎng)辦事服務(wù),實現(xiàn)了江西公安警務(wù)服務(wù)的智能化、便利化。