当每个人都在庆祝我的生日时,我一直在修复集群直到早上 - 开发人员将他们的错误归咎于我

当每个人都在庆祝我的生日时,我一直在修复集群直到早上 - 开发人员将他们的错误归咎于我

这是一个永远改变了我的 DevOps 工作方式的故事。 回到新冠疫情之前的时代,早在他们之前很久很久,当我和这些家伙刚刚规划自己的业务并根据随机订单进行自由职业时,一个报价落入了我的购物车。

写这篇文章的公司是一家数据分析公司。 她每天处理数千个请求。 他们来找我们说:伙计们,我们有 ClickHouse,我们希望自动化它的配置和安装。 我们想要 Ansible、Terraform、Docker 并将其全部存储在 Git 中。 我们想要一个由四个节点组成的集群,每个节点有两个副本。

这是一个标准要求,有几十个,你需要一个同样好的标准解决方案。 我们说“好的”,两三周后一切都准备好了。 他们接受了这份工作并开始使用我们的实用程序迁移到新的 Clickhouse 集群。

没有人想要或知道如何修改 Clickhouse。 然后我们认为这是他们的主要问题,因此公司的服务站只是允许我的团队尽可能自动化工作,以免我自己再去那里。

我们伴随着这一举动,出现了其他任务——设置备份和监控。 与此同时,该公司的服务站与另一个项目合并,留下我们自己的一个人——列昂尼德——担任指挥官。 莱尼亚并不是一个很有天赋的人。 一个普通的开发人员突然被任命负责 Clickhouse。 看来这是他第一次受委派管理什么事情,压倒性的荣誉让他有种追星的感觉。

我们一起开始进行备份。 我建议立即备份原始数据。 只需拿起它,拉上拉链,然后优雅地将其扔进 c3 中即可。 原始数据就是黄金。 还有另一种选择 - 使用冻结和复制来备份 Clickhouse 中的表本身。 但莱尼亚想出了自己的解决方案。

他宣布我们需要第二个 Clickhouse 集群。 从现在开始,我们将把数据写入两个集群——主集群和备份集群。 我告诉他,Lenya,这不会是备份,而是活动副本。 如果数据在生产中开始丢失,您的备份也会发生同样的情况。

但莱尼娅紧紧抓住方向盘,不听我的争论。 我们在聊天中和他聊了很长时间,但没什么可做的——Lenya负责这个项目,我们只是从街上雇来的孩子。

我们监控集群的状态,并且只对管理员的工作进行收费。 纯粹的 Clickhouse 管理,无需进入数据。 集群可用,磁盘良好,节点良好。

我们几乎不知道我们收到这份订单是由于他们团队内部的严重误解

经理对 Clickhouse 运行缓慢且有时会丢失数据感到不满。 他给他的服务站布置了解决这个问题的任务。 他尽其所能地想出了办法,并得出结论:我们只需要实现 Clickhouse 的自动化——仅此而已。 但很快我们就发现,他们根本不需要一个 DevOps 团队。

这一切变得非常非常痛苦。 最令人反感的是那天是我的生日。

星期五晚上。 我在我最喜欢的酒吧预订了房间并邀请了朋友。

几乎在离开之前,我们收到了创建alter的任务,我们完成了它,一切都很好。 更改通过,clickhouse 确认。 我们已经要去酒吧了,他们写信给我们说没有足够的数据。 我们计算了一下,一切似乎都足够了。 他们离开去庆祝。

周五的餐厅很吵。 点了饮料和食物后,我们在沙发上休息。 一直以来,我的闲暇时间都被信息慢慢淹没。 他们写了一些关于缺乏数据的文章。 我想——早晨比晚上更明智。 尤其是今天。

临近十一点,他们开始打电话。 是公司的领导……“大概是决定祝贺我了。”我很犹豫地想,然后就拿起了电话。

我听到这样的话:“你搞砸了我们的数据! 我付钱给你,但没有任何效果! 你负责备份,但你什么也没做! 我们来解决它吧!” - 只是更粗鲁。

