在数字时代蓬勃发展下,亟须一种更加快速、敏捷的基础设施解决方案,以支撑顶层的数字经济。Kubernetes是一种开源管理云平台中多个主机上的容器化应用,是分布式集群管理系统和私有云、公有云的事实标准。江苏苏宁银行按照务实、高效、架构先行等原则,以Kubernetes为容器编排器,构建新一代的容器云平台,首先探索并解决资源使用效率问题,其次利用Kubernetes的容器编排、弹性伸缩、容器漂移和故障自愈能力,简化应用部署方式、周期及难度。未来将利用容器快速弹性伸缩能力及云原生技术自动化能力,不断提升运维效率和保障能力。
江苏苏宁银行进行容器化改造前,针对业务系统架构进行了充分的梳理,将其分为如下两类:一类是基于远程服务调用框架的Web应用。前端界面表现层使用HTML,AngularJS,Vue等前端技术,后端编程采用Java技术栈,业务逻辑控制层采用SpringMVC或Springboot等开发框架,数据存储层采用分布式数据库中间件。后端使用MAVEN编译打包,发布使用基于Jenkins自研的CD平台。
此类应用特点是前后端分离、跨平台、易迁移;另一类是非JavaWeb应用的技术架构,包括LAMP,Python等技术栈。前端界面表现层采用HTML,CSS,PHP,Ajax等技术,业务逻辑层使用PHPMVC开发框架—Symfony,数据存储层采用MySQLMGR集群技术。此类应用架构简单、稳定、部署方便灵活。
随着业务发展,应用系统不断增多。基于远程服务调用框架的Web应用之间的关系、调用链路越来越复杂;非JavaWeb的技术架构变得越来越臃肿,运行维护面临众多痛点:一是环境部署复杂。在搭建基础环境的过程中,需要部署编译很多lib库、编译器、组件包,并且各个组件的依赖关系非常复杂,特别是银行业因为安全等方面要求,生产环境与互联网物理隔离,安全策略严格,各种基础库及依赖包的安装费时费力,部署完成一套系统环境甚至需要一周时间之久;二是环境污染严重,难以二次使用。
测试环境部署完成,经过多次测试后,各类参数和配置文件经过多人调整,需要恢复到初始状态部署应用测试时,耗时费力,需要多人参与,有时需要重新创建虚机,以实现纯净环境;三是系统迁移困难。由原先部署在Vmware虚拟机的业务系统迁移到“OpenStack+Kvm”的云平台,应用迁移烦琐且容易遗漏配置文件。
从底层虚拟化文件层迁移,镜像格式不同,缺少合适的跨平台打包工具,非常复杂也容易出错;四是缺乏快速响应能力。整体系统研发、投产过程中开发测试的并行开展度不高,业务需求需要快速上线。业务系统的线下环境和线上环境的配置参数不统一,导致实际投产过程的复杂性提高、报错率提升;五是弹性扩展能力差。系统拥有部分高并发业务场景,业务应用需要快速弹性伸缩来满足峰时需求。单体式应用系统的复杂性过高,系统拓展性不足,系统维护性难度加大。
结合江苏苏宁银行实际情况,并经过长期技术预研和多次技术论证,遵循如下原则构建新一代云原生架构的基础平台:一是务实。以解决实际问题为出发点,不追求“高大上”。将环境部署过程中碰到的问题一一列出,逐个讨论,不清晰、不明确的需求先搁置;二是稳中求进。不过度追求极致自动化,优先保证生产稳定安全。选择有一定先进性、技术活力、能代表未来发展方向的技术。
三是提升效率。减少人工重复性操作,选择的技术和建设的平台与业务系统的发展不是正比关系,而是业务系统的高速发展,只会使得系统运维工作略有增加;四是符合整体规划建设。将IT建设的整体规划作为依据,从方案上考虑容器云建设的合理性和必要性,使得建设的平台具有先进性和可持续性。