中电金信:夯实云原生时代的系统韧性建设——中电金信混沌工程金融业实践

IT系统建设在经历过单机、集中、分布式的演变历程后,系统运维演练、故障模拟测试的复杂度也不断提高。在复杂的分布式系统中,基础设施、应用平台都可能产生不可预知的故障,在不能确知故障根源的情况下,我们无法阻止故障的发生。更恰当的思路是致力于这些风险发生之前,模拟和演练故障触发的场景,识别和了解故障触发的规律和影响,再有针对性地进行加固、防范,从而规避故障发生所造成的严重后果。基于混沌工程技术开展的混沌工程测试,更加系统化模拟了真实场景下可能出现的故障(或故障组合),能够达到检测、验证、分析被测分布式应用环境的健壮性和边界,尤其在当前全栈全域技术自主可控趋势的背景下,复杂故障的场景组合选取就成为迫切需要解决的痛点问题。

01 混沌工程演练的场景探索

为了能更加系统化模拟真实场景下可能出现的故障,解决全栈全域技术信创趋势背景下,复杂故障的组合场景选取的痛点,混沌工程平台产品在技术能力、实践方法论及故障设计方面可以进行如下针对性的探索。

■ 在技术能力方面。混沌工程平台应在具备IaaS、PaaS、SaaS三个系统层级故障模拟能力的基础上,进一步完成服务支撑层的整合搭建,例如引入压测全流程管理、可视化监控能力、自动化混沌测试等模块,使得产品功能更加丰富;可以支持架构选型、全链路压测、混沌工程测试、运维红蓝对抗演练四大重点业务场景;另外应开展自动化混沌工程技术的落地实践,为行业客户提供功能更加完备的智能化平台。

■ 在混沌工程实践方法论层面。以成熟的流程制度牵引混沌工程的实施过程,流程需涵盖测试、开发单位、架构、需求、运维等多个专业部门在实施过程中的分工与责任落实。中电金信在整个混沌工程测试的实施过程中,总结出混沌实施七步法,包含目标确定、稳态指标制定、故障设计、流程编排、实验执行、结果分析、修复验证,这个七步法贯穿了整个流程,保障了实施过程的高效有序。在七步法中,最关键的一步是“故障设计”这个环节——决定了我们要测试哪些故障案例,按照什么优先级的顺序,测试的方法步骤是什么。

■ 在故障设计方面。需要以完备的框架来牵引场景挖掘和故障设计。根据多年的实践经验,中电金信沉淀出故障设计指南,引入FMEA理念指导具体系统、具体场景风险优先级的评估,并结合金融领域混沌工程标准用例集和指标评估体系,使得混沌工程的落地不必从0到1开始,极大地降低了实施门槛,实现了在对具体系统定制化故障场景设计的同时,可以应用更少的故障场景发现更多的系统风险隐患。

02 典型案例

以华南某银行新手机银行项目为例,具体分析如何实施针对分布式银行核心业务系统的混沌工程实验——如何制定目标、设计故障、有效执行、关注指标以及效果评估。

■ 项目概述。华南某银行个人手机银行系统于2012年规划建设,基于“传统单体架构”,手机银行承载了账户管理、贷款、理财等基本功能和客户服务能力。面临客户量增长、客户快速变化的多元化需求以及信创相关安全问题,客户决定于2023年启动新一代手机银行系统建设,新系统基于全栈信创的金融交易云底座,部署于K8s容器云环境。手机银行属于重要对客系统,对系统稳定性提出了更高要求,因此在上线前,通过混沌工程保障和提升手机银行系统的稳定性能力,通过在测试环节对手机银行系统进行高可用能力准出,验证和提高系统的韧性,验证容器编排合理性,保障新手机银行系统平稳上线。

■ 实施方案。主要采用两步走的方法进行系统测试。

(1)平台搭建,主要工作为建立混沌测试系统化的流程,为系统上线沉淀经验。搭建一套混沌工程测试系统用于进行各类故障的模拟,并编写故障测试案例用于场景适配。本项目中所搭建的混沌工程平台涵盖基础设施、平台、应用各层进行故障注入的同时实现测试过程、结果的可视化展示,平台部署架构如图所示。

图片

图 平台部署架构

平台主要由基础管理模块和功能模块组合。基础管理模块:包括环境管理、系统管理、事件管理等,涵盖机器管理、应用管理、部署单元管理、K8s集群管理、用户管理、权限管理、角色管理、菜单管理、系统资源实验事件和应用实验事件管理等子模块。功能模块:包括测试管理、演练管理等子模块,其中测试管理模块支持测试计划的管理编排,支持发压脚本、常规实验场景、实验任务执行队列、压力机资源、监控跟踪、实验报告信息查看、测试场景信息统计分析、并发实验监控、可观测性及压测全流程管理、自动化故障设计和实验案例生成、自动化实验报告生成等功能。

