一体化数据访问服务关键技术

2021-05-20 06:51孙周军李高洁乔文文何文春
计算机工程与设计 2021年5期
关键词:格点气象服务器

孙周军,郭 捷,李高洁,乔文文,何文春

(1.广东省气象探测数据中心 数据共享科,广东 广州 510080;2.广东省气象公共服务中心,广东 广州 510080;3.国家气象信息中心 系统工程室,北京 100081)

0 引 言

气象行业主要采用传统关系型数据库、集中式文件存储系统和磁带库对数据进行分级管理,在对历史天气进行研究过程中无法及时、便捷地使用完整时间序列的科研资料[1-3];业务系统对数据的调用多为直接访问数据源,与存储系统高度耦合度,存储系统的技术更新给业务应用的适配造成很大障碍;传统的存储策略和供给方式无法最大限度发挥访问效率与并发供给能力;数据资源分散存储和发布,没有集中统一的资料发布途径,科研人员无法获悉资料用法,管理与应用脱节严重。对海量数据的集中治理和高效服务已经是制约气象业务高质量发展的关键问题。

本文提出一体化数据访问服务方法(integrated database for easy access,IDEA),基于数据存储与应用系统间的中间层,作为异构数据系统与应用系统之间的适配器,消除数据存储与应用间的强依赖关系;集中多源地球科学数据管理,统一多种异构数据格式,融合实时与历史数据形成数据完整序列;利用服务总线和服务化技术,向气象行业及时集中发布数据资源,打通地球科学数据管理与科研应用的信息通道,提升了科学数据的管理和应用效能。

1 业务现状

(1)地域范围广:气象学研究的是大气圈内各层大气的运动规律,涉及到地球多圈层,且大气圈与星际太空并无明显分界。只要是科研需要,且观测手段能够达到的地方,几乎均采用立体观测平台,多手段测量获取相关数据。我国除过拥有涵盖本土的观测数据外,在WMO组织框架下,也有共享收集到全球部分观测、预报预测产品等数据。

(2)时空密度大:目前,全国已经建成5万多地面气象观测站,观测频率达每分钟每次,160多部多普勒天气雷达,观测频次达到6分钟每次;80多探空观测站,观测频率达秒级每次;8颗气象卫星,静止卫星观测频率达到6分钟每次;闪电定位、GPS/MET、负氧离子、大气成分等观测已遍布全国,观测设备的布设密度大,观测频次也大幅提升。

(3)数据种类多:气象业务和科研活动中涉及到气象领域本身和社会多行业的相关数据。气象领域以观测平台分类有天基、空基和地基观测资料等,包括卫星遥感、雷达、高空、海洋、辐射、农气、地面常规观测等资料,以及由业务系统或科研产生的预报、预警、服务产品、实验数据等;社会多行业的数据包括水利、农业、旅游、交通、渔业、航空、环保等专业数据,以及互联网相关数据。按照格式分类,包括文本、图片、视频、栅格等。

(4)高时效性:气象数据在不同的业务场景及时的被获取和应用,才能充分的发挥其价值,高时效性是气象资料的基本特征之一。天气预报、气候预测、防灾减灾和公众服务是气象业务活动的重要内容,临近预报在0-2小时内有效,短时预报在0-12小时有效,短期预报在随后1-3天有效等;数值天气预报也一直努力在更短时间内计算出范围更广、时间更长的预报,气象观测数据作为其参数输入,对其采集频次和传输时效要求达到秒级。

(5)一致性要求高:气象部门按照分级结构划分为观测台站、地市、省和国家气象局,所从事的业务和科研活动内容非常相似。各级气象局在进行数据质量控制、统计分析、公共信息发布等采用不同方法和参数变量,导致部门内数据存在差异,既造成不良的社会影响,也给科研工作也带来诸多不便。气象数据的一致性需要由顶层进行统筹规划和解决。

因此,气象部门需要迫切建立具有高扩展性、高并发性、高时效性的规范化、集约化的统一气象科研数据治理策略和平台,为气象科研与业务系统正常运行提供强有力的数据支撑。

