跳至主要內容

如何设计系统

钝悟...大约 4 分钟设计架构综合架构设计

如何设计系统

系统设计过程

步骤一、约束和用例

对于任何系统设计,第一件应该做的事是:阐明系统的约束并确定系统需要满足哪些用例。

永远不要假设没有明确说明的事情。一定要尽力收集、理解需求,并设计一个很好地涵盖这些要求的解决方案。

例如,URL 缩短服务可能只为几千个用户提供服务,但每个用户都可能共享数百万个 URL。它可能旨在处理对缩短的 URL 的数百万次点击或数十次点击。该服务可能必须提供有关每个缩短的 URL 的大量统计信息(这会增加您的数据大小),或者可能根本不需要统计信息。

您还必须考虑预期会发生的用例。您的系统将根据其预期功能进行设计。不要忘记确保你知道面试官一开始没有告诉你的所有要求。

步骤二、顶层设计

一旦确定了要设计的系统的范围,接下来就要做顶层设计:概述系统架构中所需的所有重要组件。

此时,应该绘制出主要组件以及它们之间的连接。通常,这种顶层设计是基于主流技术的组合。这就要求设计必须熟悉这些技术,了解其利弊以及适合使用的场景。

步骤三、分析瓶颈

顶层设计很可能会遇到一个或多个瓶颈。这完全没问题,不要指望一个新系统可以立即处理世界上的所有负载。它只需要可扩展,以便您能够使用一些标准工具和技术对其进行改进。

现在有了顶层设计,就要考虑这些组件在系统扩展时面临的瓶颈。也许,系统需要一个负载均衡器和集群来处理用户请求。或者,由于数据容量庞大,以至于需要将数据库分库分表(分布在多台机器上)。这些方案有什么利弊,是否适用?数据库是否太慢,是否需要一些内存缓存?

通常每个解决方案都是某种权衡和取舍。改变某事会使其他事情恶化。然而,重要的是能够讨论这些权衡,并根据定义的约束和用例来衡量它们对系统的影响。

一旦分析清楚核心瓶颈,就可以着手在下一步中去解决它们。

步骤四、扩展设计

首先,你需要了解以下技术手段:

  • 垂直扩展
  • 水平罗占
  • 缓存
  • 负载均衡
  • 数据库复制
  • 数据库分区
  • 异步
  • NoSql

在系统设计方面,回顾现实中的架构非常有用。注意使用了哪些技术。继续研究每一项新技术,看看它解决了什么问题,它的替代品是什么,它擅长的地方,以及失败的地方。

一切都是权衡的结果——这是系统设计中最基本的概念之一。

一些推荐的学习资料

参考资料

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7