Canonical Juju 的一个奇怪编排部署

一周前的一个项目扩容出现了异常,进行了操作回滚,未对线上业务造成损失。

现象是这样的:

        通过基于 Canonical Juju-GUI 在一组节点上部署了某个组件,在把这组节点添加到集群后,有4个节点上出现了同一组件的2个instance、这4个异常节点中的3个发生了组件配置文件全部丢失的现象。

        BD的现场产品支撑粗暴地下结论为:短时间内重复点击了组件部署,导致组件配置文件被替换。

        但我认为这个论调很牵强,在时间先后上构不成必然的因果关系。

整个操作过程如下:

        20:30分开始部署业务组件,有6个节点因部署结果相应不正确而进行了第二次部署,两次部署时间间隔 34秒47毫秒;

        由于该项目同时有另一个组件配置变更,协商后决定顺序执行这2个变更操作(扩容操作为后者)。21:30分开始操作扩容变更,检查全部节点上该组件的配置文件未发现异常,按照既定计划向集群中添加Node,全部Node添加成功。大约3分钟后,开始向新的集群节点中添加磁盘,该过程中发现了有2个节点添加磁盘失败。根据控制台输出的日志,发现是这2个节点中中组件配置文件全部不存在了。

        至此,中止本次扩容操作,开始数据止损、确保数据安全。

现在,来谈谈为什么不能认同 BD 产品支撑给出的结论:

一 、驳“短时间内重复点击了组件部署”

        首先,通过回放扩容操作录像,可以确认针对故障节点所在组的全部节点进行了两次批量部署,这两次批量部署的时间间隔是 34秒47毫秒。这个时间间隔在响应时间不超过5秒的产品规格中,不能算是“短时间重复操作”。

       其次,根据Juju-deploy的日志记录,部署组件的action日志中显示,重复的两次操作事件开始时间间隔只有3秒,这个时间差和回看录像发现的34秒47毫秒相差太大。另外,重复操作波及到的14台机器中只有4台上有创建2个instance的action事件记录。

二、驳“重复部署instance时配置文件被覆盖为空”

       首先,如果是重复操作部署产生的结果,那为何同一批14个节点中只有4个产生了2个instance、且这4个节点中只有3个节点上的配置文件发生了丢失?难道不是被波及的14个节点的配置文件全部被在第二次部署时覆盖掉吗?

       其次,根据 Linux 命令行工具的实验结论,通过tar解压一个空白文件夹是不会把已有的同名文件中的文件清空的。此外,在组件的install工具脚本中并未看到对已存在的同名文件夹进行删除的语句。因此,“重复部署instance时配置文件被覆盖为空”这个论点在事实上是不成立的。

       再次,为什么节点上的配置文件丢失是在第二次部署结束后的90分钟以后、且在instance使用该配置文件的过程中发生的配置文件丢失?“重复部署instance时配置文件被覆盖为空”这个论点与既有事实自相矛盾,无法解释为什么配置文件在使用中发生了丢失。

         BD的产品支撑给出的论点根本无法解释以上两个大方向的问题中的任何一个疑问。

        接下来的3天,我作为交付方代表主持了此次项目扩容事故的全面调查,产研、交付、运维、联合售后专家委员会、项目经理一致认可的结论是:基于Juju的交付工具存在产品缺陷,当前项目中的这个交付工具版本尚未修复过已经发现的产品BUG。

       在调查过程中,根据查阅的产品BUG汇总表,发现BD的产品研发对Canonical Juju进行了自研化修改,修改后的Juju存在的一个严重缺陷是:通过这个交付平台部署软件时,软件封包时的默认配置信息会被Juju工具平台删除,但这并不是一个必然的现象,而是只有在向既有集群中扩容新节点时才会发生。这个产品缺陷,最早在2023年9月就被作为业务环境重大生产事故报告过。2024年3月又有一次作为业务环境重大生产事故被在联合售后组会上通报过。

      更可怕的是,这个问题刚刚本次扩容当天的那个组件配置变更中发生了,在本次扩容中发生了这个问题,当天经历了这个问题的产研支撑竟然没有提示这个问题、在事故发生后的原因定位过程中居然还在避重就轻地往人员操作方向引导我们的调查思路......