2 系统设计

2.1 系统架构

图1给出了平台的系统架构。平台涉及气象数据从生产到业务应用,涵盖数据探测感知、存储管理和数据服务等环节的统一规划。感知层是数据的来源,涵盖多行业的各类异构地球科学数据,通过质量控制、编码解码、统计分析、格式转换形成统一数据源。数据存储层是数据的存储管理,通过多态数据库(关系型数据库、分析型数据库、内存数据库、文件/对象数据库等)、数据同步、读写分离、分库分表等进行的分类整理和全序列存储管理。分布式服务层是数据的调用方法和算法封装,包括统计分析、图像渲染、等值线追踪、站点数据插值等,通过Docker容器进行发布管理,形成分布式的服务层。平台服务层是面向管理用户提供数据、算法、可视化服务、众创服务发布管理和性能监视等功能,通过RESTful、Web Service、服务总线、在线调试、性能监视等提供标准化的调用API接口和使用资源清单。应用层则是该平台提供数据、算法和服务的最终用户应用系统。

图1 系统架构

2.2 软件架构

图2给出了平台的软件架构。平台的应用层由多个等功能Web应用服务器组成,利用硬件负载均衡服务器组件集群形成高可用架构;Web应用服务器采用混合MVC架构和Hibernate持久化架构,系统逻辑清晰、层次分明、松散耦合,使得系统具有较强的扩展性和兼容性。缓存层是提升整套业务系统并发能力的核心。采用了双Redis[4]集群作为气象数据的高速缓存,对缓存有效时限内的相同数据请求,直接通过内存提供数据服务,避免对底层数据库和存储系统发出IO请求,降低了存储层的并发压力。数据层主要包括平台字典数据和多圈层地球科学数据的存储,与缓存层和应用层分布在不同的网络区域。

图2 软件架构

2.3 部署架构

图3给出了平台的部署架构。平台主要有两个集群:①基于Socket的格点服务集群;②基于HTTP的一体化数据服务集群,包含了格点集群服务的HTTP协议实现。

图3 系统架构

基于Socket的格点集群服务:分别在独立的两台服务器(GIFT-1、GIFT-2)上部署格点数据服务(GridDataServer)软件,由高可用软件组建主备集群,主服务器绑定服务IP对外发布服务,主备间通过心跳私网进行数据同步和服务健康性的信息传递。由于精细化格点预报订正平台对数据的交互操作时效性要求非常高,因此采用SOCKET进行原生数据传输交换。

基于HTTP的一体化数据服务集群:分别在5台服务器上部署一体化数据访问服务总线,由两台硬件负载均衡将其组件为总线集群;Redis缓存服务利用格点服务集群高可用软件和服务器,搭建Redis集群提供缓存服务;MySQL、Oracle等利用自身数据库的集群架构,文件数据、卫星数据、图形产品和格点数据按照类别存储在不同服务器上,并对应部署FileDataServer、SateDataServer、ImageDataServer、GridDataServer等微服务,形成数据服务层;一体化数据访问服务总线根据访问路由策略,从目前微服务中获取数据。平台各环节均采用了集群、高可用方法从而避免了系统单点故障的发生。

2.4 功能划分

图4给出了平台的主要功能划分。平台主要由服务总线、资源管理和数据服务三大模块构成。

图4 功能分布

服务总线是平台用户的统一出入口。提供数据、接口和算法等资源的分类浏览和检索服务;通过基于角色权限控制技术确保平台的访问安全;通过建立资源访问黑、白名单确保数据、算法和服务资源安全;系统建立总体访问量、用户访问量等流量信息内存模型,新的请求发起之前进行流量限制策略对比,达到限制则立即中断访问,确保系统在有效负载下运行;平台的各类数据存放在不同存储系统,算法与服务也以微服务方式部署在不同主机,服务总线收到用户的资源访问请求后,根据访问接口名称、数据种类与时间戳进行综合判断确定提供服务的访问链路进行重新路由定位,它是平台的核心内容之一;平台根据每次调用的详细日志记录,分析各个接口的平均耗时、最大耗时,以及时间段内的访问量和缓存命中率,综合分析平台运行的性能等;在线调试是提供给用户的可视化在线资源调用模拟环境。

