最佳实践:金融级企业研发中自动和智能SQL质量控制
导读: 金融业研发过程都离不开平台支撑,实现研发过程自动化协同和控制,其中代码的质控可以通过集成Sonar、Checkstyle等很好的实现自动化,但是SQL的质控在自动化流程中却长期处于空白。 如今,通过SQM研发的Jenkins插件、JVM探针,将SQL质控的自动化能力组装到DevOps流水线中,彻底填补了这个空白,必要时配以SQM的OpenAPI,能实现更强大的能力。
DevOps与金融企业研发
IT研发领域里,DevOps已经成为一套越来越主流的实践方法集和文化价值观,它可以帮助企业缩短软件发布周期,提升软件质量,安全快速获取产品开发反馈。 在国内,各大金融企业很早就开始实践DevOps理念,并且有些银行落地比较到位,已取得很好成效,比如招商银行、平安银行、民生银行、中信银行等。
研究机构发现,在DevOps过程中, 自动化 是带来组织效能差异的关键因素,也是DevOps 的关键点。产品/项目的规划设计、计划跟踪、迭代开发、持续交付这些不同阶段都有好的方法论支撑,比如故事地图、Scrum框架、看板方法等,但是那些将全局过程标准化、自动化、可视化,关键流程和节点管控到位,并行开发过程协同管理到位,构建起完整DevOps流水线的企业才能获得最大收益。
因此,过去几年,各企业都在构建自己的DevOps平台,即完整的DevOps流水线。 笔者总结了一下,大致分为两个流派,开源或自研。
开源流派,基于开源工具链的持续交付流水线,实现从0到1快速构建DevOps能力。
自研流派,核心大多都是对开源工具链的封装、扩展、增强,简化使用难度,实现DevOps目标。 金融企业出于安全性、稳定性,自主可控等因素,大多走自研或合作研发DevOps平台的路径。
无论哪个流派,对代码的质控管理都是关键一环,通过集成Sonar、Checkstyle等能很好的实现自动化。
但是SQL的质量控制却还停留在不检测或者人工检测,效率低,质量标准差异大,不能自动化,不能和DevOps融合的状态,产生很大的风险隐患。
SQL质控的挑战和价值
多年的实践中,我们发现影响业务性能、连续性、稳定性的因素多种多样,但归纳起来可以分为六大类,其中两大类和SQL有关。
在现代的企业研发中,其它因素都有较好的方法和工具控制,但SQL质量问题一直未能得到较好解决,业务爆发各种SQL性能及安全问题,倒逼必须将能够SQL质量控制住,在其影响业务之前就要发现并消除掉。
经过在SQL质控方向多年的探索,我们发现,虽然SQL质量问题存在于应用软件的全生命周期,从开发、测试、发布上线、生产运行,SQL质量问题,无处不在,但进行SQL质量控制的效果,却是越前置越好。
开发测试阶段SQL质控效果远远大于生产运行阶段SQL质控效果,前置解决才是根本。 同时通过将SQL质控按场景工具化、自动化,和DevOps过程集成起来,可以高效的实现质控目标。 SQM-SQL质量管控平台,应运而生。
两大引擎,SQL解析引擎+专家引擎
覆盖应用全生命周期:开发、测试、上线发布、生产运行
内置的专家经验规则+语法树特征值、文本正则匹配的灵活自定义规则能力,全面覆盖用户SQL规范
支持各种开发语言构建的应用
支持数据库Oracle、MySQL、DB2,即将支持Microsoft SQL Server 、PostgreSQL、OceanBase
Jenkins插件、JVM插件,与DevOps集成,自动化SQL质控
强大的OpenAPI,方便用户快速将SQM能力与其它用户系统集成
支持不同规模、不同研发模式的十多种场景化SQL质量管控方案,适合的才是最好的
智能优化,能够对SQL进行全面分析后,给出精确的优化建议,比如创建索引等
DevOps中的SQL质控
DevOps中的SQL质控应从流程制度建设、管控手段建设、人员能力提升三个维度综合解决问题。
SQL质控前置到开发测试阶段。 在开发交付给测试的环节前引入SQL的质量控制,提升团队之间的协作效率,减少返工带来的成本增加,在测试环节引入自动的SQL质量复核能力,全面覆盖。
人员能力和质量管控提升。 人员能力,可通过培训、专业辅导、SQL代码规范等方式进行提升。 质量管控,借助专业工具作为抓手进行管控,对于极端复杂问题可借助专家支持优化。
一般的DevOps流程可视为两级流程。 一级主流程是DevOps的整体过程,包括"任务管理、代码管理、构建和发布、其他后续"。
"构建&发布"的二级流程,包括了多个步骤: 源代码管理,代码检查,构建,测试,部署。 二级流程下又包含了多项"操作",比如"代码检查"包括了规范性检查,安全检查,其他检查。
SQM研发的Jenkins插件、JVM插件,支持快速组装到DevOps流水线中,在代码检查环节,自动化进行SQL的质量检查。 在测试环节,自动化进行SQL的质量检查。
过程示意图
Jenkins+SQMPlug-in实际运转图
案例解析与探讨
X银行
解决方案: Jenkins插件+JVM插件+OpenAPI,分阶段落地
SQM与开发流程融合,在开发测试环节提供SQL审核服务。 在开发阶段处理大部分的SQL质量问题,将运维工作前置到开发阶段,大大节约成本且提高开发效率。
1)SQM平台实现与DevOps融合
2)SQM提供SQL脚本审核功能(实时审核)
3)复杂SQL可经过SQM平台由DBA协助处理
4)提供SQL豁免处理流程
Y银行
解决方案: 工单+OpenAPI+平台
为了达成SQL质量控制目标,该行结合自身情况,从SQL质量控制要点出发,持续实践迭代,利用SQM审核工具覆盖开发环境和测试环境,进行SQL的审核与监控。
2016年SQM项目正式启动。 SQM从一开始的调研实施,到后续不断的迭代完善,现在已经在该银行的研发体系里扮演了重要的角色。
截止2019年年中,该行的SQM平台的用户有三千余人,配置的项目(子系统)有四百多个,监控五百多个测试库,工单总数将近五千个,每天创建工单数有20个左右,工单当天处理完成率达80% 自动化的SQL审核减轻了测试和运维的压力,大大减少了人工的工作量统一了开发规范流程,通过不断探索,总结出了最佳实践的工作流 极大减少了应用投产之后由于SQL性能引发的严重问题助力该银行打造数据中台,以及DevOps开发运维一体化建设 促使项目性能问题统一归档、分类和追踪,形成比较完善的处理闭环,并为项目组开发质量评价提供量化指标数据。
Z银行
解决方案: OpenAPI+连库捕获+流程再造
该行对SQL审核的期望目标如下:
1)防止问题SQL流入至生产环境
2)项目上线前SQL的检测,对问题SQL进行审核整改
3)设计的闭环审核流程,确保每个问题SQL都完成整改
在对开发测试流程进行梳理,该行决定将SQM审核与开发流程融合在一起,进行流程再造。