事件有了结论,也该总结一下工程管理中的警示与教训了:

1)在非标准化产品交付过程中,一定要指定专职的DTA和SOP执笔,要充分考虑当前工程中的工具软件的缺陷与规避问题的方式;

2)不要盲目相信产品研发和产品规划提供的“标准操作”,他们提供的工作成果只能作为参考、不能直接执行,一定要贴合运行中的项目实况进行剪裁修改;

3)要取得方案执行的主导权和话语权,争取得到高层领导在资源和人力方面的支持,未取得绝对支持前不可妄动;

4)事故发生后不要慌,要原原本本说明自己“做了什么、没做什么”,客观地描述事故发生过程

5)被指名参与项目执行方案评审的产研、交付、运维、技术专家,必须亲自登录到目标业务环境中了解业务系统使用的组件是什么、组件版本是什么、该版本的组件已知产品缺陷是什么、在当前评审的执行方案中应当注意什么问题、如何规避已知问题。

6)项目活动执行方案评审,必须严格执行三审排期制度、绝对不可走过场式地临时评审,要确保每个执行方案评审意见有事前会签、事后反馈。

        

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

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

相关文章

WDF驱动开发-计时器

WDF可以使用框架的内置计时器支持。 它适用于 Kernel-Mode Driver Framework (KMDF) 驱动程序,以及从版本 2 开始的 User-Mode Driver Framework (UMDF) 驱动程序。 框架提供了一个 计时器对象 ,使驱动程序能够创建计时器。 在驱动程序创建计时器对象并…

Scala语言:大数据开发的未来之星 - 零基础到精通入门指南

前言 随着大数据时代的到来,数据量的急剧增长为软件开发带来了新的挑战和机遇。Scala语言因其函数式编程和面向对象的特性,以及与Apache Spark的完美协作,在大数据开发领域迅速崛起,成为该领域的新兴宠儿。本篇将从零基础开始&…

Vue59-全局事件总线:任意组件间通信

一、原理图 只是总结出的经验,不是新的API! 二、x的要求: 1、保证x被所有组件看见; 2、x可以调用的到$on,才能绑定事件,还能调用到:$of, $emit; 三、x的创建&#xff…

手把手教你创建并启动一个Vue3项目(Windows版)

一、Node安装 1、下载地址:Node.js — Run JavaScript Everywhere 2、安装Node,双击启动一直Next 3、验证安装Node是否成功,打开CMD命令窗口,输入node -v,显示版本就表示成功 4、验证安装npm是否成功,npm是…

sqlite3指令操作-linux

1.查看当前数据库位置 2.查看当前数据库文件下有哪些表 3.显示 某表创建时的SQL语句 4.打开、关闭显示列标题; 5.列对齐显示 6.列以‘,’分隔显示 .separator 7.查询表信息 8.插入消息 9.删除某一行内容 10.修改某行某列内容 11.修改表名字 alter tab…

开发者黑板报#65

第65期 AI 谷歌Gemini 终于,GPT-4独霸时代终结了! 过去一个月里,四款大模型横空出世,在各项关键基准测试中与GPT-4相匹敌,甚至更胜一筹。 谷歌Gemini 1.5突破100万个tokens,是GPT-4的近8倍&#xff0c…

办公楼导航系统:设计要点、功能实现与效益评估

随着现代办公楼的日益复杂化和规模化,如何高效、便捷地在楼宇内部进行定位和导航,已成为众多企业和员工关注的焦点。维小帮办公楼定位导航系统通过精准的定位和智能的导航功能,能够显著提升办公环境的智能化水平和办公效率。 一、维小帮办公…

嵌入式实验---实验一 通用GPIO实验

一、实验目的 1、掌握STM32F103 GPIO程序设计流程; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、通过按键实现:按键按下,LED点亮;按键释放,LED熄灭。 三、实验设备和器材 电脑、Keil uVision5软件、Proteus…