- 你知道吗,滚出去! 今天是我的生日,现在我要喝酒,而不是从事你们六月自制的垃圾和棍棒产品!

那是我没有说的。 相反,我拿出笔记本电脑开始工作。

不,我轰炸了,我轰炸得很厉害! 他在聊天中充满了刻薄的“我告诉过你了”——因为备份,根本不是备份,——当然,没有保存任何东西。

我和孩子们想出了如何手动停止录音并检查一切。 我们实际上确保了一些数据没有被写入。

我们停止记录并计算每天发生的事件数量。 他们上传了更多数据,其中只有三分之一没有记录。 三个分片,每个分片有 2 个副本。 您插入 100.000 行 - 33.000 行未记录。

完全混乱了。 每个人都轮流让对方滚蛋:莱尼亚先去了,然后是我和公司的创始人。 只有加入的服务站试图将我们的呼喊和信件转移到寻找问题的解决方案上。

没有人明白到底发生了什么

当我们意识到三分之一的数据不仅没有被记录,而且还丢失了时,我和这些人简直震惊了! 原来公司里的顺序是这样的:插入后,数据被不可撤销地删除,事件被批量浪费。 我想象着谢尔盖将如何将这一切兑换成失去的卢布。

我的生日也被扔进垃圾桶了。 我们坐在酒吧里,想出各种想法,试图解决摆在我们面前的难题。 Clickhouse 下跌的原因并不明显。 也许是网络的问题,也许是 Linux 设置的问题。 是的,无论你想要什么,已经有足够的假设了。

我没有宣誓开发商的誓言,但抛弃电话那头的人是不诚实的——即使他们把一切都归咎于我们。 我99%确信问题不在于我们的决定,不在于我们这边。 我们搞砸的那 1% 的可能性让我们焦灼不安。 但无论问题出在哪一方,都必须解决。 让客户,无论他们是谁,遭受如此可怕的数据泄露,都太残忍了。

我们在餐厅的餐桌上工作到凌晨三点。 我们添加了事件,插入了选择,然后我们就去填补空白。 当你搞砸数据时,你就是这样做的:你取前几天的平均数据并将它们插入到搞砸的数据中。

凌晨三点多,我和朋友去我家,从酒类市场点了一瓶啤酒。 我坐在笔记本电脑前,遇到 Clickhouse 问题,一位朋友告诉我一些事情。 结果,一个小时后,他因为我在工作而不和他一起喝啤酒而感到生气,然后就离开了。 经典 - 我是 DevOps 的朋友。

到了早上 6 点,我再次重新创建了表,数据开始泛滥。 一切顺利,没有任何损失。

然后就很难了。 每个人都因数据丢失而互相指责。 如果出现新的错误,我确信将会发生枪战

在这些斗争中,我们终于开始明白——公司认为我们是处理数据和监控表格结构的人。 他们混淆了管理员和经销商。 他们来问我们一些与管理员不同的问题。

他们的主要抱怨是——到底是什么,你负责备份却没有做好,你继续浪费数据。 所有这一切都与倒带垫有关。

我想要正义。 我挖出了每个人的信件并附上了屏幕截图,列昂尼德竭尽全力迫使他们进行备份。 在我打电话后,他们的服务站站在了我们这边。 后来莱尼亚承认了自己的罪行。

相反,公司的负责人并不想责怪自己的人。 截图和言语对他没有任何影响。 他认为,既然我们是这里的专家,就必须说服大家,坚持我们的决定。 显然,我们的任务是教Lenya,而且绕过他,他被任命为项目经理,直接向他倾诉我们对备份概念的所有疑问。

谈话中充满了仇恨、隐藏的和不隐藏的攻击。 我不知道该怎么办。 一切都陷入了停滞。 然后他们建议我最简单的方法 - 给经理写一封个人信息并安排与他的会面。 Vasya,现实生活中的人并不像聊天中那么快。 老板回复我的消息:来吧,没问题。

这是我职业生涯中最可怕的会议。 我的客户盟友 STO - 找不到时间。 我和老板还有莉娜一起去开会。

