专栏名称: 小林coding
图解得了技术,谈吐得了烟火。
目录
相关文章推荐
壹股经  ·  20250110全联动操盘视频 ·  5 天前  
壹股经  ·  20250110全联动操盘视频 ·  5 天前  
前端早读课  ·  【第3445期】React 设计模式:实例钩子模式 ·  6 天前  
51好读  ›  专栏  ›  小林coding

面试官:如果你的项目要支持百万用户,你会如何设计?

小林coding  · 公众号  ·  · 2024-11-21 14:26

正文

图解学习网站:https://xiaolincoding.com

大家好,我是小林。

如何扩展网站以支持数百万用户?我们将逐步为您讲解。

下图展示了简化电子商务网站的演变过程。它从单一服务器上的单体设计发展到面向服务/微服务架构。

假设我们有两个服务:库存服务(处理产品描述和库存管理)和用户服务(处理用户信息、注册、登录等)。

  • 第 1 步 - 随着用户数量的增长,单个应用服务器已无法处理流量。我们将应用服务器和数据库服务器分别放在两台服务器上。

  • 第 2 步 - 业务继续增长,单个应用服务器已经不够用了。因此,我们部署了一个应用服务器集群。

  • 第 3 步 - 现在,传入的请求必须路由到多个应用服务器,如何确保每个应用服务器都能获得均衡的负载?负载平衡器可以很好地解决这个问题。

  • 第 4 步 - 随着业务的持续增长,数据库可能会成为瓶颈。为了缓解这一问题,我们将读取和写入分开,将频繁的读取查询转到读取副本。通过这种设置,可以大大提高数据库写入的吞吐量。

  • 第 5 步 - 假设业务持续增长。单个数据库无法同时处理库存表和用户表的负载。

我们有几个选择:

  1. 垂直分区。为数据库服务器增加功率(CPU、内存等)。它有硬限制。
  2. 水平分区,增加更多数据库服务器。
  3. 添加缓存层以卸载读取请求。
  • 第 6 步 - 现在,我们可以将功能模块化为不同的服务。架构就变成了面向服务/微服务。

-------- 往期好文 --------

面试官:如何设计一个分布式ID?

面试官:你知道几个网络 I/O 模型?

面试官:你项目是怎么存密码的?