首页 > 解决方案 > 系统设计问题

问题描述

我正在准备系统设计面试,由于我对这个主题的经验很少,所以我从education.io购买了“ Grokking系统设计面试”课程,该课程被多个网站推荐。但是我读了它,我想我没能理解一些事情,所以如果有人能回答我的问题,那会很有帮助。

  1. 由于我没有使用 nosql 的经验,我发现很难选择合适的数据库系统。几次课程只是没有给出任何理由为什么它选择一个数据库而不是另一个数据库。例如,在“设计 Youtube 或 Netflix ”一章中,编辑选择了 mysql 作为 db 角色,没有任何解释。在同一章中,我们有以下非功能性需求:

“系统应该是高度可用的。一致性可能会受到影响(为了可用性);如果用户有一段时间没有看到视频,那应该没问题。”

按照上述提示并考虑到系统的大小并应用“CAP 定理”一章中的材料对我来说,Cassandra 和 CouchDB 似乎是一个更好的选择。我在这里想念什么?

同样的问题也适用于“设计 Facebook 的新闻源

  1. CAP 定理是否仍然适用?

我的意思是:HBase根据“CAP定理”一章擅长一致性和分区容错性,但是根据HBase文档,它从2.X版本开始也支持High Availibility。所以在我看来,这是一个适合所有/通用的数据库存储解决方案,它违背了 CAP 定理,除非他们为 HA 牺牲了一些东西。我在这里想念什么?

  1. 关于计算机可以处理多少 RAM/存储/带宽的课程的数字有点不一致,我猜它们已经过时了。a,普通计算机,b,现代服务器的当前数字是多少?

  2. 几乎每一章都有一个叫做“容量估计和约束”的部分,但是这里计算的内容因章而异。有时只计算存储,通常也计算带宽,有时会添加 QPS,有时会有特定于任务的指标。我怎么知道我应该为特定任务计算什么?

提前致谢!

标签: databasearchitecturenosqlsystem-design

解决方案


每个数据库都是不同的,满足不同的要求。我建议您阅读dynamo-paper,并熟悉其中使用的其余术语(两阶段锁定、领导者/跟随者、多领导者、异步/同步复制、仲裁),并了解不同数据库提供的保证. 现在的问题:

  1. MySQL 可以配置为优先考虑可用性,但代价是其异步复制模型的一致性(领导者在提交写入之前不会等待其追随者的确认;如果领导者在数据传播到追随者之前崩溃,则数据是丢失),所以它可能是这里合适的解决方案之一。

  2. 从 HBase 的文档来看 HBase 保证了强一致性,即使是以可用性为代价。高可用性的承诺是用于读取,而不是用于写入,即用于读取陈旧数据,而系统的其余部分将从故障中恢复并可以接受额外的写入。

    由于读取到单个位置的这种单一归宿,如果服务器变得不可用,则托管在区域服务器中的表区域将在一段时间内变得不可用。

    由于所有写入仍然必须通过主要区域,因此写入不是高可用的(这意味着如果该区域不可用,它们可能会阻塞一段时间)。

  3. 使用的数字是候选人的估计,即您决定单个假设服务器的规格是什么,以及您需要多少台服务器才能扩展和适应存储/吞吐量要求。

  4. 你事先不知道(虽然你可以根据需求进行猜测,例如它是一个数据存储系统,一个流媒体服务等,我仍然不推荐它)。相反,你应该问面试官他们对哪个领域感兴趣,然后你对其进行估计。面试,尤其是系统设计部分,是一种讨论,不要一味的照搬模板。你认识到你可以处理的关于系统的不同领域,并根据面试官的兴趣接近它们。


推荐阅读