(2)故障模拟,主要工作为模拟各类故障,暴露隐患和缺陷。仿真模拟硬件故障/软件故障/网络故障/人为故障/异常/攻击等状态,观测系统在CPU/内存/网络等故障发生时处理状态。

实际项目推进中,通过需求调研,选取了16支高频交易提供压力注入,通过源启混沌工程平台的压力发起能力进行交易数据模拟,针对系统响应时间、TPS、成功率等业务指标和CPU、内存、网络、IO等系统指标进行采集,经由平台集成的监控体系予以图形化展示,并最终形成阶段性测试报告,对系统画像进行呈现。

其中,针对该手机银行系统的PaaS底座和SaaS服务中的机制与特性,共设计编写超过150个案例,涉及的故障场景包括:进程拉起服务的启停、系统宕机、宕网卡、停应用、停服务、进程挂起、JVM异常、Druid数据库连接池打满、模拟机房故障后的集群切换等。

以上所有案例均由源启混沌工程平台执行,有效验证了容器环境下的多项系统高可用能力。

■ 应用成效。在自主可控软硬件运行环境中,源启混沌工程平台完成了对部署于K8s容器云平台的分布式架构新手机银行完备的可用性测试,对增强系统稳定性、提高系统质量,具备实际效益和重要意义。通过本次测试,验证了容器环境下的集群高可用性、负载均衡有效性、故障转移有效性、服务注册&服务发现有效性、服务自我拉起、超时有效性、强弱依赖有效性、数据库集群有效性、批量服务高可用能力。

另外在混沌测试执行过程中,发现了一系列与K8s容器相关的问题,涵盖PaaS组件以及SaaS应用等。根据发现的问题,后期编制形成符合高可用等要求的项目上线规定,对上线的K8s容器管理的组件、业务应用的探活方式以及探活的各配置参数都有了指导性建议。

截至目前,共执行实验场景150余项,累计实验500多次,编制混沌测试结果分析明细报告12份,总计1000页+,汇总编制混沌测试汇总报告1份,发现系统问题58项,并给出相应的优化建议或解决方案。

■ 创新经验。以高可用测试的具体能力项(如负载均衡有效性、强弱依赖有效性)为基本单元,按照测试场景需求,将原子混沌工程故障场景进行有效组合。并应用混沌工程平台完成多个维度的高可用能力项测试工作。

实现对测试缺陷管理的全过程管理,支持测试缺陷全过程的跟踪、状态修改,对测试缺陷进行管理和汇总。

在测试工作中引入自动化能力,将系统架构内置于平台库中,并基于高可用专家库模板功能,实现自动化故障设计和实验案例生成,并在实验执行完成后自动化生成实验报告。报告维度包括:测试案例、测试实验、业务指标观察、系统资源指标观测、实验结果分析、测试缺陷的关键环节数据依据等。有效降低人工重复的工作内容,大幅提高混沌工程的实施效能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/554705.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Transform结构

面试者经常会问transform这个模型,一个典型的seq2seq结构。 1 背景 试问几个问题,为什么提出了transform模型。RNN对于长时间序列(超过40)压缩到一个上下文向量中出现记忆退化现象,无法更好捕捉上下文信息。因此trans…

C语言知识(1) static修饰详解分享

1.前言 哈喽大家好啊,今天来给大家分享c中static的使用,希望能对大家有所帮助,请大家多多点赞,收藏支持我哦~ 2.正文 在讲解static之前,先给大家铺垫三个概念,方便大家理解。 2.1三则知识铺垫 2.1.1作…

写了一个 SRE 调试工具,类似一个小木马

远程操作机器有时会比较麻烦,我写了一个工具,主要功能:1.远程执行命令 2.上传下载文件。是一个 Web Server,通过 HTTP 请求来操作机器,类似一个小木马。当然,因为是一个 Web Server,所以也提供了…

批量人脸画口罩

网上参考的修改了一下,图片放在根目录,命名叫做1.png,批量人脸画口罩 这个程序的目的是为了解决人脸数据集中的特征点缺失的不足 # -*- coding: utf-8 -*- import os import numpy as np from PIL import Image, ImageFile__version__ 0.3…

短视频矩阵源头====技术文档交付

短视频矩阵源头技术文档交付 搭建短视频矩阵系统源码需要以下步骤: 1. 确定系统需求和功能:明确系统需要支持哪些功能,例如短视频的上传、存储、播放、分享、评论、点赞等。 2. 选择合适的编程语言和框架:根据需求选择合适的编程…

【python】描述性统计计算偏斜度和峭度

