面试官:从三万英尺角度谈一下Ceph架构设计(1)
文章目录
把面试官当陪练,在找工作中才会越战越勇
大家好我是小义同学,这是大厂面试拆解——项目实战系列的第3篇文章,如果有误,请指正。
本文主要解决的一个问题,Ceph为例子 如何描述项目的架构。
一句话描述:主要矛盾发生变化
- 10年前的技术和方案,放到10年后看还有用吗?
- 过去操作系统内核完成 进程,线程 调用,网络传输IO模型 好不容易学明白,结果这些反而成为瓶颈。
- 这个仅仅给出提示,并没有给出详细答案,后续一点点输出,如果感兴趣 +v: wang_cyi
画外音:
- 这里假设 面试官可能 本不了解Ceph,更不懂自己 日常工作中哪些"黑话"
- 这并不意味就可以瞎忽悠,他们眼睛就是尺,他们更清楚岗位需什么人。
用户故事:从什么角度描述项目(可跳过)
小义:
先开枪,后瞄准 ,
第一次尝试:不用做任何准备,直接去面试,小义获取项目如何设计,优化的才是取胜的关键。 第二次尝试:面试官问了第二个项目系统设计的,优化的,结果 不到5分钟,回去等消息了。 第三次尝试:面试官回到第一项目怎么设计的,怎么优化的,结果不到5分钟,回去等消息了。 第四次 …… 第五次…. …
这是为何,怎么被同一个问题反复绊倒,
原因1:在准备面试过程中,我大量时间用在算法,和基础知识准备上, 虽然知道项目才是取胜关键,但是根本没有拿出时间来准备。
解决办法:
- “走暗路、耕瘦田、进窄门、见微光”
- 专注项目设计,系统优化才是最重要的事情
- 做一次博弈:算法和基础知识必须停止,遇到不会时候在深入研究。
原因2:在日常工作中,我不知道项目模块社交,项目代码,生产bug更重要吗? 但是
- 任务不明确情况下,通过不同做更多任务换取功劳。
- 在代码完成情况下,不停重复人工测试保证质量。
解决办法:
- 走暗路、耕瘦田、进窄门、见微光,
- 专注项目设计,系统优化才是唯一要做的最重要的事情
- 做一次博弈: 自己完全想多了,项目架构不了解,模块设计不清楚,代码讲不明白,自己的bug解决不了,别人根本不让你测试,更不会找你帮忙
画外音:
- 知道什么是最重要事情后,其他事情。能快速投入战斗,速撤离战斗
越战越勇 不是它不是简单地重复一个动作或任务
而是通过专注于自己的薄弱环节,
- 设定明确的目标
- 专注练习
- 并且不断地挑战自己的舒适区
- 及时反馈(如老师、教练、同行,或者是自己通过录像、录音等方式进行自我观察)
- 反复练习改进 从而实现技能的持续提升。
老王:
打住,你想的太复杂了,
先看一下 从什么角度描述一个项目
这是美国著名时间管理大师戴维·艾伦的《搞定3》(英文名:Get things done)。
从第14章 3万英尺来描述,原因如下
- 无论自己学的太差,在不行,至少在项目范围内。
- 自己 跳一跳,向上够一够,让别人稍微弯一下腰,
- 这样达到你知道,我也知道,有话题聊状态。
符合维基百科定义的
下面是最基本沟通方式。为了基本事情达成一致 需要做 什么事情(这个日常工作一样的)
象限名称 | 定义 | 我的面试沟通方式 |
---|---|---|
开放区(Open Area) | 自己知道 × 他人知道 | 1. 这是唯一得分地方,想想成一个题目就是10万元奖励,必须结合之前项目经理总结 有效回答.2. 日常听到看到方式在这里全部失灵,八股文毫无价值,必须深入理解经典题目 |
盲区(Blind Area) | 自己不知道 × 他人知道 | 1. 就是榆木疙瘩,没有临场发挥,认真记住面试官给你提示,就让游戏到此。2. 有敢于失败勇气,继续原来那一套回答毫无价值,如果有机会反问一次。 |
隐藏区(Hidden Area) | 自己知道 × 他人不知道 | 1. 无法税符别人,不去讨论2. 哪怕自己了解c++知道奇淫巧技也也不去说,这个不是面试重点,别人不需要我普及(套方案除外) |
未知区(Unknown Area) | 自己不知道 × 他人不知道 | 1. 如实说 不知道,不去探讨。2. 及时听说过一些概念,没有深入研究,坚决不要说,说出来就是瞎胡扯,没人愿意听 |
什么是Ceph
我的回答:
- Ceph是 支持EB数据 高性能,可扩展的 统一的分布式存储平台(参考TDengine宣传,一句话描述)
- 提供支持快,对象,文件(CephFS)服务
- Ceph 项目起源 于 2003 年 Sage 就读博士期间的研究课题(Lustre 环境中的可扩展问题)
- Ceph 使用 商用硬件和以太网 IP 复制数据,并具备容错功能 无需任何特殊硬件支持。
- Ceph 不再依赖任何其他传统文件系统,而是使用其自身的存储后端 BlueStore 直接管理 机械硬盘HDD 和 固态硬盘SSD
对比其他产品宣传:
- TDengine 是一款高性能、分布式的 物联网、工业大数据平台。(一句话介绍)
- TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台,
- 其核心模块是高性能、集群开源、云原生、极简的时序数据库。
- 它能安全高效地将大量设备每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发,
- 并提供 AI 智能体对数据进行预测与异常检测,提供实时的商业洞察。
面试官视角:
这是20年前的技术方案:
- 使用的机械硬盘,数百IOPS ,400MB/s带宽,10G容量
- 互斥锁
- 条件变量 ,
- 线程,队列,异步处理
- 传统的multi-thread多线程模型 基于机械硬盘HDD
现在都是小儿科了,如果这样回答 是上学背诵的,还是已经理解了 换个问法,马上验证出来了
现在:
- NVMe设备能够提供数百万的IOPS读写,并支持TB级的磁盘容量,大于1G带宽,
- 网卡 200Gbps
如果海量请求 , Ceph软件 的性能要跟上硬件发展的速度?为什么。
当前的主要矛盾:如何解决落后的编程模型导致计算速度和高速存储设备的性能匹配的问题
目前multi-thread模型的主要问题:(过去10几年从来不思考事情,设备足够好)
- 线程切换的context-switch的开销大
- 多线程之间为了实现同步和互斥的锁的开销较大
如何解决?
划重点:英文第一手资料(耗子叔叔推荐方法)
- 高扩展的新一代 Ceph OSD Crimson: Next-generation Ceph OSD for Multi-core Scalabilit
- Ceph近10年来重构心路历程:File systems unfit as distributed storage backends: lessons from 10 years of Ceph evolution
- ceph-osd-cpu-scalin
Ceph架构是什么:统一存储架构
我的回答:
- Ceph 旨在通过一个平台提供对象存储、块存储和文件存储服务
- 这极大地简化了不同应用需求下的部署和运维工作 (简单不是要点)
架构如下:三个部分
图片来源:From Wikipediahttps://en.wikipedia.org/wiki/Ceph_(software)
统一存储架构
Ceph最初设计的RADOS是为其实现一个高性能的文件系统服务的, 并没有考虑对于块设备、对象存储的支持, 也就没有什么RBD、RADOS GateWay,跟别提OpenStack和qemu之类的了。
但谁想无心插柳柳成荫, 由于 RADOS 出色的设计和独立简洁的访问接口, 再加上Sage敏锐的眼光, Ceph社区果断推出了用于支持云计算的分布式块存储RBD和分布式对象存储RADOS GateWay, 并将开发中心全面转向云计算领域。
**从架构上来看,RBD和RADOSGateWay实际上都只是RADOS的客户端而已
但得益于RADOS的优秀设计,RBD和RADOSGateWay的设计和实现都很简单,
- 不需要考虑横向扩展、冗余、容灾、负载平衡的等复杂的分布式系统问题,
- 同时能够提供足够多的特性和足够优秀的性能,因此迅速得到了社区的认可。
对比其他产品描述
- OceanBase 一体化架构,通过 PALF: Replicated Write-Ahead Logging for Distributed Databases保证事务一致性,PALF(Paxos +Write-Ahead )
面试官视角:
- 八股文呀,把每个模块功功能一说就是架构?目标支持多少用户,满足多少并发,解决什么场景 没说
- 如何创建一个文件/mnt/test/a IO流程是什么?能和上面架构联系在一起吗?不是说三层吗?仅仅停留在一层上回答,平时工作仅限于此,知识面不行
- 文件可能普通ext4文件,网络文件,他们本身保证一致性的他们优缺点,这些东西反应对架构理解
- 快怎么写入磁盘的呢?
总结
耗子叔叔推荐方法:高效学习:源头、原理和知识地图 今天终于体会到一次了
应该是第一手资料,不是被别人理解过、消化过的二手资料。 尤其对于知识性的东西来说,更是这样。应该是原汁原味的,不应该是被添油加醋的
第一手资料:
- 高扩展的新一代 Ceph OSD Crimson: Next-generation Ceph OSD for Multi-core Scalabilit https://ceph.io/en/news/blog/2023/crimson-multi-core-scalability/
- Ceph近10年来重构心路历程:File systems unfit as distributed storage backends: lessons from 10 years of Ceph evolution https://www.usenix.org/publications/login/mar20/aghayev
- ceph-osd-cpu-scaling/ https://ceph.io/en/news/blog/2022/ceph-osd-cpu-scaling/
链接我
刚刚好,是最难得的美好
我就在这里 ,我刚刚好。
如果需要帮忙 +v wang_cyi
我正在做的事情是
1. 目标:拿百万年薪
- 想进入一线大厂,但在C++学习和应用上存在瓶颈,渴望跨越最后一道坎。
2. 现状:缺乏实战,渴望提升动手能力
-
公司的项目不会重构,没有重新设计的机会,导致难以深入理解需求。
-
想通过阅读优秀的源码,提高代码能力,从"不会写"到"敢写",提升C++编程自信。
-
需要掌握高效学习和实践的方法,弥补缺乏实战经验的短板。
3. 价值:成为优秀完成任务,成为团队、公司都认可的核心骨干。
优秀地完成任务= 高效能 + 高质量 + 可持续 + 可度量
错误示范:
- 不少同学工作很忙,天天加班,做了很多公司的事情。 但是 不是本团队事情,不是本部门事情,领导不认可,绩效不高
- 做低优先级的任务,绩效不高,随时被优化
历史文章
经典面试题:采用最好硬件,性能还是这么慢,如何优化(上) 怎么回答让面试官眼前一亮