我一遍又一遍地在脑海中回放我们可能的对话。 我很早就到了,提前了半个小时。 我开始变得紧张,我抽了 10 支烟。我明白了,就是这样——我他妈孤身一人。 我无法说服他们。 然后他走进了电梯。

当他站起来的时候,他用力敲打打火机,结果把打火机打碎了。

结果,莱尼亚没有出席会议。 我们和老板就所有事情都进行了愉快的交谈! 谢尔盖向我讲述了他的痛苦。 他不想“自动化 Clickhouse”——他想“让查询发挥作用”。

我没有看到山羊,但看到了一个好人,担心自己的生意,24/7 沉浸在工作中。 聊天常常给我们带来恶棍、无赖和愚蠢的人。 但在生活中,这些人就像你一样。

Sergei 不需要雇用几个开发人员。 他们发现的问题要大得多。

我说我可以解决他的问题——这只是一份完全不同的工作,而且我有一个朋友在做这份工作。 如果我们从一开始就知道这对他们来说是一笔交易,我们就会避免很多事情。 虽然已经晚了,但我们意识到问题在于糟糕的数据管理,而不是基础设施。

我们握手了,他们把我们的工资提高了两次半,但条件是我绝对要自己承担他们的数据和 Clickhouse 的全部混乱。 在电梯里,我与那个 DI 人员 Max 进行了交流,并为他安排了工作。 有必要铲掉整个集群。

采用的项目中有很多垃圾。 从提到的“备份”开始。 事实证明,这个“备份”集群并不是孤立的。 他们测试了一切,有时甚至将其投入生产。

我们的内部开发人员创建了自己的自定义数据插入器。 他的工作方式如下:对文件进行批处理,运行脚本并将数据合并到表中。 但主要问题是一个简单的请求就接受了大量的数据。 该请求每秒加入数据。 一切都是为了一个数字——每天的金额。

内部开发人员错误地使用了分析工具。 他们去了格拉法纳并写下了皇家请求。 他上传了两周的数据。 结果这是一个漂亮的图表。 但实际上,数据请求是每 2 秒一次。 所有这些都堆积在队列中,因为 Clickhouse 根本没有进行处理。 这就是隐藏的主要原因。 Grafana 中什么都不起作用,请求排在队列中,旧的、不相关的数据不断到达。

我们重新配置了集群,重新进行了插入。 内部开发人员重写了他们的“插入器”,它开始正确地分片数据。

Max 进行了全面的基础设施审计。 他概述了过渡到成熟后端的计划。 但这并不适合该公司。 他们期望麦克斯能提供一个神奇的秘密,让他们能够以老式的方式工作,但效率很高。 莱尼亚仍然负责这个项目,他什么也没学到。 从所提供的一切中,他再次选择了他的选择。 一如既往,这是最具选择性的……大胆的决定。 Lenya 相信他的公司有一条特殊的道路。 荆棘丛生,布满冰山。

事实上,这就是我们分手的地方——我们做了我们能做的。

我们从这段历史中汲取了丰富的知识和智慧,开始了自己的事业,并为自己制定了几条原则。 我们现在再也不会像以前那样开始工作了。

DJ Max 在这个项目之后加入了我们,我们仍然合作得很好。 Clickhouse 案例教会了我如何在开始工作之前进行完整彻底的基础设施审核。 我们了解一切是如何运作的,然后才接受任务。 如果早些时候我们会立即急于维护基础设施,那么现在我们首先做一个一次性项目,这有助于我们了解如何使其进入工作状态。

是的,我们会避免基础设施糟糕的项目。 即使为了很多钱,即使出于友谊。 运行病态项目是无利可图的。 认识到这一点帮助我们成长。 要么是一个使基础设施井然有序的一次性项目,然后是一份维护合同,要么我们只是匆匆而过。 又经过另一座冰山。

PS 因此,如果您对基础设施有疑问, 请随时留下请求.

我们每月有 2 次免费审核,也许您的项目就是其中之一。

来源: habr.com

添加评论