文章目录 1.编写计算偏斜度和峭度的函数。并用自己编写的函数计算课本23页的习题1.5数据的偏斜度和峭度。2.从1.5数据中随机抽取2个容量为20的样本,分别计算它们的平均数和标准差3.请绘制给定数据的频率分布直方图,计算数据的均值、标准差、偏斜度和峭度…

IDP之Backstage - 环境搭建

0. 目录 1. 前言2. 环境准备(Windows10下)2.1 安装nvm2.2 git和docker安装 3. 创建模板项目3.1 典型错误: fails on the yarn install step3.2 再次启动3.3 验证 4. 相关 1. 前言 本不想写这篇,因为看着官网文档写着挺简单的,但实…

【C语言】多字节字符、宽字符(涉及字符集和编码)

字符集、编码: 字符集:一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。例如:ASCII、Unicode、GB2312、GBK、GB18030、BIG5(繁体中文) ... 编码方式:符号…

半导体厂商

引言: 学习了这么久了, 突然发现对某些陌生类型的单片机的历史、公司、不是很了解, 很多只是听说过, 本文的分享就是为了解决关于上述疑问的。 目录 C51 STM32 AVR PIC NXP(恩智浦) Infineon (英飞凌…

2024新手做电商——哪个平台开店更好做?多平台对比分析!

哈喽~我是电商月月 随着互联网的发展,线下创业越来越不好做 相对于其他创业项目来说,电商的门槛还相对低一点,所以一大批人创业的选择,就看向了电商行业 但准备开店的新手朋友纠结了:自己没有基础,选择哪…

Java面试:MySQL面试题汇总

1.说一下 MySQL 执行一条查询语句的内部执行过程? 答:MySQL 执行一条查询的流程如下: 客户端先通过连接器连接到 MySQL 服务器;连接器权限验证通过之后,先查询是否有查询缓存,如果有缓存(之前…

中海达亮相全国地灾防治成果交流会, 硬核产品引关注

4月17日-18日,全国地质灾害防治新方法新技术新设备成果交流会在云南昆明召开。本次活动主题为“提升地质灾害防治能力,服务保障高质量发展”,由中国地质灾害防治与生态修复协会举办,来自业务主管部门、行业协会及相关企业等800多名…

JS-33-jQuery02-选择器

一、单个选择器 选择器是jQuery的核心。 一个选择器写出来类似$(#dom-id)。 美元符号定义 jQuery 为什么jQuery要发明选择器?回顾一下DOM操作中我们经常使用的代码: // 按ID查找: var a document.getElementById(dom-id);// 按tag查找&am…

3d模型渲染怎么会没材质---模大狮模型网

在进行3D模型渲染时,有时会遇到材质丢失的问题,这可能会给设计师们带来一些困扰。材质是渲染的重要组成部分,它们赋予了模型真实感和视觉吸引力。然而,当模型在渲染过程中出现没有材质的情况时,可能会导致最终效果不如…

服务器数据恢复—RAID5故障导致SAP+oracle数据丢失的数据恢复案例

服务器存储数据恢复环境: 某品牌服务器存储中有一组由6块SAS硬盘组建的RAID5阵列,其中有1块硬盘作为热备盘使用。上层划分若干lun,存放Oracle数据库数据。 服务器存储故障&分析: 该RAID5阵列中一块硬盘出现故障离线&#xff0…

C++类和对象第二弹(构造,析构和拷贝构造函数)

目录 前言 1. 类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3. 析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 总结 前言 本文主要讲解类中构造函数、析构函数和拷贝构造函数。关于这三个类中默认成员函数的知识点很多,有许多…

OSPF笔记+大实验

OSPF综合大实验---实验报告 配置IP地址 R1: [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 172.16.33.1 24 [R1-GigabitEthernet0/0/0]int l0 [R1-LoopBack0]ip add 172.168.34.1 24 R2: [R2]int g0/0/0 [R2-GigabitEthernet0/0/0]ip add 172.16.33.2 24…

云服务器租用价格多少钱一年?

云服务器租用价格多少钱一年?61元一年起。现在租一个服务器多少一个月?云服务器一年费用多少钱?优惠价格低至3.8元1个月,租用云服务器收费价格表:阿里云和腾讯云2核2G3M服务器优惠价格61元一年、云服务器是99元一年&am…

秋招之路 面经

这里参考一位很厉害的前辈所分享的他的嵌入式软件工程师秋招之路,自己详细的读了一下他的经历以及他的分享的秋招面试和项目经验的总结。 我的嵌入式软件工程师秋招之路(文末送福利)_嵌入式软件工程师 刷leetcode-CSDN博客 如何在面试中介绍…

鸿蒙TypeScript学习第19天【命名空间】

1、TypeScript 命名空间 命名空间一个最明确的目的就是解决重名问题。 假设这样一种情况,当一个班上有两个名叫小明的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的姓&#xff0…