滴滴2023.11.27P0级故障技术复盘回顾(k8s的的错?)

本文从滴滴官方恢复及技术公众号带大家从技术角度复盘这次事故

目录

1. 背景

2. 滴滴官方消息

3. 问题分析及定位

4.网传的k8s及解析

5.k8s引发的思考:举一反三,怎么避免再次出现

6.近段时间其他平台崩溃回顾


1. 背景

11 月 27 晚约 10 点,滴滴打车遭遇大范围技术故障。用户在使用滴滴的应用程序及小程序时遇到诸多问题,包括叫车功能反应迟缓、无法使用青桔单车扫码功能,以及领取打车优惠券功能失效。直至第二天早上,滴滴发文已恢复正常。

根据微博反馈发现了如下问题:

  • 网络加载异常,无法排单;

  • 数据紊乱,一个订单被派到 4 个司机订单中;

  • 数据展示、数据状态有误,订单取消、订单支付都出现问题;

  • 排单逻辑出错,司机接单到 两千公里以外的单;

  • 订单流水出错,8 公里显示收费 1540 元;

  • 整体问题,连带滴滴、小桔充电、滴滴加油、青桔单车都出现问题;

  • 滴滴内网问题,员工无法正常使用内网相关服务;

至此,滴滴“喜提”微博热搜

2. 滴滴官方消息

3. 问题分析及定位

11月29日,滴滴出行再就27日夜间系统故障致歉,提出了相应的补救措施和补偿方案。并公布了本次事故的初步调查结果:起因是底层系统软件发生故障,并非网传的“遭受攻击”

本次事件中,平台功能几乎全面瘫痪,仅网约车服务功能恢复时长近12小时,可以猜测不是某一个软件功能的bug,否则影响不会这么广,恢复也不会这么慢。滴滴官方也发文说明是底层系统软件的发生故障所以排除了服务器硬件的问题,所以可以猜测为云服务器基础底层软件的问题。

滴滴拥有庞大的业务线,其底层系统由复杂的软硬件构成,其中包括服务器、网络设备、数据库等等重要组成部分,任何一个环节出现故障,都有可能导致整个系统崩溃,用户无法正常使用服务。

360 安全专家认为,滴滴闪崩背后的技术原因可能有六种:

  1. 系统更新升级过程中出现了编程错误、逻辑错误或未处理的异常情况:一般情况下,互联网厂商发布更新都会在晚上,与滴滴发生故障的时间也能对应,当然业务升级维护是放量更新,但现在滴滴全平台、全业务都故障了,说明肯定是他 “家里” 的问题。
  2. 服务器故障:比如滴滴的核心机房,可能恒温恒湿环境出了问题,导致服务器过热、CPU 烧了,或者核心机房所在地发生了自然灾害如地震、洪水、海啸等,这种情况下,硬件需要重新更换,里面的服务软件也需要重新配置,恢复周期相对较长,但这个可能性比较小。
  3. 第三方服务故障:滴滴的后台架构可能使用了第三方服务或者组件。如果第三方出了问题,也可能会影响滴滴的正常运行。但出于安全性考虑,滴滴可能不会将核心业务托管给第三方,不过这个可能性也较小。
  4. 其他网络安全问题(由于滴滴已经官方说明不是受到攻击,所以均可排除其他3种推测)

个人分析:

  • 由于官方声明底层系统软件发生故障,所以排除了服务器的故障,那么滴滴这种大公司,使用的第三方组件应该也都是很大的供应商提供的, 如果是第三方组件出问题,其他使用该组件的公司也会出问题,目前看没事,所以也可以排除,那么最终来看,应该就是底层系统软件升级的时候出了问题

4.网传的k8s及解析

上面通过定位已经定位到了底层系统软件升级的时候出了问题,根据下面的网传图片,k8s符合推断

翻了一下滴滴技术公众号2023-10-17表一篇文章《滴滴弹性云基于 K8S 的调度实践》,发现滴滴技术同学在做k8s集群升级:k8s 版本的升级:介绍到从 k8s 1.12 到 1.20 跨版本升级的方案,而且单集群节点已经超过了5000个node,一旦爆炸,爆炸半径是不小