资源管理是管理员和众创人员注册、发布和变更各类资源的统一入口。各类资源的需求都会随业务需求发生变化,例如新增数据种类,新增服务算法,修改算法具体实现、变更接口参数、变更访问路由策略等,该模块提供了以上可视化的操作功能。

接口服务是平台部署的各类数据访问、内嵌算法服务和众创算法服务微服务集。主要涵盖站点、格点、文件、图形产品、卫星数据等的写入、读取功能;内置有统计分析、图形渲染与格点数据的融合、插值、裁剪等算法,众创算法服务主要由第三方公司编写的具有复用性的算法或业务功能微服务。

以上三大模块构成平台的整体框架,其中平台还涉及到多类数据的融合、格式转换、日志维护等,这些功能相互协调才能形成完整的平台。

3 关键技术

平台的综合运用多种IT技术,其中多源异构数据融合是利用同步技术将结构化与格式转换技术将非结构化的数据集中统一存储,解决数据格式、存储策略、存储技术和管理系统集中统一化问题,是平台数据支撑基础;网格数据裁剪和插值等技术,主要是面向基于位置气象应用场景提供的微服务算法,是平台算法服务的部分内容;熔断技术是平台主动检测微服务性能、响应时间是否正常,当异常发生时则主动将该服务进行隔离,避免过多请求排队等待该服务响应,导致平台整体性能和容量被挤占无法正常服务,是平台正常运行的关键;高可用和高并发是决定平台承载容量的关键,缓存、数据压降低平台响应延时,提升并发能力;高可用软件保证核心数据的热备,负载均衡保证服务节点共担服务压力,提升数据与服务的可靠性。下面详细对关键技术实现进行详述。

3.1 结构化数据融合

采用同步技术实现数据的主-备分离存储,主库提供数据的写入服务,备库提供检索服务,读写分离策略是提升系统服务能力的常用手段。平台涉及的数据库的同步技术根据捕获数据源发生变更方法分为ETL、触发器和归档日志同步3种。ETL(extract-transform-load)同步,即将源数据抽取出来后,进行数据字段转换等处理操作,再插入到目标存储系统中的过程,该方法最为简单,但同步时效性最差。触发器同步,在源数据表上创建触发器对表格数据的变更记录在表中,自行开发程序读取变更记录在目标数据库进行数据变更操作回放,达到同步目的。归档日志同步,数据库在运行过程中均会对数据的变更产生归档日志,由第三方软件产品抽取日志,并对变更数据进行可选择处理后在目标库进行数据变更操作回放,达到数据同步目的。主流的工具有(oracle goldengate,OGG),可兼容绝大多数关系型数据库同步等。

图5给出了平台的数据同步业务流程。采用3种同步技术将分散、凌乱、异构数据整合到缓冲数据库临时存储短时数据,利用OGG将数据同步到应用数据库中的短时数据表,随时间推移短时数据转变为历史数据被迁移到按年存储的历史表中,服务平台根据用户请求数据的时间参数决定访问对应数据表,从而向业务提供合适的数据和增强系统的并发承载能力。

图5 平台数据同步业务流程

3.2 格点数据融合

气象行业对于网格数据的较多采用GRIB、NetCDF、HDF、AWX和自定义二进制格式进行存储。格式不同,但格点数据的使用方法非常类似,为此许婧[5]、刘立明[6]、肖华东[7]等利用Mars系统对气象模式数据管理和业务应用进行研究,但从实际的使用效果来看,复杂命令集和自定义功能扩展的局限性给气象业务系统开发提出较高技术要求。

因此,根据实际业务需求(例如:裁剪、插值、升降尺度等操作)设计符合气象业务需求的统一格点数据格式,建立集中存储的格点数据库和格点数据统一化处理模块,将天气、气候、海洋、环境模式,大气再分析和天气实况等进行规整化处理,为开发格点产品服务集提供数据基础。图6详细描述了格点数据融合业务流程。

