批量运维实践与思考
一、批量定义及常见故障场景
批量(Batch)通常指信息系统中对数据、文件或其他对象进行一系列周期性的计算加工或处理。在信息系统中,尤其是金融行业中,批量在业务处理流程中有着不可或缺的作用。每日的账务计算、指标统计、数据同步、文件清理等各式各样的业务流程均可由批量任务实现。
在信息系统运营过程中,批量故障的现象屡见不鲜。常见的批量异常现象包括:批量执行时间超时、批量执行或返回结果异常等。根据批量的功能区分,批量故障的影响轻则为文件清理失败、备份失败等技术类故障,这些异常场景的影响和风险相对可控。但如果故障批量涉及账务处理、重要业务名单加工、关键交互文件或报送数据生成,相关批量的“延”和“误”则可对系统的运行甚至企业的经营造成巨大的风险。为保持信息系统的业务顺利开展,在实际生产运行中,部分批处理任务的故障处置既要具备高时效性,又要保证处理结果的准确性。批量故障的场景千变万化,一些常见的批量处置思路沉淀有利于我们对批量故障预案编写及处置效率的提升。本文通过一些批量处理经验分享,与各位探讨如何快、准、稳地发现并处理批量故障。
二、批量标准化处置三板斧
对于运维人员,“重启、切换、隔离”是常见故障的标准化处置动作,然而这些处置动作对于批处理异常场景适用度有限。结合批量运行特征,针对于批量常见的故障,在结合业务影响评估和适当控制风险,批量标准化处置动作可以归纳为的“重试、跳过、延时”。
1.批量重试批量重试主要适用于批量执行先决条件不具备;批量执行过程中因相关组件、数据库等基础软件或设施服务异常而中途中断;批处理逻辑及处理场景异常导致中途退出。运维人员在完成相关的依赖检查或相关组件状态检查,并按需修改相关的配置或逻辑后,可对批量进行重试处置。在重试前,运维人员需格外关注批量重新执行是否会造成账务金额或数据错乱,以免造成批处理结果的异常。
2.批量跳过批量跳过一般是指在批处理遇到故障或异常时,运维人员评估批量略过对本系统及下游影响可控而选择摒弃批量中未执行的步骤。常见的例如文件清理、无下游使用的数据同步或状态检查等批量报错可在评估后选择跳过方式进行处置。在进行批量跳过前,运维人员需对批量任务的功能和下游关联影响审慎评估,以免因略过相关批量而产生空加工文件或异常中间结果集,并对下游关联业务系统产生二次影响。
3.批量延时延时主要适用于批量超时的故障场景,此场景多见于批量前置条件延迟具备,或系统运行容量或性能不足导致批处理时长超过预期。在评估相关的执行时长并检查上游依赖条件后,运维人员可根据执行时长预估批量完成所需时间,并进行相关的延时处置。同时,在延时后运维人员需持续关注批量运行状态,确保在处置后执行完成。
三、批量监控思路
完善的批量监控策略有利于运维人员及时发现生产系统的异常,并迅速定位分析和处置。批量监控覆盖的广度、深度及监控策略的有效性、完善性将影响着运维人员对于批量运行的洞察及掌控。
1.批量全生命周期监控覆盖从批量监控广度考虑,完善的批量监控需覆盖批量运行的全生命周期。在批量运行前,需根据跑批条件(依赖文件或前置任务)是否具备,相关前置条件的合法性及正确性等信息进行监控检查,并对批量如期是否调起增加探查。在批量运行过程中,需对批量的运行时长、运行效率进行阶段性检查监控,以及时发现批量超时、夯死或异常波动等异常场景。在批量运行结束后,批量脚本的执行返回值、批量产生文件的正确性等输出结果需被设定为监控指标,以保证批量运行后的产出符合预期。
2.监控策略穿透性下钻在监控纵深角度,批量运行监控需穿透批量的运行时长、脚本返回码等表象,下钻至脚本执行日志、数据库、操作系统资源层面,从而在批量异常场景下,有力地发现最接近故障根源的直接问题点,从而提升排查和处置效率,加快整体故障处置时效。例如“主键重复”或“数据库空间不足”等更详细更深层的直接报错原因,要比“批量返回值不为0”这类批量运行表象的报错信息更有利于运维人员定位根因并快速处置。
3.批量监控设计导向随着信息系统与业务融合的不断加深,传统的运维监控已无法满足愈发丰富的运营异常感知要求。在批量监控设置导向方面,我们应从监控设计方面做出进一步的积极应对。
监控视角方面,从技术视角到业务视角:除脚本执行结果返回值、系统资源、执行计划等技术层面监控外,批量加工结果的准确性、账务处理批量的金额及交易笔数,或加工结果明细的条数、统计经营指标的异常波动也应纳入批量监控范畴。
监控场景方面也需要补充:在传统的监控中,我们更多关注批量执行失败、批量超时等场景,这些现象往往直接意味着信息系统的运行故障。然而在实际的生产运行中,运行风险和隐患也可能在一些过度良好的运行现象中初现端倪。批量执行过快、交易量笔数过多、交易金额过大等场景也可能预示着系统存在相关运行异常或运行风险。
监控目的方面,从发现故障转化为发现运行波动:批量功能及运行场景错综复杂,开发及运维人员难以在故障发生前穷举所有批量异常场景,并事先增加对应的监控项。在此背景下,我们应建立相关的多维运行基线,将批量监控报警提示目的从“直接发现批量故障”转为“发现批量运行的波动”而引导运维、开发人员排查分析,并判断系统运行是否存在异常。
四、批量处置友好性设计思路
除满足业务需求外,友好的处置设计会直接影响处置效率及维护便利性。批量的适度分割、批量的容错健壮设计、跨系统的数据及质量控制、关键批量的识别和特殊调度都是我们提升批量维护能力的有效方法。
1.批量拆分粒度在实际业务数据处理场景中,业务流程可能包含多个步骤。从批量粒度设计角度考虑,业务流与批量流的对应关系会直接影响我们的分析和处置效率。例如,如果一套完整的业务流被设计为一整个批量,并通过单一脚本处理,那么当故障出现时,开发及运维人员需从批量开始排查,并逐个分析中间临时结果,在定位问题后,也需从头重试批量,从而影响整体的处置时长。但如果该业务流程按步骤合理拆分成多个细粒度批量,或在关键业务处理节点增设断点,在处置及异常场景处理下,人工排查范围及处理时长、处置影响也会大幅减少。同时,批量合理拆分也有利于进行并行处理,上下游紧耦合调起,以提升整体业务流程处理效率。
2.批量容错健壮性及批量自愈在批量设计阶段,需预先考虑批量异常触发场景,并根据相关处置预案丰富批量容错能力。例如,为应对常见的上游前置条件不满足、上游文件延迟等场景,我们可以在批量设计阶段增加轮询扫描等待;为应对数据库或底层环境异常中断可增加自动重试机制;应对常见的上游文件格式异常可在满足业务要求的场景下摒弃部分数据或文件内容。批量健壮性的完善意味着运维能力的前移,一些原本在故障后的处置操作被提前至故障发生前,并融入系统及批量设计中。当然,批量的容错并不意味着在任何情况下可兼容处理各种异常或意外场景,我们更应从上下游链路及业务联动视角分析,并结合实际场景设计批量容错能力。相信在不远的未来,结合智能化运维发展,越来越多的批量故障场景可被智能运维能力识别覆盖,批量故障处置可通过人工预授权等机制自动实现批量自愈。
3.跨系统联动和数据质量控制批量加工导出的数据或生成的标识文件等作为批量的产出,在很多场景中承担了上下游桥接交互的作用。在实际运行中,因业务功能的不同侧重,上下游对于交互文件的理解及要求难免存在一些偏差脱节,从而导致系统间批量交互故障或下游数据异常。为缓释相关风险,系统间的联动校验及质量管控尤为重要。上游批量结束后需根据下游使用方对于数据要求作为校验规则的输入,并对批量输出结果进行校验控制。下游批量也应在跑批前提前对数据内容进行检查,并在文件或数据不符合预期时终止退出。这些串联上下游的质量控制校验可以及时发现交互异常,并在故障场景缩小问题数据影响范围。
4.关键批量的标识及分级调度处理随着批量规模的不断增加,单纯的人工运维经验已难以覆盖海量的批量任务信息。批量任务的业务影响、时效要求、上下游关联系统等配置信息逐渐成为了运维人员描述批量任务的画像。重要性标识和分级分类管理有利于运维人员在故障发生时迅速评估影响,并集中资源提升处置紧迫性。一些例如业务开门准备类批量、换日前账务处理或报送类批量有着较高的时效性要求,为保障这些任务在故障情况下仍可按时完成,批量的优先调度、算力动态分配能力是我们处置的有力手段。提级调度和弹性算力等未雨绸缪的运维处置工具建设为关键批量的提速提供了有效的保障。
五、结语
批量在信息系统中的重要性要求着我们不辍努力地从设计、开发、测试、维护等各个环节提升运行强壮性、完善预案及运行监控,并不断提升异常场景下的处置能力。我们正经历着数据和信息的爆炸性发展,也在逐步适应批量任务的海量级和实时化转型。在迎接这些新挑战的路程中,除能力更加丰富的批量维护平台和调度平台等的运维工具建设外,批量维护人员的运维思路及运维理念亦需要同步紧跟时代发展的步伐。
诚然,信息系统的建设从来不是一蹴而就的。作为批量维护的运维人员,我亲身经历过因批量监控敏感度过高而引起的监控误报,也经历过批量操作处置不当导致更大的生产运行隐患。当我们回头看来,那每一个我们精心设计并准确发现运行问题的监控策略、每一次符合故障预案场景的迅速处置、每一次成功的容错自动处理看似是运维工作中平淡,但都会变成坎坷建设道路后最美好的回报。
作者:陈栋
负责G行数据仓库及集市的应用运维工作。以防微杜渐之智扼杀隐患苗头,持一丝不苟之态雕琢每个细节,筑牢成功与安全的基石。希望继续与各位读者前辈共同探讨深耕数据系统运行维护。
图片