王占林,辛亞芳,馬 亮,趙根莊,石偉偉,朱衛(wèi)芳
1.石家莊市自然資源和規(guī)劃局,河北 石家莊 050011;
2.北京超圖軟件股份有限公司,北京 100015;
3.河北省地理信息集團有限公司,河北 石家莊 050031
時空大數(shù)據(jù)平臺(簡稱平臺),是基于統(tǒng)一的時空基準,匯聚融合基礎時空數(shù)據(jù)、公共專題數(shù)據(jù)、物聯(lián)網(wǎng)實時感知數(shù)據(jù)、互聯(lián)網(wǎng)在線抓取數(shù)據(jù)以及其他擴展數(shù)據(jù)等,并對這些數(shù)據(jù)進行統(tǒng)一管理、共享應用、挖掘分析、泛在服務的技術系統(tǒng)[1-3]。2012年,國家測繪地理信息局提出開展智慧城市時空信息云平臺建設試點工作,平臺已逐漸成為測繪地理信息工作實現(xiàn)“兩支撐、一提升”定位的服務載體、自然資源管理的統(tǒng)一底板、智慧城市的時空基礎設施、數(shù)字孿生城市的空間數(shù)字底盤等[1-4]。
受限于技術本身的發(fā)展,早期的平臺建設,多采用面向服務架構(SOA),將平臺的不同功能單元進行拆分,主要有通用數(shù)據(jù)服務、目錄服務、元數(shù)據(jù)服務、數(shù)據(jù)發(fā)布服務、地圖操作服務、地理編碼服務、空間分析服務等。這些服務基于SOAP(Simple Object Access Protocol)、JMS(Java Messaging Service)等協(xié)議,通過企業(yè)服務總線(ESB),實現(xiàn)不同服務之間的互聯(lián)互通。這種架構建設的平臺,具有一定的分布式服務能力,但各類服務交互必須通過ESB實現(xiàn)。
隨著平臺在各領域的不斷滲透應用,其核心基礎地位不斷凸顯,同時平臺的用戶體量不斷增加、應用需求不斷拓展、業(yè)務邏輯與功能日益復雜,造成功能服務拆分的粒度越小、業(yè)務功能越多,基于SOA的服務注冊與調(diào)用也會越復雜、效率也會受到影響[5]。另一方面,基于SOA的架構,軟件整體體量仍然較大,在利用虛擬化技術時,需要制作整個平臺的鏡像文件,當平臺用戶僅對其中空間分析一個服務功能需求量較大,也需要對虛擬機中的整個系統(tǒng)功能進行復制擴展,未能充分有效利用資源。因此,在大用戶量、大業(yè)務量的情況下,如何保障平臺穩(wěn)定、高效的服務能力,如何快速定位故障并解決問題,如何保障平臺的快速迭代更新等,都成為當前平臺建設或升級面臨的重要問題[4-5]。
在微服務、容器等技術的推動下,云原生(Cloud Native)逐步成為當前主流的信息化架構,其基于微服務架構思想、以容器為部署載體、可自動化編排、借助敏捷方法支持持續(xù)迭代和運維自動化,依托云基礎設施環(huán)境,可實現(xiàn)彈性伸縮、動態(tài)調(diào)度、優(yōu)化資源利用率等[6-7]。基于云原生架構建設時空大數(shù)據(jù)平臺,將平臺服務按需拆分為不同的微服務,以容器為載體進行獨立部署,并通過自動化編排工具,實現(xiàn)平臺服務的高效管理,在應對大用戶量、大業(yè)務量訪問時,將大大提升平臺的高可用、高并發(fā)、高彈性等能力。云原生架構在傳統(tǒng)IT領域發(fā)展迅速,而結合時空大數(shù)據(jù)平臺的實際需求,微服務如何拆分與治理、容器環(huán)境如何部署與編排等,目前業(yè)內(nèi)還未有完整的研究[8-11]。本文將結合時空大數(shù)據(jù)平臺高可用、高并發(fā)、高彈性的實際需求,提出基于云原生的平臺架構設計,并通過石家莊實例進行驗證。
本文將云原生的核心理念與時空大數(shù)據(jù)平臺的核心要求相結合,基于微服務架構、容器化、自動化編排等技術,并融合DevOps(Development和Operations的組合詞,表示開發(fā)運維一體化)與持續(xù)交付的思想,提出石家莊時空大數(shù)據(jù)平臺建設的總體架構,形成以云基礎設施為支撐,以時空大數(shù)據(jù)匯聚、融合、管理、共享、分析等于一體的平臺與應用服務支撐體系,為石家莊自然資源管理及城市治理等領域應用提供時空基礎信息、可視化應用及空間分析服務(圖1)。
圖1 平臺架構Fig.1 Platform architecture
基礎設施層。直接利用石家莊市自然資源和規(guī)劃局內(nèi)的基礎軟硬件設施及政務云環(huán)境,采用云原生部署模式,基于Docker創(chuàng)建Kubernetes構建一個容器的調(diào)度服務,便于容器集群管理,依據(jù)運行所需資源動態(tài)擴展。
數(shù)據(jù)層。按照物理分布、邏輯集中的方式,基于統(tǒng)一時空基準,匯聚融合基礎時空數(shù)據(jù)、公共專題數(shù)據(jù)、物聯(lián)感知數(shù)據(jù)、在線抓取數(shù)據(jù)等內(nèi)容,并根據(jù)空間、語義關聯(lián),建立起數(shù)據(jù)之間的關聯(lián)關系,形成石家莊市統(tǒng)一的時空大數(shù)據(jù)一張圖。
平臺層。采用開發(fā)運維一體化的模式,使用GitLab管理代碼、Sonatype搭建私有組件庫、Harbor構建鏡像倉庫、Jenkins持續(xù)集成和Jira缺陷管理,整合促進開發(fā)、技術運營和質(zhì)量保障部門之間的溝通與協(xié)作;基于微服務架構,建立數(shù)據(jù)服務、空間分析服務、專題應用服務、大數(shù)據(jù)服務、定制接口等5大類微服務,并提供注冊中心、配置中心、遠程調(diào)用、負載均衡、服務網(wǎng)關、鏈路跟蹤等微服務治理基礎設施,形成平臺的核心能力框架;最后通過平臺門戶,為用戶提供集約、高效、靈活的技術、業(yè)務支撐能力,實現(xiàn)核心功能只開發(fā)一次。
應用層。是解決各部門實際需求的業(yè)務應用系統(tǒng),可以通過共享、按需組合平臺的數(shù)據(jù)、服務等,實現(xiàn)快速搭建。
微服務架構的核心,是將復雜的單體應用拆分為多個、獨立的服務模塊,每個模塊專注單一業(yè)務功能,并可以獨立編譯及部署,同時各模塊間通過輕量級的交互機制來通信,組合為整體對外提供完整服務,從而保證了更好的彈性與故障隔離。微服務的拆分粒度是微服務架構的基礎,過粗或過細都會影響應用效果。
結合時空大數(shù)據(jù)平臺的業(yè)務需求,本文采用基于業(yè)務驅(qū)動的方式,結合功能占用資源、使用頻率等,將平臺功能服務劃分為數(shù)據(jù)服務類、空間分析類、專題應用類、大數(shù)據(jù)服務類、定制接口類等5個大類、28個小類的微服務,具體內(nèi)容如圖2所示。
圖2 平臺微服務劃分內(nèi)容Fig.2 Platform micro-service division
1)數(shù)據(jù)服務類。主要圍繞各類應用對數(shù)據(jù)本身的使用需求,按照不同的數(shù)據(jù)類型,劃分為矢量地圖服務、影像地圖服務、三維地圖服務、地理實體服務、地名地址數(shù)據(jù)服務、物聯(lián)感知數(shù)據(jù)服務以及其他專題數(shù)據(jù)服務等,并可根據(jù)新增數(shù)據(jù)類型進行擴展定制。
2)空間分析類。主要圍繞各類應用對空間計算、分析類的相關需求,劃分為空間量算服務、緩沖分析服務、疊加分析服務、統(tǒng)計分析服務、統(tǒng)計報表服務、專題制圖服務、地理編碼服務以及其他分析服務,并可根據(jù)新增分析需求進行擴展定制。
3)專題應用類。主要圍繞國土空間規(guī)劃、實施等過程的需求,劃分為合規(guī)性審查服務、控制線符合性檢測服務、選址分析服務、自定義疊加分析服務等。
4)大數(shù)據(jù)服務類。主要圍繞大數(shù)據(jù)存儲、分析與可視化的需求,提供相應的服務。
5)定制接口類。則圍繞一些功能性的應用需求,提供平臺管理AP、地理實體API、物聯(lián)感知API、在線抓取API、三維分析API、自定義API等。
微服務劃分后,平臺的業(yè)務拆分成一個個子服務,大量的微服務如何管理、配置、相互調(diào)用等成為核心問題。平臺利用Spring Cloud框架,構建了包括服務網(wǎng)關、注冊中心、配置中心、消息中心、許可中心等在內(nèi)的服務治理,并通過智能的負載均衡機制、彈性伸縮能力等,保證平臺整體的高可靠性和穩(wěn)定性。
如圖3所示,服務網(wǎng)關作為網(wǎng)絡關口、通道,是平臺所有服務的統(tǒng)一入口,同時承擔服務路由、安全認證、限流限額、訪問控制、路由、負載均衡、緩存、日志、轉(zhuǎn)換、映射、過濾、熔斷、注冊、服務編排、API管理、監(jiān)控、統(tǒng)計分析等非業(yè)務性功能,平臺所有客戶端、消費端的請求都通過統(tǒng)一的網(wǎng)關接入。注冊中心提供各獨立部署的微服務節(jié)點報告和發(fā)現(xiàn)功能,平臺依托Srping Cloud提供了注冊中心的組件,在開發(fā)業(yè)務功能服務、或者對外提供時空大數(shù)據(jù)服務時,都通過注冊中心注冊服務;服務調(diào)用方在進行服務調(diào)用時,通過注冊中心返回要調(diào)用服務的地址。配置中心用于提供集中配置與動態(tài)配置更新服務,平臺采用Spring Cloud提供了Config Server配置中心,為每個服務提供必要的配置信息。消息中心為各服務、各應用之間建立了一套通信機制,實現(xiàn)分布式系統(tǒng)下的消息傳播。如平臺配置中心某個配置項有變化時,就會對所有訂閱者發(fā)布消息,接收到消息的客戶端就會發(fā)起從服務端獲取新配置項的請求,實現(xiàn)配置的動態(tài)更新。許可中心實現(xiàn)微服務架構下根據(jù)硬件計算資源的許可方式,有效節(jié)約成本。
圖3 微服務治理Fig.3 Micro-service governance
容器化是一種輕量級的、建立在操作系統(tǒng)級的虛擬化技術,可以有效地將單個操作系統(tǒng)管理的資源劃分到孤立的組中,以更好地平衡有沖突的資源使用需求,是微服務的有效載體。
平臺引入容器化(Docker)技術,將平臺所劃分的微服務制作成Docker鏡像,并把所有鏡像存入指定的鏡像倉庫,部署時可直接拉取鏡像形成容器,通過容器運行的方式提供服務(圖4)。當平臺用戶發(fā)出部署請求時,機器主節(jié)點接收請求,根據(jù)各節(jié)點(1、2、3、N)的實時運行情況,選擇性能最好的節(jié)點執(zhí)行部署命令;該節(jié)點在接到命令后會從鏡像倉庫拉取所需的微服務鏡像,將鏡像部署成容器并持續(xù)運行。如果容器或節(jié)點機器在運行中出現(xiàn)故障,主節(jié)點會自動修復故障;若不能修復,則重新指定另外的節(jié)點機器部署所缺容器。
圖4 容器化部署Fig.4 Containerized deployment
平臺采用基于Docker容器的云原生部署模式,每個容器對應一個微服務,每個機器節(jié)點可承載多個容器,容器相對獨立、且與宿主機使用同一個內(nèi)核、部署無需考慮與操作系統(tǒng)等環(huán)境的配置工作等,性能損耗更小,部署更加便捷,故障修復能力更強。
管理一個容器并不復雜,而時空大數(shù)據(jù)平臺的服務劃分為多個微服務,每個微服務便需要多個容器共同支持運作。面對大規(guī)模的容器化的微服務,需要一種自動化編排的工具來對多個容器進行統(tǒng)一管理。
平臺利用Kubernetes作為時空大數(shù)據(jù)平臺微服務的管理工具,提供各類容器的自動化編排,包括容器的創(chuàng)建、部署、更新、維護、調(diào)度、集群等。如圖5所示,利用Kubernetes的容器調(diào)度策略,可以將平臺的所有容器統(tǒng)一管理,并支持一鍵部署、一鍵刪除、可視化監(jiān)控、日志收割、動態(tài)伸縮等服務。如要部署大數(shù)據(jù)分析類微服務集群時,可以進行一鍵部署;部署完成后,可以通過監(jiān)控界面的可視化監(jiān)控圖表,對每個容器在節(jié)點的運行情況進行動態(tài)監(jiān)控,包括容器在節(jié)點的平均CPU占用率及實時占用率、容器的平均網(wǎng)絡上傳(下載)速度及實時上傳(下載)速度、磁盤的平均占用率及實時占用率等。
圖5 容器自動化編排Fig.5 Auto-orchestration of the container
石家莊時空大數(shù)據(jù)平臺采用云原生架構,建立了28個微服務,支持平臺在線應用的同時,支撐自然資源調(diào)查監(jiān)測分析系統(tǒng)、自然資源規(guī)劃決策支撐系統(tǒng)等自然資源領域應用,以及智慧政務、智慧公安、智慧城管、智慧應急、智慧環(huán)保等應用。平臺具體運行環(huán)境見表1,相比傳統(tǒng)SOA架構,在高可用、高并發(fā)、高彈性等方面的能力具有明顯提升。
表1 平臺運行環(huán)境配置Tab.1 Platform operating environment configuration
在高可用方面。石家莊時空大數(shù)據(jù)平臺能夠更好地保障系統(tǒng)穩(wěn)定,更高效地實現(xiàn)運維。在傳統(tǒng)SOA架構下,出現(xiàn)故障導致功能不可用;平臺的集群化部署,涉及到操作系統(tǒng)、中間件等的部署與環(huán)境配置,需要2 h左右時間方可完成。在云原生架構下,一旦發(fā)現(xiàn)服務異常,會自動摧毀并重建對應的容器,保證服務不間斷供應;平臺的集群化部署,可以在1 min內(nèi)完成,大大提升工作效率。此外,云原生架構還具備良好的擴展性,當需求發(fā)生改變時,只需改造局部微服務,而非改造整個系統(tǒng)。
在高并發(fā)方面。石家莊時空大數(shù)據(jù)平臺能夠更有效地利用計算資源。平臺部署包約6 G左右。傳統(tǒng)SOA架構,搭建集群,需要考慮整個平臺的集群,占用資源較大。在云原生架構下,需要服務節(jié)點擴充時,僅需考慮某個或幾個微服務所需的計算資源,大大降低對計算資源的占用,提高利用效率。
在高彈性方面。石家莊時空大數(shù)據(jù)平臺針對每個微服務節(jié)點,能夠動態(tài)監(jiān)控其負載及健康情況,以實現(xiàn)負載均衡與彈性伸縮:當用戶量增加時、CPU的使用率上升時,可自動創(chuàng)建所需的微服務節(jié)點;反之,用戶量下降時,微服務節(jié)點數(shù)則會減少,計算資源也會降低。
自2021年7月上線以來,石家莊時空大數(shù)據(jù)平臺共服務249個用戶、1 572 279次訪問、981.44 h訪問時長,平臺服務整體穩(wěn)定高效。
本文提出并實現(xiàn)了基于云原生的時空大數(shù)據(jù)平臺,在時空大數(shù)據(jù)平臺涉及的微服務劃分,以及微服務治理、容器化部署、自動化編排等方面進行了研究與實踐,有效提升了平臺服務的高并發(fā)、高可用、高彈性等能力,讓平臺從能用變?yōu)楹糜?,同時大大降低了平臺管理、運維及未來升級擴展的成本,由此將進一步促進平臺的廣泛應用,進而增強測繪地理信息公共服務能力,服務自然資源管理與城市經(jīng)濟社會發(fā)展各領域。