图6 格点数据融合业务流程

3.3 裁剪技术

数值模式产品大多为涵盖为全球、半球、洲际或局部地区,实际应用中区域性需求非常普遍,为提高业务处理效率需要对数据进行按需裁剪。根据文献[8]中提出网格裁剪的内缩和外扩方法,根据用户裁剪范围的始、终点落在网格点的具体方位不同给出对应的处理方法,图7为具体处理,本文设计了内缩和外扩方法的具体实现算法。

图7 内缩算法效果

算法1: 内缩和外扩裁剪算法—左上角定位

输入:ltP左上坐标,rbP右下坐标,xArray是X方向的升序经度值数组,yArray是Y方向的升序纬度值数组,offsetleft为采用内缩或外扩标识位。

输出:ret取值点的下标值

(1)functionfindLeftTopP(ltP.x,rbP.y,xArray,yArray,offsetleft)

(2)ret←0

(3)tmpIndex1←0,tmpIndex2←0,i←0;

(4)whilei

(5)ifltP.x-xArray[i]<=0.00001then

(6)tmpIndex1←tmpIndex2←i;

(7)break;

(8)elseifltP.x-xArray[i]>0.00001then

(9)break;

(10)else

(11)tmpIndex1←i;

(12)tmpIndex2←i+1;

(13)i++;

(14)endif

(15)endwhile

(16)ifoffsetleftthen

(17)ret←tmpIndex1

(18)else

(19)ret←tmpIndex2

(20)endif

(21)returnret

(22)endfunction

3.4 插值算法

基于用户位置的气象服务场景中,需要从网格数据中提取当前位置的气象要素(天气实况和预报),因此需要通过插值方法从相邻网格中计算当前位置的气象要素值。本系统采用气象中常用的最近距离法[9]、反距离加权[10](IDW)和双线性插值算法(BL)。网格密度小于1 km*1 km 时采用NN算法较为合理,否则可采用IDW或BL插值算法。本文给出具体的任意位置气象要素插值算法如下:

算法2: 任意点求值算法

输入:lon经度值,lat纬度值,type插值算法类型

输出:ret气象要素值

(1)functioninterpolate(lon,lat,type)

(2)ret←UNDEFINED

(3)xArray←getXPointsFromGridFile()

(4)yArray←getXPointsFromGridFile()

(5)ifisInThePoint(xArray,yArray,lon,lat)then

(6) ret←findVal(findP(lon,xArray,lat,yArray));

(7)else

(8)ltP←findVal(findLeftTopP (lon,lat))

(9)lbP←findVal(findLeftButP (lon,lat))

(10)rtP←findVal(findRighTopP (lon,lat))

(11)rbP←findVal(findRighButP (lon,lat))

(12)switch(type)

(13)caseNN:

(14)ret←NNInterpolate(ltP,lbP,rtP,rbP)

(15)caseIDW:

(16)ret←IDWInterpolate(ltP,lbP,rtP,rbP)

(17)caseBL:

(18) ret←BLInterpolate(ltP,lbP,rtP,rbP)

(19)endswitch

(20)endif

(21)returnret

(22)endfunction

(23)

(24)functionfindP(lon,xArray,lat,yArray)

(25)i←0,j←0;

(26)whilexArray[i++]-lon<0.00001do

(27) break;

(28)endwhile

(29)whileyArray[i++]-lat<0.00001do

(30) break;

(31)endwhile

(32)point.x←i,point.y←j;

(33)returnpoint;

(34)endfunction

(35)

(36)functionfindVal(point)

(37)valArray←getXPointsFromGridFile()

(38)xRowGridLen←xArray.len

(39)yRowGridLen←yArray.len

(40)index←(int)(point.x/xRowGridLen)+point.x%xRowGridLen+(int)(point.y/yRowGridLen)

(41)returnvalArray[index]

(42)endfunction

3.5 熔断设计

平台的服务总线会根据用户调用的数据内容将请求路由到后台服务,当后台服务出现故障、性能下降或超出承载能力时,则需要通知服务总线限制或暂停对该类调用提供服务,避免服务总线负载大量的不可达服务而使整个平台无法提供其它数据服务的情况。

