现代铁路发展的重要标志之一是信息化。随着铁路建设的持续推进,铁路信息化建设需求不断提高,传统的单兵作战、小作坊式的软件开发模式已经难以满足不断提高的需求。为此,设计一个灵活、规范、安全的软件开发平台对铁路信息化建设具有重要意义。
针对软件开发的相关研究较多,耿泉峰等人[1]以DevOps为例,提出了软件开发管理模式;王伟萌等人[2]针对软件开发过程中可能出现的安全问题,构建了企业应用软件开发安全体系;马建军等人[3]提出了基于“平台 应用”模式的铁路一体化信息集成平台总体架构;刘春来[4]提出了基于统一身份认证的单点登录解决方案,以及业务系统与统一身份认证平台整合的具体实现方案;谢得麟等人[5]使用微服务的架构将医院信息数据进行整合,分解成可管理的模块或服务,从而形成统一的数据接入平台。上述研究大多是针对软件的开发、安全进行设计,不包含软件全生命周期中运营维护(简称:运维)的内容,导致软件的交付效率难以得到提高;此外,我国铁路信息系统业务繁多且复杂,对软件开发效率和用户反馈回应率有更高的要求,因此,有必要设计一个针对铁路信息系统、集开发与运维于一体的一站式软件开发平台。
本文运用DevOps的软件研发理念,设计适用于铁路的软件开发平台。旨在构建统一、规范、安全的软件研发模式,运用持续集成、持续部署技术,接入Kubernetes容器化集群,实现开发与运维分工合作,使用户需求得到快速响应,在提高铁路信息系统研发效率的同时,进一步提升铁路信息系统开发与交付过程中的可管理性和安全性。
1. 软件研发模式
1.1 DevOps简介
DevOps(Development Operations)是开发和运维的总称,将项目或产品视为一体,同时,将开发和运维作为主打的管理模式,保证开发、运维和质量安全部门之间的沟通、协作和整合,消除传统模式下因沟通不畅导致的延误或疏忽,使项目的推进更加高效。
1.2 基于DevOps理念的软件研发模式
基于DevOps理念的软件研发模式往往采用敏捷的迭代流程完成高频、小批量的需求交付,进一步加快功能开发、集成和软件版本交付的速度。基于敏捷模式的软件开发可以帮助研发人员更快地发现问题,将软件更快地交付到用户手中;研发团队可以更快地得到用户的反馈信息,从而快速响应。因此,DevOps带来的软件版本变化较小,风险更小。DevOps提倡开发和运维之间的高度协同,在持续集成、持续部署的同时,提高生产环境的可靠性、稳定性、弹性和安全性[6-8]。
1.3 研发模式的优点
基于DevOps理念的软件研发模式具有以下优点:
(1) DevOps强调开发与运维的沟通合作,通过自动化的流程,使得软件构建、测试、发布能够更加快捷、频繁和可靠。
(2) DevOps可以为软件从规划到实现的整个过程中提供更好的质量保障,确保软件和企业业务目标的一致性,从而缩短软件交付周期。
(3) 提升自动化能力,降低人为错误的发生率,进一步保障了软件的安全性和合规性。
(4)DevOps持续集成和交付的方式,可以使企业更有效地利用资源,削减成本。
2. 平台架构
基于DevOps理念的铁路软件开发平台(简称:平台)设计思路是提供从企业管理、软件项目(简称:项目)群管理、项目管理、需求规划、迭代规划、代码托管、代码走查、测试、发布、流水线到应用管理全生命周期的一站式软件开发服务。利用容器化部署,提供统一的技术标准、开发框架、项目管理规范、交付管理、配置管理;对铁路所有的项目提供统一的管理界面;面向开发管理,提供开发、测试、集成、发布等;面向运维管理,提供培训、监控、维护等。平台架构如图1所示。
图 1 平台架构
下载: 全尺寸图片 幻灯片
2.1 基础设施即服务层
基础设施即服务(IaaS,Infrastructure as a Service)层利用企业云虚拟化平台提供基础设施服务,部署Docker及Kubernetes容器化管理工具,为应用提供基础资源环境;部署结构化数据库MariaDB、非结构化缓存数据库Redis,为平台提供数据支撑。
2.2 容器引擎层
容器引擎层利用Docker/Harbor搭建容器引擎,平台所有应用程序通过容器方式进行管理,Harbor集中存放应用镜像数据,集中进行镜像版本管理,逐步建成容器化部署与统一的镜像管理中心。
2.3 容器编排层
容器编排层在建立容器与镜像管理中心的基础上,搭建Kubernetes集群,实现技术资源的集群管理;利用Kubernetes集群,实现容器调度、编排、治理,以及应用程序的高并发与高可用性。
2.4 平台即服务层
平台即服务(PaaS,Platform as a Service)层提供Web应用和公共服务应用程序编程接口(API,Application Programming Interface),采用Spring-Cloud Nacos的微服务框架,通过Gate-Way网关提供集中的API服务,便于应用程序的接入、调用。
2.5 访问和接入层
访问和接入层通过访问Kubernetes的服务,采用NodePort方式提供Web服务,实现浏览器客户端的便捷访问。
3. 平台功能
平台功能包括容器管理和开发管理,解决统一的项目管理、交付管理和配置管理问题。通过容器管理功能,实现开发平台的线性扩展和运行监控;通过开发管理功能,以可视化的方式实现应用的集成、测试、发布自动化;通过集成开发框架、统一技术路线,解决统一的技术标准和统一的开发框架问题。平台功能架构如图2所示。
图 2 平台功能架构
下载: 全尺寸图片 幻灯片
3.1 容器管理
容器管理提供对容器性能及功能的监控管理。
3.1.1 监控面板
利用Vue技术,从平台、虚拟机节点、应用服务等层面,对容器运行状态和资源使用情况进行多维度的集中化和可视化的监控。
3.1.2 应用管理
基于DevOps管理模式,平台之上的应用并不直接对外暴露,而是以服务的方式对外开放,由服务将请求路由对应到后台的应用容器之中,解决由于容器重启后其IP地址会改变的问题。平台对服务提供如下功能支持:
(1) 服务的创建和删除,以及与后端实际应用的绑定;
(2) 动态更新服务的配置;
(3) 从服务到后端应用容器的路由自动配置;
(4) 在后端应用容器中保持会话;
(5) 安全套接层(SSL,Secure Socket Layer)协议保证平台的安全性;
(6) NodePort和Ingress两种暴露服务方式,并提供统一界面。
3.1.3 网络管理
网络管理涉及容器和容器之间的网络通信、容器和服务之间的网络通信、服务对外暴露时的网络通信,以及网络隔离。平台支持租户之间、容器之间两种策略,容器和服务之间的通信使用Kubernetes容器技术。
3.1.4 镜像管理
具有统一的镜像管理机制,支持私有镜像仓库的登记和查询,也支持从共有镜像仓库进行图像上传,提供常用的开源镜像。在安全性方面,通过设置访问权限和后台审核的方式,保障镜像使用的安全性。
3.1.5 存储管理
支持主流及常用的存储机制,利用存储的挂载,可为需要持久化的应用和服务进行数据的存储。支持管理员用户对于挂载存储的创建和删除,支持多种文件系统,如Host Path、GlusterFS、GPFS(General Parallel File System)等。
3.2 开发管理
开发管理功能将应用开发可视化,同时,提供在线控制台及日志,确保快速、高效地排查故障。
3.2.1 总览
通过总览功能,可以观察并获得交付生命周期的及时信息,从而保证交付过程中的反馈效率。提供多种仪表盘,使得交付流水线的状态可以从不同维度查看。
(1) 项目总览:查看项目数量、应用数量、流水线数量等;按时间查看不同项目的活跃程度,以及项目下不同应用的活跃程度。
(2) 应用总览:查看应用中的流水线数量、应用实例数量等;按时间查看本应用下不同流水线的活跃程度和运行时长。
3.2.2 项目管理
一个项目可以包含多个用户、多个环境。
(1)用户管理:用户可以添加、编辑、删除项目,并查看所在的项目,包括每个项目包含的用户数量、应用数量和环境数量。添加项目的过程中,用户需要指定项目的名称和描述,将相应的用户分配到新项目,并且指定该项目的构建服务器。当项目添加成功后,新项目会出现在项目列表,支持编辑、查看详情等。
(2)环境管理:用户可以在项目详情页面,查看该项目的所有环境,并可以对其进行管理,如输入环境的基本信息,为环境分配资源等。
3.2.3 应用管理
一个应用经过不同流水线的多次部署后,会在不同环境拥有1个或多个应用实例。平台基于DevOps的管理理念,设计了应用管理和应用实例管理。用户可以添加、更新、删除和查看应用,并管理应用的流水线及应用实例。应用实例标签页会展示所有应用实例的环境、版本等信息。
3.2.4 流水线
支持用户自定义流水线,通过流水线的自动化执行,可以一键执行预定义的任务,如代码检查、构建、部署等操作,并查看任务执行情况。
3.2.5 任务
流水线的各个阶段被拆分成各种任务,每个任务独立完成自身的工作,任务与任务之间可以通过配置关联,前一个任务的输出可以作为后一个任务的输入。当某项工作需要人工参与的时候,例如审批或者手工测试,可以通过添加人工任务来完成。
4. 关键技术
4.1 高并发的开发模式
平台采用Spring-Cloud集成Nacos微服务架构,Nacos为各个微服务的注册中心,各个微服务之间可通过Nacos注册、发布并互相调用。通过微服务将功能拆分为登录、基础、流水线等功能,实现业务服务的拆分,拆分后各个微服务之间通过Gate-Way网关来分发流量,实现高并发性能。
在针对前端的开发上,为应对用户使用环境的不同,采用用户界面(UI,User Interface)标签描述界面结构,将界面展示和界面动作解耦,同时保持浏览器兼容性,以适应不同应用环境的需要;通过提供组件库和开发工具集,提供规范的人机交互模式和界面设计风格,在保证开发质量的同时,提高前端开发的效率。
4.2 代码的持续集成部署
平台采用Jenkins实现持续集成、持续部署功能,并部署Docker与Kubernetes容器化管理插件。通过Jenkins流水线可直接发布应用至容器管理集群,为应用程序的上线部署节省大量发布时间。
在Jenkins具体的使用过程中,将各个开发人员的工作集合到一个代码仓库中,持续集成意味着应用代码的新更改会定期高频次构建、测试并合并到共享存储库中,目的是尽早发现源码错误,使开发团队更好地协作。
在具体的持续交付过程中,自动测试开发人员对应用的更改并上传到存储库,由运维团队将其部署到实时生产环境中,解决开发和运维团队之间可见性及沟通性较差的问题;能够将构建部署的每个步骤自动化,以便能够随时、安全地完成代码发布,更加高效地实现源码的部署运行。
4.3 用户信息的统一认证
通过对登录用户的身份、相关权限、单点登录等内容进行统一认证,从根本上减少应用开发过程中的重复劳动,消除验证用户身份时的重复步骤,以及权限管理上的冗余,从而保证安全认证的统一化、规范化。
因平台集成多个插件,为方便用户更好地使用各个插件,本文在轻量目录访问协议(LDAP,Lightweight Directory Access Protocol)的基础上部署OpenLadp,实现各个插件用户的账号与密码集中管理;部署中央认证服务(CAS,Central Authentication Service)端,实现单点登录。通过集中用户管理与单点登录服务,使平台各个插件之间的结合更加紧密,实现高效运用。
5. 平台特点
5.1 项目管理可视化
平台实现了开发项目整体情况总览,项目管理与原有项目管理平台深度集成,同步展示项目列表、需求列表、任务进度等数据,使开发项目可见、可控、可管,提高项目管理效率。项目管理可视化示例如图3所示。
图 3 项目管理可视化示例
下载: 全尺寸图片 幻灯片
5.2 开发过程规范化
统一了项目管理规范、开发工具集、开发框架、开发标准,加强过程管控,实现了项目开发标准化和规范化,研发过程的规范性得到有效提升。
5.3 应用部署容器化
通过平台的Kubernetes集群,实现项目的容器化集群部署,提高硬件资源的利用率。平台提供的水平伸缩能力保证了快速提升服务吞吐量的能力,灰度发布功能使服务达到了无停机升级的能力,同时服务具有自我修复能力。
5.4 开发资源公共化
通过建立集中的代码仓库,实现软件代码的集中管理。通过Nexus搭建Maven私有服务器,实现开发资源的集中共享;通过Harbor仓库实现软件产品的统一管理,减少内网和外网资源的重复桥接,提升开发资源的利用率。
6. 结束语
基于DevOps理念的铁路软件开发平台结合铁路信息化发展趋势,深化容器管理、开发管理功能,通过统一的框架和访问管理,强化快速响应、知识复用能力,减轻软件研发过程中各个阶段的压力。该平台在中国铁路上海局集团有限公司上线运行以来,已应用于市域铁路、数字云办公平台、动车组健康管理系统、安全信息管理平台等铁路建设项目中,提高了软件研发、运维的工作效率,以及用户的满意度。未来,将在该平台的基础上研究运维的风险管理,使项目在研发过程中提前预知使用中可能遇到的风险,进一步提升项目的稳定性。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。