给了两个方案:

1. 替换升级方案介绍:

两个 k8s 集群,1.12 和 1.20,直接搭建新的一套新的 1.20 master 和周边组件;

1.20 集群中创建和 1.12 和等量的业务负载,也就是 sts 和 pod;

通过上游的流量管控应用决定流量分布,一开始流量都在 1.12 的 sts 的 pod中,逐步切流到 1.20 的 sts 的 pod;

有问题的时候可以快速回切流量。

2. 原地升级方案介绍:

只有一个 k8s 集群,将 master 和周边组件直接从 1.12 升级到 1.20;

逐步将集群中的 node 也就是 kubelet 从 1.12 版本升级到 1.20;

不做任何业务负载相关的操作,也就是 sts 和 pod 无需重建,其实的流量分布也不做操作,随着 node 升级流量天然就逐步从 1.12 切到 1.20 了;

有问题的时候需要部分回滚 node 的 kubelet,当出现全局性风险的时候需要全量回滚 master 和周边组件。

滴滴,从方案可落地以及成本角度最终选取了原地升级万一失控了怎么办,万一回退不成功怎么办?

至于为什么采用原地升级方案,估计还有很多细节我们不得而知,但是此种方式确实有点激进,一旦出现问题就很难处理。

5.k8s引发的思考:举一反三,怎么避免再次出现

  1. 没必要为了炫技使用最新技术,虽然k8s容器编排技术很新,能解决很多微服务部署的问题,但是如今的k8s非常重,对运维技术要求很高,一旦出现问题就很难解决。适合的技术选型才是最好的,对于一些QPS不是很高且对可用度要求不是很高的场景,一台高性能服务器上用个Docker足够了,甚至有些场景Docker容器都没必要用,一个Tomcat就解决了
  2. 鸡蛋不要放到一个篮子里,生产环境多集群部署,还是有必要的,即使是原地升级,灰度可以按生产集群灰度,灰度集群有问题另外一个集群还能顶起来。
  3. 故障演练,往往故障演练都是局部、某些模块进行停机演练,集群级别、机房级别故障演练的可以安排,毕竟是国民级应用。

6.近段时间其他平台崩溃回顾

  1. 10月23日语雀(在线文档编辑与协同工具)发生服务器故障,在线文档和官网目前均无法打开。当日 15 时,语雀发布官方声明称,“目前因网络故障,出现无法访问的情况。此故障不会影响用户在语雀存储的数据,不会引起数据丢失,我们正在紧急恢复中,再次抱歉给你带来的损失。”
  2. 11月12日下午5点多,阿里云出现异常,随之“淘宝又崩了”“闲鱼崩了”“阿里云盘崩了”“钉钉崩了”等话题相继登上微博热搜。原因是2023年11月12日17:44起,阿里云产品控制台访问及API调用出现出现使用异常,阿里云工程师正在紧急介入排查。当天晚上7点20左右恢复正常。
  3. 阿里云第二次发生在11月27日。阿里云声明称11月27日09:16起,阿里云监控发现北京、上海、杭州、深圳、青岛 、香港以及美东、美西地域的数据库产品(RDS、PolarDB、Redis等)的控制台和OpenAPI访问出现异常,实例运行不受影响。经过工程师紧急处理,访问异常问题已于当日10:58恢复。

不断频发的宕机事件,警醒着大家:技术风险保障和高可用架构设计非常重要,确保数据备份、系统容错能力,如增加存储系统的异地灾备,实现快速恢复,并进行定期的容灾应急演练,缩小运维动作灰度范围。今后,我们也要加强运维工具的质量保障与测试,杜绝此类运维 bug 再次发生。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 表格虚拟滚动

参考未整理 1.使用vxetable实现 官网 问题&#xff1a; 实现了表格的虚拟滚动&#xff0c;但是单元格数据不自动换行了 &#xff0c;如下显示的... 然后在官网看到是这样的&#xff0c;那我不是白写。。。 解决&#xff1a; 1.包一层div2.再写个换行样式 <vxe-column …