Top10在线音频剪辑软件,你了解几款?(免费分享)

多年来,随着音乐制作人和音频工程师的需求不断增长,音频剪辑软件领域经历了巨大的发展。最新的音频剪辑软件提供了从基本录制到最终发布所需的一切功能。其中一些软件专为播客设计,一些软件是免费的,并且一些软件提供了出色的音效…

【Win】双系统新体验:Hyper-V上macOS安装攻略

在虚拟化的世界里,Hyper-V是探索不同操作系统的一扇大门。尽管macOS并不是Hyper-V官方支持的来宾操作系统,但这并未阻挡技术探索者的脚步。他们通过不懈努力,开辟出了一条条通往macOS的非官方路径。这些路径或许曲折,却为那些渴望…

Z世代职场价值观的重塑:从“班味”心态到个人成长的追求

近日,社交平台Soul APP联合上海市精神卫生中心(俗称“宛平南路600号”)发布《2024年Z世代职场心理健康报告》(下称“报告”),发现今天的年轻人正以其独特的价值观和行为模式,重新定义成功与成就…

机器学习_SVM支持向量机

引入:在面对线性可分时,即用一条直线就可以区分数据的时候,需要将直线放在距离数据点距离最大化的位置,这个过程需要寻找最大间隔,即为最优化问题。当数据点不能用一根直线区分——线性不可分,就需要用核函…

瑞数信息入选IDC《中国WAAP厂商技术能力评估,2024》

5星满分:WAF、Bot流量管理、行业应用等评估维度 日前,全球领先的IT市场研究和咨询公司IDC发布《中国WAAP厂商技术能力评估,2024》。报告聚焦WAAP能力,通过对中国市场中主要WAAP产品提供商的技术评估以及对大量最终用户的客观访谈…

SpringBoot配置第三方专业缓存技术Ehcache

Ehcache缓存技术 我们刚才是用Springboot提供的默认缓存技术 我们用的是simple 是一个内存级的缓存 我们接下来要使用专业的缓存技术了 Ehcache 是一个流行的开源 Java 分布式缓存,由 Terracotta 公司开发和维护。它提供了一个快速、可扩展、易于集成的内存缓存…

【LeetCode最详尽解答】11-盛最多水的容器 Container-With-Most-Water

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家! 链接: 11-盛最多水的容器 直觉 这个问题可以通过可视化图表来理解和解决。 通过图形化这个…

防止员工离职导致数据泄露,员工离职后把文件带出公司

中科数安的电脑文件资料透明加密防泄密系统确实能够在一定程度上防止员工离职导致的数据泄露。以下是具体的分析: www.weaem.com 访问控制与权限管理:系统实施了严格的权限管理制度,对核心文件和数据资源进行细致的访问权限划分。这意味着&am…

从零开始! Jupyter Notebook的安装教程

🚀 从零开始! Jupyter Notebook的安装教程 摘要 📄 Jupyter Notebook 是一个广受欢迎的开源工具,特别适合数据科学和机器学习的开发者使用。本文将详细介绍从零开始安装 Jupyter Notebook 的步骤,包括各种操作系统的安装方法&am…

大屏适配方案汇总

1. 适配方案1:rem font-size 我们都知道,在 css 中 1rem 等于 html 根元素设定的 font-size 的 px 值,通过动态的修改html 根元素的 font-size 大小就能动态的改变 rem 的大小,从而实现适配。 原理 动态设置 HTML 根字体大小将…

产品交付能力提升的探索与分享

在当前激励的市场竞争环境下,对项目交付的成本和毛利要求越来越高。如何能快速高效地完成项目交付已然成为我们矢志追求的目标。抛开人为因素对项目交付效率的影响,产品本身的交付能力才是关键。因此,在设计新产品时需要考虑其便捷交付性&…

Linux下调试代码——gdb的使用

1. 文件准备: 测试代码: Makefile文件: 执行结果: 此时,我们的结果是存在问题的,即最终结果少了100。现在我们用gdb来调试它。 我们发现我们还没有安装gdb,这里安装一下。 2. 环境准备&#…