面试官:如何设计一个【三高】系统?
共 2042字,需浏览 5分钟
·
2024-03-25 01:00
在做系统设计时,我们经常需要设计具有高可用性、高可扩展性和高吞吐量的系统。
可以说,“三高”是做系统设计绕不开的重点!
那它们的确切含义是什么呢?
下图是一份系统设计小抄,包含“三高”常见的解决方案。
0 1
高可用性
高可用 意味着我们需要达到一个高水平的正常运行时间。
我们通常将设计目标描述为 "3 个 9 " 或 "4 个 9"。
"4 个9",即 99.99% 的正常运行时间,意味着服务每天只能中断 8.64 秒。
要实现高可用性,我们需要在系统中设计冗余。有几种方法可以做到这一点:
-
Hot-Hot
两个实例接收相同的输入,并将输出发送到下游服务。如果其中一方宕机,另一方可以立即接替。由于两边都向下游发送输出,下游系统需要能够处理重复数据。
-
Hot-Warm
两个实例接收相同的输入,只有 Hot 端向下游服务发送输出。如果 Hot 端宕机, Warm 端将接替并开始向下游服务发送输出。
-
单领导集群 (Single Leader)
一个领导实例从上游系统接收数据并复制到其他副本。
-
无领导集群 (Leaderless)
这种集群中没有领导者。任何写入都会复制到其他实例。只要写入实例数加上读取实例数大于实例总数,我们就能获得有效数据。这被称为 quorum。
0 2
高吞吐量
这意味着服务需要在一段时间内处理大量请求。常用的指标是 QPS(每秒查询次数)或 TPS(每秒事务次数)。
为了实现高吞吐量,我们通常会在架构中添加缓存,以避免经过数据库或磁盘等较慢的 I/O 设备。我们还可以为计算密集型任务增加线程数量。但是,增加过多的线程会降低性能。因此,我们需要找出系统的瓶颈,提高系统的吞吐量。
我们还可以在系统中使用异步处理,以有效地单独隔离耗时耗资源的组件。
0 3高扩展性
高扩展性意味着系统可以快速、轻松地扩展,以容纳更多的容量(横向可扩展性)或更多的功能(纵向可扩展性)。通常,我们通过观察响应时间来决定是否需要扩展系统。
要实现高度可扩展性,需要隔离每个服务的职责。为此,微服务被广泛采用。我们还利用服务注册和负载平衡器将请求路由到适当的实例。
以上内容源自公众号“ByteByteGo”,是硅谷百万粉丝技术大v、《搞定系统设计:面试敲开大厂的门》一书作者Alex Xu的官方号。
关于系统设计的面试,可以说是所有技术面试中最难的。
面试者会被要求设计一个软件系统,比如 news feed 、谷歌搜索、聊天系统等。
这些问题令人望而生畏,没有特定的解题模式,通常范围都非常广且模糊,其答案也是开放的,也可以说不存在标准答案或正确答案。
很多公司都设有系统设计面试,因为这种面试能考验软件工程师日常工作所需的沟通能力和解决问题的能力。
面试官会考查候 选人如何分析一个模糊的问题并一步步解决这个问题;同时,他们还会考查候选人阐述自己想法的能力、与其他人讨论的能力、评估及优化系统的能力。
系统设计的问题是开放式的。
在现实世界中,不同的系统之间存在许多差别,而系统自身还要应对各种变化。
面试官期望得到的答案是一个能满足系统设计目标的架构。
在面试过程中,对问题的讨论可能会因面试官的个人风格不同而走向不同的方向。
有些面试官喜欢询问高层架构设计方面的问题,以全面地考查面试者的知识面,也有些面试官会选择一个或者几个领域来深入地考查知识点。
一般来说,应该搞清楚系统的需求、限制和瓶颈,以便面试双方可以有效地进行沟通。
Alex 所著《搞定系统设计:面试敲开大厂的门》 一书的目标是提供一个可靠的策略,帮助面试者回答系统设计问题。采取正确的策略且具备必要的知识,对面试的成功至关重要。
本书讲述了构建一个可扩展系统所需的基础知识。你从本书中获得的知识越多,在解决系统设计问题时就越从容。
本书还提供了一个逐步解决系统设计问题的框架,用了很多实例来阐释这种系统性的解决方法且附有详细步骤,你可以照着操作。只要勤加练习,在回答系统设计面试问题时,你就会胸有成竹。
本书原著 豆瓣评分8.4 ,得到众多读者的好评,案例经典、信息全面系统、非常适合用来面试!
如果你想顺利通过高难度的系统设计面试,那就看看这本被众多读者验证过的好书吧~~
限时五折优惠,快快抢购吧!