Springboot如何快速生成分页展示以及统计条数

这是表结构&#xff1a; 前置知识&#xff1a; 分页查询公式&#xff08;&#xff09;&#xff1a; -- 推导一个公式 -- select * from emp -- order by empno -- limit 每页显示记录数 * (第几页-1)&#xff0c;每页显示记录数 统计条数公式&#xff1a; select count…

lv11 嵌入式开发 轮询与中断13

1 CPU与硬件的交互方式 轮询 CPU执行程序时不断地询问硬件是否需要其服务&#xff0c;若需要则给予其服务&#xff0c;若不需要一段时间后再次询问&#xff0c;周而复始 中断 CPU执行程序时若硬件需要其服务&#xff0c;对应的硬件给CPU发送中断信号&#xff0c;CPU接收到中…

Python协程技术:从Greenlet到async/await的异步编程探索

协程&#xff1a; ​ 协程&#xff0c;在Python中&#xff0c;协程是一种轻量级的并发编程方式&#xff0c;它允许在单个线程内实现多个独立的执行流。协程可以在不同的执行点之间进行切换&#xff0c;而无需依赖于操作系统的线程切换。这使得协程成为处理高并发和异步任务的有…

Csharp(C#)无标题栏窗体拖动代码

C#&#xff08;C Sharp&#xff09;是一种现代、通用的编程语言&#xff0c;由微软公司在2000年推出。C#是一种对象导向的编程语言&#xff0c;它兼具C语言的高效性和Visual Basic语言的易学性。C#主要应用于Windows桌面应用程序、Windows服务、Web应用程序、游戏开发等领域。C…

Windows系列:windows2003-建立域

windows2003-建立域 Active Directory建立DNS建立域查看日志xp 加入域 Active Directory 活动目录是一个包括文件、打印机、应用程序、服务器、域、用户账户等对象的数据库。 常见概念&#xff1a;对象、属性、容器 域组件&#xff08;Domain Component&#xff0c;DC&#x…

【开源】基于Vue.js的农村物流配送系统的设计和实现

项目编号&#xff1a; S 024 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S024&#xff0c;文末获取源码。} 项目编号&#xff1a;S024&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2…

对抗产品团队中的认知偏误:给产品经理的专家建议

今天的产品经理面临着独特的挑战。他们不仅需要设计和构建创新功能&#xff0c;还必须了解这些功能将如何为客户带来价值并推进关键业务目标。如果不加以控制&#xff0c;认知偏差可能会导致您构建的内容与客户想要的内容或业务需求之间不一致。本文将详细阐述产品经理可以避免…

帮亲戚个忙,闲来有事用php写个58商铺出租转让信息抓取

最近亲戚想做点小超市生意&#xff0c;但是又不懂互联网&#xff0c;信息获取有点闭塞。知道我身在互联网大潮中&#xff0c;想让我帮忙看看网上有没有商铺转让的。心想&#xff0c;这不是小菜一碟&#xff0c;大显身手的时候来了&#xff0c;大概去58瞅了瞅&#xff0c;这玩意…

网狐类源码游戏配置数据库数据(一键配置网狐数据库)

网狐类源码游戏配置数据库数据&#xff08;一键配置网狐数据库&#xff09; 一般拿到网狐的源码或组件&#xff0c;需要先附加或配置数据库&#xff0c;以下为全部需要更改数据的地方&#xff0c;这里以荣耀系列版本数据库为例&#xff1a; 1. 数据库设置 [RYPlatformDB].…

Unity Canvas、Canvas Scaler、Graphic Raycaster、EventSystem 组件详解

文章目录 0. 参考文章1. Canvas1.1 Screen Space-Overlay —— 屏幕空间覆盖模式1.2 Screen Space-Camera —— 相机模式1.3 World Space —— 世界模式 2. Canvas Scaler&#xff1a;控制UI画布的放大缩放的比例2.1 Constant Pixer Size —— 恒定像素2.2 Scale With Screen S…