设计链路状态数据结构S={r,s,a,mi,ma,ut}, 其中r为平台能唯一标识的服务链路,s为服务是否可达状态,a为服务平均响应时间,mi为服务响应最小时间,ma为服务响应最大时间,ut为链路状态的更新时间。设计链路健康性检查,定时探测更新平台中的所有服务链路健康状态,利用高速缓存持久化保存。服务总线收到请求首先检查服务链路状态,然后依据表1所示熔断规则进行处理。

表1 服务熔断处理策略

3.6 格点服务高可用设计

格点服务是数字网格预报业务的基础,它提供了网格数据的写入、读取和插值服务,该服务的中断或数据缺失直接影响预报业务的中断,利用RoseMirrorHA[11]设计了服务高可用和主、备数据准实时同步的架构。图8由2台服务器、高可用软件、公网与私网组成,两台服务器安装相同的业务软件,高可用软件创建服务IP对外提供服务,当用户发起读取或写入数据请求时,由主服务器进行响应,高可用软件将发生变化的数据块通过私网同步到备份服务器。当主服务器宕机或格点服务掉线,备服务器会探知主服务器异常发生,则绑定服务IP并接管格点服务,由此达到数据一致且服务高可用的效果。

图8 格点服务高可用架构

3.7 高并发策略

数据的存储层性能和网络传输速率是影响系统并发的两个关键因素,系统利用缓存技术减少系统对数据存储的读写操作,利用压缩技术减少数据与客户端之间数据量,从而提升平台的响应能力。

(1)高速缓存:服务总线根据调用请求中的参数值,以接口定义中的参数顺序形成唯一的Key,若命中缓存,则从缓存中读取数据;否则,从存储系统检索数据,将原始结果加工为字符型Value,存储到缓存系统后,返回给用户,从而缓解大量相同数据请求对存储系统造成IO的冲击,提高数据服务响应能力和并发能力。主要实现算法如下:

算法3: 缓存算法

输入:apiObj接口定义对象

输出:retObj返回数据结果对象

(1)functiongetDatasFromCache(apiObj)

(2)ret←newObject{}

(3)key←getKeyStr(apiObj)

(4) if Redis.contains(key)

(5)ret←Redis.get(key)

(6) else

(7)ret←getDatasFromDisk()//根据存储类型具体实现方法有所差别

(8) Redis.put(key,ret,apiObj.expireTime)

(9) end if

(10) returnretObj;

(11)endfunction

(12)functiongetKeyStr(apiObj)

(13)ret←UNDEFINED

(14)list←sortParameters(apiObj.parameters)

(15)whilei

(16)p←list.get(i)

(17)ret←‘.’+p.val

(18)i++

(19)endwhile

(20)returnret

(21)endfunction

(22)functionsortParameters(ps)

(23)fori=ps.size→0do

(24)forj=0→i-1do

(25)ifps[j]>ps[j+1]

(26)temp←ps[j]

(27)ps[j]←ps[j+1]

(28)ps[j+1]←temp

(29)endif

(30)endfor

(31)endfor

(32)endfunction

(2)数据压缩:平台采用HTTP协议与客户端进行数据交换,对于格点、卫星、图形产品和文件等二进制数据,需要对数据进行Base64编码后才能返回用户,但Base64编码会让数据量增长原有长度的1/3,从而增加网络的传输时延,特别是在大数据量情况下影响非常大。因此,平台调用设计启用与关闭数据压缩的系统参数,由调用用户控制是否进行压缩传输。平台默认使用GZIP压缩算法进行数据传输,具体的编解码过程和效率可参见文献[12]。

(3)负载均衡:用户通过网络直接与Web服务器相连接,但如果服务器出现故障,则无法正常提供服务;即使服务器正常工作,但当很多用户同时访问服务器,超过服务器的承载能力,则会出现响应慢甚至无法连接的情况,这两种情况都影响系统可用性和并发性。将多个等功能的服务器组成集群,由负载均衡将用户的访问请求分发到不同的服务器,可提高平台整体的承载能力,也可快速扩展系统承载力,同时容忍部分服务器宕机情况发生,很好解决了上面提到的两个问题。

