基于无服务器架构的铁路应用开发资源共享与集成平台设计
2024-02-10曹海鹏唐伟忠朱祎雯汤欣宇刘海宁
曹海鹏,唐伟忠,朱祎雯,汤欣宇,刘海宁
(中国铁路兰州局集团有限公司,兰州 730000)
铁路信息化历经多年的持续建设,各专业领域信息系统已基本实现业务场景的全覆盖,在运输组织、调度指挥、客货营销、办公综合等多个领域发挥着突出作用。随着信息化进入云计算时代,铁路信息系统由第三代际向第四代际演进,对应用系统开发效率和资产复用等方面提出更高要求[1]。“十四五”铁路网络安全和信息化规划中提出,要加强一体化信息平台建设,优化集成服务平台,构建业务和技术中台,提升应用开发效率和管控水平[2]。
随着面向服务架构(SOA,Service-Oriented Architecture)和微服务架构的发展,无服务器(Serverless)理念已成为云时代企业应用开发的主流发展方向[3]。无服务器架构是传统云计算平台的延伸,是平台即服务(PaaS,Platform as a Service )向更细粒度的函数即服务(FaaS,Function as a Service )和后端即服务(BaaS,Backend as a Service )的发展。无服务器架构将基础设施与业务应用解耦,将软硬件资源抽象为服务,将业务过程逻辑与表示逻辑进行分离,以松散耦合方式集成函数、第三方服务和微服务。它提供各类基础服务,使开发人员在开发应用系统时只需关注业务逻辑实现,已成为一种基于微服务架构的企业应用研发、 部署、运维新范式[4],促进了应用开发专业分工,有助于应用快速迭代和降低开发成本。
为提升铁路应用开发的资源复用水平、交付能力和研发质量,本文利用平台化、服务化、流程化的设计理念,研究提出基于无服务器架构的铁路应用开发资源共享与集成平台(简称:开发资源共享平台)设计方案,提供统一的应用开发资源共享与集成方式,允许开发人员将应用开发资源以服务形式进行发布与集成,在共享既有铁路应用开发成果的基础上,快速开发新应用来满足铁路业务创新需求,加快铁路数字化转型和智能化发展。
1 设计目标
(1)建立铁路应用开发资源公用服务库
为铁路企业内部及外部合作单位的开发人员提供共享服务管理平台,方便开发人员将可复用的公用功能封装成不同粒度的服务,包括登陆认证、日志、报表、低代码、定时任务、数据资源、中间件等,建成铁路应用开发资源公用服务库;提供可视化服务编排操作界面,支持公用服务的低代码开发;依托该公用服务库,形成基于公用服务的铁路业务应用开发模式,提高铁路应用开发成果的可复用水平,减少重复开发,降低开发成本。
(2)提供安全可靠、规范高效的铁路应用集成方法
提供简单便捷的服务访问和完善灵活的访问控制,确保开发人员安全、合规、高效地访问平台提供的共享服务资源;支持多协议(主流的Http(s)、Web Socket、MQ、Nacos 等)、多网域(铁路外部服务网、铁路综合信息网、铁路安全生产网)的API 集成总线,提供统一的服务集成接口,实现异构信息系统资源的的互联互通,方便开发人员完成多网域业务应用的集成、测试与上线部署。
(3)提供完善的运维支持,保障平台及相关业务应用稳定运行
为服务提供者、服务调用者、平台管理员提供服务资源调用日志查询、服务使用监控、服务异常预警等运维支持,帮助相关人员及时发现和快速处置平台及相关应用系统运行中出现的各类异常,确保纳入平台管理的所有服务、平台自身以及基于该平台开发的相关业务应用能够稳定运行。
2 架构设计
开发资源共享平台基于无服务器架构,通过建立铁路应用开发资源公用服务库,实现铁路应用开发可复用共性服务的集中规范管理;依托公用服务库,以API 网关作为应用集成总线,为开发人员提供基于服务共享与集成的铁路应用开发新模式。在该平台支持下,开发人员既可作为服务提供者将其应用开发成果发布为可共享的服务,也可作为服务调用者来使用公用服务完成应用集成开发。该平台架构设计如图1 所示。
图1 开发资源共享平台架构示意
(1)基础设施层:提供平台运行的网络资源池、存储资源池、服务器资源池,实现资源动态配置,提高资源利用率。
(2)存储层:采用Oracle、Redis、MinIO、MongoDB 等多种数据库存储数据。其中,Oracle 主要用于存储服务发布记录、服务申请记录等数据;Redis 用于缓存API 网关动态路由、网关阈值等需要实时更新和快速访问的数据;MinIO 主要用于存储服务使用文档;MongoDB 用于存储服务调用请求日志、服务调用链路记录、服务编排操作记录等数据。
(3)应用层:实现共享服务的发布、调用、集成、监控、评价全流程管理。提供服务管理功能,方便开发人员按规范发布共享服务资源;提供服务调用申请、接口路由配置、接口协议转换、接口缓存等集成开发功能,方便开发人员利用共享服务资源快速开发应用;通过流量控制、合法请求认证、传输安全控制等服务访问控制,支持高并发服务调用;提供API 网关监控、日志查询、数据库性能监控等运维工具及异常处置功能,保证平台稳定性和高可用性。
(4)接口层:包括API 网关和统一门户。API网关基于Nginx 和SpringGateWay 构建,为服务集成提供路由选择、数据转发和协议转换;统一门户为平台用户提供统一身份认证与权限管理。
(5)用户层:基于Vue3 实现Web 端用户界面,提供授权的服务管理、服务集成配置操作页面,以及可视化监控页面。
3 功能设计
开发资源共享平台(以下简称平台)实现服务发布、申请、审核、集成、监控、预警全流程管控,建立铁路应用开发资源公用服务库,支持开发人员安全、高效、可靠地共享与集成应用开发资源。该平台功能层次结构如图2 所示。
图2 开发资源共享平台功能层次结构
平台用户主要包括服务提供者、服务调用者、平台管理员3 类。面向服务提供者,提供服务发布、服务编排、服务清单、服务调用监控等功能;面向服务调用者,提供服务申请、接口缓存、日志查询等功能;面向平台管理员,提供API 网关管理、异常预警、异常监控等功能。
3.1 服务管理
服务提供者通过填写既有服务基本信息或者服务编排功能发布服务,待平台管理员通过发布申请后,展示在服务清单中。
3.1.1 服务发布
服务提供者整理既有开发成果的相关资料,按要求填写服务发布申请,平台支持多种接口协议类型的服务。
(1)服务发布申请:服务提供者整理既有开发成果的相关资料,按要求填写服务发布申请,包括服务地址、服务接口协议类型(可选择Socket、Http(s)、MQ 或Nacos 微服务)等。
(2)服务变更申请:当服务地址、配置服务缓存或日志存储有效期等信息发生变化时,服务提供者向平台管理员发起变更申请。
(3)服务发布/变更审核:平台管理员对服务提供者提交的服务发布申请或服务变更申请进行细致审核,符合要求的申请被批准后,对应的服务会被列入服务清单;对于被拒绝的申请,会返回审核意见。
3.1.2 服务编排
服务提供者通过对已发布的服务进行可视化组装,将多个服务组合成更大粒度的新服务,并对新服务进行测试,经测试验证合格的新服务按照服务发布申请与审核流程发布为新的服务。
(1)服务组装:平台提供可视化操作界面,服务提供者通过拖、拉、拽操作即可对已发布服务进行组装和编排,定义和调整各服务的数据处理逻辑、相互间依赖关系及调用顺序,实现逻辑更复杂、颗粒度更大的新业务服务,以快速响应业务需求。
(2)服务测试:服务提供者完成所编排新服务的测试,包括模拟用户操作、异常测试、边界条件测试等,还能对封装在服务中的各个组件或功能项点进行独立测试,检查它们是否符合设计要求。
3.1.3 服务清单
按照服务性质,将服务划分为应用服务和数据服务2 类。应用服务侧重于数据计算和逻辑处理;数据服务侧重于数据的采集与存储。
(1)服务排名:以服务评分、稳定性指标、被调用次数的加权和作为评分值,按评分值由高到低显示平台上发布的所有服务排名列表。其中,服务评分是服务提供者对已申请服务的平均评分;稳定性指标主要依据服务发生异常的次数;被调用次数是指该服务在最近 3 个月内被调用的总次数。
(2)服务详情:用户可查看服务相关详细信息,包括服务简介、服务调用情况、日均被调用次数、故障率、服务使用说明等。
3.2 集成开发
服务调用者通过提交服务调用申请来访问平台管理的公用服务库,平台提供路由匹配、协议转换以及服务缓存等功能,完成合法调用请求的正确转发。
3.2.1 服务调用申请
服务调用者根据业务开发需求提出服务调用申请,待平台管理员审批通过之后,平台自动生成唯一标识符返回给服务调用者。
(1)调用申请:服务调用者选中要调用的服务,设置自己用于调用服务的IP 地址,并按需选择数据加密算法,然后发起调用申请。IP 地址支持单个IP、连续IP 段和整个IP 网段,加密算法可以是对称加密算法或非对称加密算法。
(2)服务标识:服务调用申请通过平台管理员的审批后,平台会自动为其生成一个唯一的统一资源定位符(URL,Uniform Resource Locator)与密钥标识符,供服务调用者合法使用。
3.2.2 接口路由配置
平台根据用户操作记录,自动实时更新API 网关的路由谓词,将服务调用请求正确转发。
(1)路由谓词动态生成:平台从持久层加载服务发布记录和服务申请记录,解析后生成路由谓词(包含路由断言和路由拦截器),并每隔30 s 更新一次,使路由谓词处于最新状态。
(2)请求转发处理:当请求到达时,平台根据路由断言的请求匹配机制判断路是否正确,并经过多级过滤处理后,转发至相应服务。
3.2.3 接口协议转换
平台允许服务提供者通过多种主流接口协议(Http(s)、MQ、Socket 等)发布服务,而服务调用者则统一采用标准接口协议调用服务,由平台完成接口协议的无缝转换,实现接口协议规范化[5]。
(1)标准协议转换:平台根据服务提供者选择的服务类型,将相应类型的接口协议与Http(s)进行转换。
(2)数据转换:每一种协议类型都有自身的数据格式,平台将Http(s) 协议的JSON 数据转换和映射为其它协议类型相应的数据格式和结构。
3.2.4 接口缓存
对于计算复杂、响应时间长、响应结果变化频率较低的服务,平台提供了公用接口缓存机制。在高并发服务调用场景下,接口缓存有助于缩短服务调用请求的响应时间,减轻目标服务并发压力,使服务提供者专注于业务逻辑,而无需考虑并发性能需求[6]。
(1)接口缓存创建:利用分布式缓存技术,平台以请求路由和请求参数的哈希值作为键值,以目标服务的响应结果作为哈希表记录,创建具有预定义有效时间(缓存有效时间由服务提供者在发布服务时设置)的接口缓存。
(2)接口缓存使用:当服务调用者首次调用某个设置有接口缓存的服务时,从目标服务获取响应结果后,在将响应结果返回给服务调用者的同时,会将响应结果写入公用接口缓存中,供其他访问该服务的服务调用者读取。当其他服务调用者调用该服务时,若对应的接口缓存中保存着处于有效期内的响应结果,直接从接口缓存中读取并返回给服务请求者,而无需将服务调用请求转发给目标服务。
3.3 服务访问控制
API 网关作为服务调用者和目标服务之间的一个中间层,提供了统一、安全、可管理的 API 访问接口。通过流量控制,使API 网关能够平稳应对高并发访问,并结合合法请求认证与传输安全控制,保证众多的服务调用者能够平稳、合规、安全地使用公用服务库。
3.3.1 流量控制
API 网关利用集群部署技术实现负载均衡,支持高并发服务调用请求;在出现突发的请求高峰时,服务调用请求可按需均衡、平稳转发,保证平台稳定运行。
(1)API 网关阈值调整:当承载API 网关的虚拟机资源发生变化或新增部署AIP 网关时,平台管理员依据虚拟机的带宽与计算能力的容量,及时调整API 网关的权重、最大每秒查询率阈值(QPS,Queries Per Second )和最大并发线程数等阈值。
(2)流量监测与限流:平台监测API 网关的QPS、并发线程数和请求速率,当调用请求超过API网关阈值时,该API 网关自动降低权重,并进入限流模式,避免网络拥堵,保护平台免受恶意或高负载请求的影响。
3.3.2 合法请求认证
平台根据请求源IP 黑白名单 ,确保服务调用请求的合法性,防范API 网关可能面临的注入攻击、扫描攻击、篡改攻击等风险[7]。
(1)合法请求识别:平台解析服务调用请求报文中包含的服务请求来源IP、User-Agent、请求参数等请求头信息,以服务调用者申请时提交的服务调用IP 地址,作为该唯一接口的白名单,来判断服务请求是否合法。
(2)异常请求禁止:平台判断服务调用请求的接口路由是否为本平台发出的可用接口,并自动识别爬虫、SQL 注入、盗链攻击、高频恶意请求等非法请求,将识别出的非法服务调用请求IP 加入黑名单,禁止来自该IP 的服务访问请求。
3.3.3 传输安全控制
针对数据传输的安全问题,平台提供统一的数据加密、脱敏、植入水印、压缩等处理机制,防止数据在传输过程中被恶意截获或篡改,保证服务调用请求的完整性、机密性、不可抵赖性,避免服务请求被不合规的二次流转,并实现服务调用请求版权宣誓。
(1)加密:使用特定算法对请求参数与响应结果进行加密,将其转换为一段不易被识别或不可读的代码(即“密文”),以避免数据泄露、被篡改或滥用。
(2)脱敏:通过应用替换、重排等规则,对响应结果中的敏感数据进行隐藏,有效保护隐私数据。
(3)植入水印:以不可见或难以察觉的方式,在响应数据中加入特殊标识,在数据被传输、使用或共享时,追踪数据的来源和版权信息。
(4)压缩:在返回响应结果前采用数据压缩技术,消除数据冗余,减少传输位数,降低数据容量及存储成本,提高数据传输效率。
3.4 运行监控
面向所有平台用户,提供授权的平台运行监控功能,主要包括API 网关监控、日志管理、数据库性能监控,为平台运维提供有力支持,保障平台及相关业务应用平稳运行[8]。
3.4.1 API 网关监控
监控API 网关运行动态,及时发现异常并预警,确保服务调用请求能够顺利通过API 网关。
(1)实时监控图:动态计算部署API 网关的虚拟机的内存使用变化率、存活线程变化、CPU 使用变化率3 项监控指标,自动生成 API 网关虚拟机的监控指标趋势图,帮助平台管理员优化虚拟机资源和API 网关配置。
(2)异常预警:平台监测API 网关监控指标,一旦发现异常情况,立即通过短信向相关人员发送预警信息。
3.4.2 日志查询
平台采集服务调用相关信息,并持久化存储服务调用日志,为用户提供授权的日志检索与查询功能,便于服务异常排查和风险朔源。
(1)日志记录:在不影响服务调用过程的前提下,平台以异步方式持久化记录服务调用日志;根据服务提供者设置的日志存储有效期,定期删除过期日志。
(2)日志查询:服务提供者可查询自己所发布服务的调用日志,服务调用者只能查看本人调用服务的日志。提供多种快捷的日志检索与查看功能,日志内容包括服务名称、调用系统、调用服务来源服务IP、发生时间段等信息。
3.4.3 数据库性能监控
平台动态计算SQL 执行性能指标,并生成可视化的数据库性能图表,帮助平台管理员发现平台数据库异常和性能劣化迹象,快速定位性能瓶颈,并开展性能调优,保证数据库稳定、高效运行。
(1)指标计算:根据已执行SQL 的SQL 命令内容、SQL 行数、执行时间、更新行数、并发量信息,定时统计最大执行时间、最大并发量、错误执行数等SQL 执行性能指标。
(2)性能图表:平台基于SQL 执行性能指标,生成可视化的数据库性能监控图表,帮助平台管理员分析数据库性能状况,指导数据库调优和评估性能调优方案的效果。例如,通过分析慢SQL 趋势,可以为数据库扩容与索引优化提供依据。
3.5 异常处置
针对各服务可能出现的异常情况,平台监测服务调用过程,提供服务异常检测、异常处置、异常通知等功能,实现服务异常快速捕捉处理,确保平台平稳运行。
3.5.1 异常检测
平台通过监测服务异常度量指标,及时发现服务异常,并进一步分析判断异常类型。
(1)服务异常检测:采用服务平均响应时间、单位时间内异常比例、单位时间内异常数3 个指标来衡量服务稳定性,平台动态计算服务异常度量指标,据此判断服务是否出现异常情况。
(2)异常类型判断:当平台检测到异常时,会根据自身与目标服务建立连接的所花费时间、服务响应时间及服务响应结果,自动分析和判断服务发生异常的原因,如服务宕机、服务负载过高、服务下线(即服务进程处于激活状态,但却不可用)、服务处理过程异常。
3.5.2 异常处置
当平台检测到某个服务出现异常时,根据服务异常类型,自动进行熔断或降级运行。
(1)服务熔断:当某个服务下线或在处理过程出现异常时,该服务被开启熔断;一个服务被熔断后,调用该服务的请求不再被转发给该服务,而是由平台直接调用fallback 方法来返回异常响应。
(2)服务降级:当被调用服务的负载过高时,该服务被开启半熔断,仅允许少量请求被转发给该服务;根据服务调用请求执行的实际情况,决定使该服务恢复正常 ,或继续保持半熔断状态。
3.5.3 异常通知
当平台检测到异常时,立即通知相关人员,提醒其快速排查和处置异常。
(1)通知格式定义:平台管理员根据异常分类,设置预定义的异常类型,定义异常类型对应的通知格式,并指定接收通知的相关人员。
(2)异常通知发送:当平台检测到异常时,根据异常类型和预定义的通知格式,自动生成异常通知,以短信形式发送给相关人员(服务提供者、服务调用者或平台管理员),提醒其关注异常事件。
4 关键技术
4.1 API 网关
API 网关是实现服务共享与集成的关键,负责服务的请求转发、监控预警、协议转换、安全控制、异常响应、监控日志采集、服务缓存等。所有服务调用请求都要先经过API 网关,由其根据路由谓词将请求转发至相应的服务。此外,API 网关还需要采取安全保障措施来提供平台内外的安全隔离,以拒绝外部恶意访问,避免身份和信息的泄露[9]。
Nginx 是一种开源的反向代理服务器与负载均衡器,具有高并发性、稳定性和安全性;SpringGateWay是构建微服务应用的重要组件,利用异步非阻塞编程模型来处理高并发请求。本文基于Nginx 和SpringGateWay,设计了具备高并发访问负载均衡能力的API 网关,API 网关多级过滤处理过程如图3 所示。
图3 API 网关多级过滤处理机制示意
(1)Nginx 将高并发服务调用请求均衡地分配给SpringGateWay 集群进行处理,以提高API 网关的数据处理能力和可用性。
(2)基于SpringGateWay,建立流量控制、异常请求禁止、合法请求识别、异常响应等多级断言,用于服务调用请求的合法性检测和鉴权。
(3)在转发服务调用请求或响应结果之前,多级过滤器依次对请求参数或响应结果进行加密、压缩、植入数据水印、脱敏、监控日志采集,实现服务调用过程的安全防护和运行监控。
(4)在转发服务调用请求或响应结果之前,完成Http 与其它类型接口协议的转换。
4.2 服务调用请求全链路追踪
服务调用全链路是指从源端用户发起服务调用到最终获取响应结果的过程中,服务调用请求经过的所有处理环节及涉及的相关组件。在云计算时代,应用中包含的组件类型不断增多,组件间调用关系较为复杂,服务调用全链路的可视化跟踪分析有助于增强故障检测与定位能力[10]。平台通过分析服务调用请求日志,追溯服务调用请求全链路,并据此自动构建服务调用全景图,完整揭示服务间调用关系、每个服务被调用的频率和每次调用的执行内容等。服务调用全景图可用于指导性能调优和发现业务系统间依赖关系,为异常处置和故障分析提供参考。平台使用监控日志过滤与链路关联技术,实现服务调用请求全链路追踪,具体流程如图4 所示。
图4 服务调用请求全链路监控流程示意
(1)监控日志过滤器从API 网关抓取日志数据,并按统一命名规则为服务调用请求所经过的所有结点命名:API 网关中各个SpringGateWay 以其运行的IP 地址和端口作为标识,目标服务以其发布服务记录时生成的唯一标识ID 命名,源服务以其申请处理记录时生成的唯一标识ID 命名。
(2)监控日志过滤器将抓取的日志数据放入RocketMQ 队列中, 供监控日志记录进程从RocketMQ 队列读取,实现了两者之间通过异步方式传输日志数据。
(3)监控日志记录进程将服务调用日志以异步方式持久化,并按服务调用请求的日期将服务调用链路记录表划分为多个子集,以分区形式存储在MongoDB 数据库中,以提高查询性能,便于快速生成服务调用链路和服务调用全景图。
(4)链路关联进程从MongoDB 数据库读取服务调用日志记录,利用节点的标识信息,分析节点间调用关系,将服务间调用依赖关系动态关联起来,生成服务调用链路记录表(包括请求源、请求时间、响应结果等信息)。
(5)可视化监控页面从MongoDB 数据库读取服务调用链路记录表,并基于完整服务调用链路快速显示服务调用全景图。
(6)根据服务发布者维护的被调用服务日志存储有效期,创建日志清理任务,由开源定时任务调度中心XXL-JOB 定时触发该任务,自动完成过期日志的清理,保证日志查询效率。
4.3 API 网关可视化监控
完善的运行监控与报警功能是保证服务稳定运行的基础[11],也是平台运维的利器。平台为用户提供简单、直观的监控与预警信息展示,自动生成性能指标监控图表,方便平台管理员、服务提供者、服务调用者监视API 网关的健康状态及服务使用情况,随时掌握系统运行状态,快速响应异常情况。
Prometheus 是一种开源的服务监控系统和时序数据库,提供了快捷数据采集、存储和查询功能;Grafana 是一款开源的度量工具和可视化套件,支持多种数据源以及丰富的插件库,常用于系统数据分析和监控。基于Prometheus 和Grafana,设计可视化监控API 网关,如图5 所示。
图5 API 网关可视化监控
(1)开启API 网关的Actuator 功能,使其主动暴露与API 网关运行有关的度量指标数据。
(2)在Prometheus 服务器(Server)中配置好需要监控的API 网关的IP 地址和端口号,利用服务发现机制检测已上线的API 网关,并通过Pull 方式拉取运行度量指标数据。
(3)在可视化监控页面中使用Grafana 创建仪表盘,选择查询Prometheus 数据源中运行度量指标数据,设置自定义图标显示方式和样式,实现 API网关虚拟机及服务调用请求可视化监控图表。
(4)在Grafana 中配置好预警规则,当单位时间内服务接口异常、请求时长、并发数等超过一定阈值时,通过短信提醒服务提供者予以关注。
5 结束语
为适应云计算时代的发展要求,本文设计了基于无服务架构的铁路应用开发资源共享与集成平台;在建立铁路应用开发资源公用服务库的基础上,以API 网关作为应用集成总线,为开发人员提供了一种基于服务共享与集成的铁路应用开发新模式。该平台通过流量控制、合法请求认证、传输安全控制等服务访问控制,支持高并发服务调用;提供API 网关监控、日志查询、数据库性能监控等运维工具及异常处置机制,有效保证平台的稳定性和高可用性。该平台的应用将有助于提升铁路应用开发的资源复用水平、交付能力和研发质量。
目前,该平台仅可支持服务调用者向服务提供者主动请求获取响应结果的单向通信,尚未实现服务提供者与服务调用者的双向通信模式。后续将研究双向通信的服务集成模式,扩大平台的适用范围。此外,为进一步增强该平台应对单点瓶颈和网络安全风险的能力,将继续深化平台安全防护、API 网关集群部署、系统运维保障技术研究,不断提高平台的安全性和可靠性。