高并发情况下如何优化你系统
文章目录
各位老师好,这是大厂面试拆解——项目实战系列的第8篇文章。
知识地图:深入理解计算机系统—文件子系统
面试官提问:在高并发情况下,你做了哪些优化
小义思考:
我是一名后端 ceph 开发人员,在实际工作我遇到无法解决问题是什么?我是怎么解决的?
- 我进入公司之前, 公司产品运营 10 年我根本不知道产品怎么设计,看代码根本看不明白,无论之前 boss 系统还是 ceph 系统 ,里面代码研究不是框架,一堆业务代码 根本看不懂,虽然知道公司谁是大佬,分工原因,不敢让他们给解释,他们忙碌没时间,我怎么解决的,我准备看公司文档,资料,但是每天不停安排任务,结果根本没有看,转眼好几年过去了?我说过去是我设计的,就是骗子,此路不通,别人一看就假的
- 我进入公司,公司不停版本升级,但是分工问题,每天都在不停完成任务,根本无法接触,其现场问题,公司上百人每天不停设计讨论价值内容,根本接触不到,自己去研究一会,领导说不务正业,根本无法学习。怎么办?自己开发不少工能,解决不少问题 ,没有提炼学习,我说过去是现在如何解决的,此路不通,重启,扩容不是解决方案
- 怎么办?ceph 是开源的,这些特性公开的 Luminous (v12.2.x):首次引入 BlueStore 作为可选存储引擎,但默认仍为 FileStore,Ceph v17.2.0 Quincy 是 Ceph 的第 17 个稳定版,Quincy 中明确弃用了 FileStore,全面转向 BlueStore
我还一名 基于Ceph v17.2.0 Quincy开发人员
- 最重要特点是 BlueStore 成为 Ceph 的默认存储引擎,支持多租户
- 开发工作遇到问题
- 其他公司舍弃 ceph 自己开发一套系统 3fs,曙光等他们怎么做大的。
小义思考:
听到这个题目,我遇到问题是根本不知道怎么回答 ?
日常工作
- 加班 努力,奋斗 ,遇到挑战问题 ,根本没人考虑,保证原来日常工作运行消耗全部精力,帮助安装机器,部署环境,帮助别人 测,这样回答根本不行
- 整个公司没几个人 理解 高并发情况下,怎么解决?
- 不解决,限流 限流扩容
- 都根本不知道问题是什么,这样回答根本不行
- 全部说出来,别人看不懂,听不懂 马上失去看兴趣,然后说没思路。
假如 100 个客户端节点,3 个服务节点 cep集群,面试提问 在高并发,高请求情况下,遇到那些挑战,结合 ceph 版本变化说一下,从客户端,从 mon mds osd 等每个模块 遇到那些问题?请反复核对正确性,在回答,确保逻辑清楚,真实遇到的挑战。
在上面回答基础上 增加缓存一致性 副本一致性: 热点不均衡: 线程竞争 单个响应 和数据一致性做取舍? 在 io 栈角度回答最大问题是什么?带宽还是 cpu
不同模块客户端,mon ,mds ods 在下面问题遇到挑战是什么
*缓存一致性 副本一致性: 热点不均衡: 数据恢复与业务IO竞争 网络抖动时,MON节点
在 io 栈角度回答最大问题是什么?带宽还是 cpu
高并发场景下 对数据一致性 和单个响应做取舍是什么
—-靠支撑。
单个响应延迟 :网页 404 df 磁盘不可用,最大延迟多 一致性:
假如 100 个客户端节点,3 个服务节点 cep集群,面试提问 在高并发,高请求情况下,遇到那些挑战,结合 ceph 版本变化说一下,从客户端,从 mon mds osd 等每个模块 遇到那些问题?请反复核对正确性,在回答,确保逻辑清楚,真实遇到的挑战。
在上面回答基础上 增加缓存一致性 副本一致性: 热点不均衡: 线程竞争 单个响应 和数据一致性做取舍? 在 io 栈角度回答最大问题是什么?带宽还是 cpu
不同模块客户端,mon ,mds ods 在下面问题遇到挑战是什么
*缓存一致性 副本一致性: 热点不均衡: 数据恢复与业务IO竞争 网络抖动时,MON节点
在 io 栈角度回答最大问题是什么?带宽还是 cpu
高并发场景下 对数据一致性 和单个响应做取舍是什么
—-靠支撑。
单个响应延迟 :网页 404 df 磁盘不可用,最大延迟多 一致性:
在高并发、小块 IO(如 4KB–64KB)场景下,Ceph 集群的主要瓶颈在于 CPU 资源的竞争与锁争用,这直接影响系统的延迟和吞吐能力。以下详细解释这一问题的具体表现及其成因:
🔍 为什么 CPU 成为瓶颈?
1. 多线程处理导致的资源竞争
Ceph 的架构中,尤其是 OSD(对象存储守护进程)和客户端,采用多线程模型来处理 IO 请求。这些线程包括:
-
tp_osd_tp
:处理前端 IO 请求。 -
aio
:异步 IO 操作线程。 -
kv_sync_thread
:负责将数据同步到 RocksDB。 -
kv_finalize_thread
:完成 RocksDB 操作。 -
finisher
:处理完成后的回调。
每个写请求可能需要经过上述多个线程的处理,线程之间的切换和同步增加了 CPU 的负担,尤其是在高并发情况下 。
2. RocksDB 的锁争用
Ceph 使用 RocksDB 作为其元数据存储引擎。RocksDB 内部存在一个全局互斥锁(DBImpl.mutex_
),用于保护元数据操作,如 memtable 和 SST 文件的引用计数、压缩、刷新等。在高并发读写操作时,大量线程争夺这一锁,导致性能下降 。
3. 客户端线程模型的限制
在客户端,尤其是使用 RBD(RADOS 块设备)时,默认配置下,每个 IO 操作会创建多个线程(如 io_context_pool
和 msgr-worker
)。当同时处理多个映像(image)时,线程数量激增,导致 CPU 资源被大量占用,线程切换频繁,降低了整体性能 。
⚙️ 如何缓解 CPU 瓶颈?
1. 优化线程配置
-
减少线程数量:通过调整
librados_thread_count
和ms_async_op_threads
参数,控制客户端线程数量,避免线程过多导致的上下文切换开销。 -
线程绑定:将关键线程绑定到特定的 CPU 核心,减少线程迁移带来的缓存失效和上下文切换。
2. 采用 Crimson 架构
Ceph 的 Crimson 项目旨在通过采用 Seastar 框架,重构 OSD 的处理模型,采用无共享(shared-nothing)和运行至完成(run-to-completion)的设计,减少线程之间的同步和锁争用,从而提升多核 CPU 的利用率 。
3. 调整 RocksDB 配置
-
增加写缓冲区大小:通过调整
write_buffer_size
,减少写放大效应。 -
优化压缩策略:根据实际需求,选择合适的压缩算法,平衡 CPU 开销和存储效率。
-
控制后台线程数量:设置
max_background_compactions
和max_background_flushes
,避免后台操作占用过多 CPU 资源 。
📌 总结
在 Ceph 的高并发、小块 IO 场景下,CPU 的竞争和锁争用是导致性能瓶颈的主要原因。通过优化线程模型、采用新的架构(如 Crimson)、调整 RocksDB 的配置,可以有效缓解这一问题,提升系统的整体性能和稳定性。
打造下一代Ceph OSD解决方案_业界_
——————–——END————————–
我是谁
最动人的作品,为自己而写,刚刚好打动别人 刚刚好,是最难得的美好
抬头看天:走暗路、耕瘦田、进窄门、见微光,
- 我要通过技术拿到百万年薪P7职务,别人投入时间完成任务,别人采取措施解决问题了,不要不贪别人功劳,
- 但是不要给自己这样假设:别人完成就等着自己完成了,大家一个集团,一个公司,分工不同,不,这个懒惰表现,这个逃避问题表现,
- 别人不这么假设,至少kpi上不会写成自己的,至少晋升不是你,裁员淘汰是,你的整个公司ceo,整个部门总裁,整个领导不帮助一下的,他们不这么想 ,你什么没做,战略是别人10年一点带你研究的多难,项目拆分别人10年完成多少问题,项目实现10年安排组织一点点完成多少bug,多少代码,是不要给自己这样假设:你等了看了观察10年什么做 ,0 贡献,
- 但是不要给自己这样假设,别人全部市场,别人全部市场,别人占据全部客户,一切重要无比,你太差,太才,思考不行,沟通不行,认知不行,去tmd,给别人丢脸。这个方面我无法控制,在这方面经历任何问题应该的。
- 我控制 的事情是 我必须亲自了解行业遇到难题,了解有什么需求,行业解决方案,我可以从三万英尺看问题,像周围人学习,像免费公开英文资料学习,从模仿开始。然后免费公开。我要通过技术拿到百万年薪P7职务,我必须糊涂混沌中走出来
- 目标:拿百万年 想进入一线大厂,但在C++学习和应用上存在瓶颈,渴望跨越最后一道坎。
- 现状:缺乏实战,渴望提升动手能力公司的项目不会重构,没有重新设计的机会,导致难以深入理解需求。
- 成为优秀完成任务,成为团队、公司都认可的核心骨干。优秀地完成任务= 高效能 + 高质量 + 可持续 + 可度量
低头走路:
- 一次只讲清楚一个问题。
- 不扫一屋 何以扫天下,让自己早睡,早起,锻炼身体,刷牙保持个人卫生,多喝水 ,表达清楚 基本事情做好。
- 我控制 的事情是 我通过写自己代码拿到百万收益。代码就是杠杆,我必须创造可以运行在2c2g云主机小而美产品出来(服务普通人),而不是运行构建至少10台64cpu 300g内存物理机大而全项目(领航者,超越其他产品,出货全球N1,这个还是有停留有限斗争游戏,为top 10人企业服务)我必须糊涂混沌中走出来
如果您觉得阅读本文对您有帮助, 请点一下“点赞,转发” 按钮, 您的“点赞,转发” 将是我最大的写作动力!
参考资料
- #滴滴Ceph分布式存储系统优化之锁优化
https://www.wuzao.com/ceph/en/latest/cephfs/client-config-ref/index.html
fuse_disable_pagecache
https://www.cnblogs.com/IServise/articles/18452098
https://indico.cern.ch/event/531810/contributions/2309925/attachments/1357386/2053998/GoncaloBorges-HEPIX16-v3.pdf -getfattr n ceph.dir.layout /cephfs/objectsize4M_stripeunit512K_stripecount2 ceph.dir.layout=“stripe_unit=524288 stripe_count=2 object_size=4194304 pool=cephfs_dt
- https://wiki.ceph.com/en/news/blog/2022/ceph-osd-cpu-scaling/?utm_source=chatgpt.com
- https://wiki.ceph.com/en/news/blog/2023/reef-freeze-rbd-performance/?utm_source=chatgpt.com
- -https://wiki.ceph.com/en/news/blog/2023/crimson-multi-core-scalability/?utm_source=chatgpt.com 在 Ceph 的高并发、小块 IO 场景下,CPU 的竞争和锁争用是导致性能瓶颈的主要原因。通过优化线程模型、采用新的架构(如 Crimson)、调整 RocksDB 的配置,可以有效缓解这一问题,提升系统的整体性能和稳定性
回答内容太多,不具体,只是说一个问题