4 性能分析与业务应用

4.1 性能分析

针对一体化数据访问平台和省级综合气象信息共享平台(简称:CIMISS)[13]进行性能对比测试,测试终端环境如下:硬件环境:CPU I5-4590 3.3 GHz;内存8 GB;硬盘500 GB;千兆网;软件环境:JMeter3.1,Windows 10 64位。

表2以调取广东某观测时国家气象站资料为例,分别在10、20、50、100、150、200并发下测得两套系统的平均响应时效和业务吞吐量,一体化访问平台的优于CIMISS系统,且在200并发时平均响应314 ms响应,事务处理能力达到530 TPS,能够满足业务应用需求。

表2 站点数据访问性能测试

表3以调取广东范围格点预报资料为例,10-200并发时,一体化访问服务平台访问效率和吞吐量远远于CIMISS系统,且在200并发时在15 ms内响应,事务处理能力达到4787 TPS,能够满足全省智能网格预报业务的访问需求。

表3 格点数据访问性能测试

表4以调取华南区域雷达拼图产品为例,在10、20并发时CIMISS的时效性和吞吐量相差不大,但在50-200并发时一体化平台明显优于CIMISS平台,且在200并发时系统能在41 ms内响应,事务处理能力达到2017 TPS,能够满足全省图形产品访问的业务支撑。

表4 图形产品访问性能测试

综合以上的响应性能和并发能力对比测试,一体化数据访问平台的设计改善了数据访问的时效和系统的吞吐量,且在200并发时能在秒级以内响应用户请求,平台的事务处理能力最少530 TPS,最大达到4787 TPS,完全满足每日全省的气象业务应用访问需求,达到预期的设计目的。

4.2 业务应用

系统自应用以来,用户访问量逐年增长,2019年相比2014年度数据下载量增长100倍,访问量增长近50倍,如图9所示。目前,系统单日数据访问下载量达3.2 TB,单日访问次数达3000万次,成功支撑了广东省精细化格点预报订正平台[8]、广东省SWIFT系统平台[8]、珠海城市生态气象综合系统[14]、缤纷微天气公众服务平台等核心业务。

图9 平台逐年访问量统计

5 结束语

本文分析了气象领域的数据感知现状和数据治理与应用中存在的问题,形成的一体化数据访问服务平台为气象数据的治理和分析应用提供了统一环境,搭建了数据管理者与使用者之间的关键通道。该平台对气象行业和技术有以下贡献:①综合利用多态数据存储管理技术和数据同步技术将地球多圈层科研数据按照存储格式分类规整处理,形成了一体化的综合型气象数据仓库。②采用同步技术和分布式服务技术从逻辑上屏蔽了数据源的异构性,借用服务总线设计思路形成标准化的数据、算法等服务集,为气象业务形成一体化的数据调用环境。③提供的数据可视化与算法服务,满足了气象业务中多数产品制作需求,推动了数据服务向应用服务的观念转型。④在全国气象行业率先以RESTful API的方式向业务单位发布数据,为全国气象综合业务系统的建设提供先进经验。

随着气象业务应用复杂度增加,其对数据的种类和数量也在增加,可视化服务的个性化需求更加突出,平台面临数据、算法和服务能力的多重挑战。后期研究中除兼容更多先进存储技术外,针对用户个性化需求研究算法服务众创功能,结合微服务和容器技术降低平台的耦合度,增强平台的横向扩展能力和服务处理能力。

猜你喜欢
格点气象服务器
带有超二次位势无限格点上的基态行波解
气象树
一种电离层TEC格点预测模型
《内蒙古气象》征稿简则
通信控制服务器(CCS)维护终端的设计与实现
带可加噪声的非自治随机Boussinesq格点方程的随机吸引子
大国气象
美丽的气象奇观
中国服务器市场份额出炉
得形忘意的服务器标准