从零到百万用户:构建支持大规模系统的过程

本文介绍了构建支持大规模用户系统的步骤,从单服务器设置开始,逐步涵盖数据库选择、垂直扩展与水平扩展、负载均衡、数据库复制、缓存层、CDN、无状态Web层、数据中心、消息队列以及自动化工具的重要性。通过这些技术,系统可以从支持单个用户扩展到数百万用户,保证高可用性、性能和扩展性。
摘要由CSDN通过智能技术生成

本文首发于公众号:更AI (power_ai),欢迎关注,编程、AI干货及时送!

设计一个支持百万用户的系统是具有挑战性的,这是一段需要不断改进和不断提升的旅程。在本章中,我们将构建一个支持单个用户的系统,并逐渐扩展以服务于数百万用户。阅读本章后,您将掌握一些技巧,帮助您解决系统设计面试问题。

单服务器设置

千里之行始于足下,构建一个复杂的系统也是如此。为了从简单的东西开始,我们将所有内容都运行在一个单独的服务器上。图1显示了一个单服务器设置的示意图,其中所有内容都在一个服务器上运行:Web应用程序、数据库、缓存等。

1-1

为了理解这个设置,有助于调查请求流程和流量来源。让我们首先看一下请求流程(图1-2)。

image-20230517204734179

  1. 用户通过域名访问网站,例如api.mysite.com。通常,域名系统(DNS)是由第三方提供的付费服务,而不是由我们的服务器托管。
  2. Internet协议(IP)地址返回给浏览器或移动应用。在本例中,返回的IP地址是15.125.23.214。
  3. 一旦获得IP地址,超文本传输协议(HTTP)[1]请求将直接发送到您的Web服务器。
  4. Web服务器返回HTML页面或JSON响应进行渲染。

接下来,让我们来看一下流量来源。流向您的Web服务器的流量来自两个来源:Web应用程序和移动应用程序。

  • Web应用程序:它使用一组服务器端语言(Java、Python等)来处理业务逻辑、存储等,以及客户端语言(HTML和JavaScript)来进行展示。
  • 移动应用程序:HTTP协议是移动应用程序与Web服务器之间的通信协议。由于其简单性,JavaScript对象表示法(JSON)通常用于传输数据的API响应格式。下面是一个以JSON格式显示的API响应示例:

GET /users/12 – 检索id为12的用户对象

image-20230517204830036

数据库

随着用户群体的增长,一个服务器已经不够用了,我们需要多台服务器:一台用于处理网站和移动端的流量,另一台用于数据库(图1-3)。将网站和移动端流量(Web层)与数据库(数据层)服务器分离,可以使它们能够独立扩展。

image-20230517204939183

使用哪种数据库?

您可以选择传统关系型数据库或非关系型数据库。让我们来看看它们的区别。

关系型数据库也被称为关系数据库管理系统(RDBMS)或SQL数据库。最流行的有MySQL、Oracle数据库、PostgreSQL等。关系型数据库使用表和行来表示和存储数据。您可以使用SQL在不同的数据库表之间执行联接操作。

非关系型数据库也被称为NoSQL数据库。流行的有CouchDB、Neo4j、Cassandra、HBase、Amazon DynamoDB等[2]。这些数据库分为四类:键值存储、图存储、列存储和文档存储。非关系型数据库通常不支持联接操作。

对于大多数开发者来说,关系型数据库是最佳选择,因为它们已经存在了40多年,并且在历史上表现良好。然而,如果关系型数据库不适合您特定的使用情况,探索超越关系型数据库是至关重要的。如果满足以下情况,非关系型数据库可能是正确的选择:

  • 您的应用程序需要超低的延迟。
  • 您的数据是非结构化的,或者您没有任何关系数据。
  • 您只需要对数据进行序列化和反序列化(JSON、XML、YAML等)。
  • 您需要存储大量的数据。

垂直扩展与水平扩展

垂直扩展,也称为“纵向扩展”,是指向服务器添加更多的处理能力(CPU、RAM等)的过程。水平扩展,也称为“横向扩展”,允许您通过向资源池中添加更多的服务器来进行扩展。

当流量较低时,垂直扩展是一个很好的选择,垂直扩展的简单性是其主要优点。不幸的是,它也存在一些严重的局限性。

  • 垂直扩展有一个硬性限制。不可能向单个服务器添加无限的CPU和内存。
  • 垂直扩展没有故障转移和冗余。如果一个服务器宕机,网站/应用将完全无法访问。

由于垂直扩展的限制,对于大规模应用程序来说,水平扩展更加理想。

在之前的设计中,用户直接连接到Web服务器。如果Web服务器脱机,用户将无法访问网站。在另一种情况下,如果许多用户同时访问Web服务器并达到Web服务器的负载限制,用户通常会遇到响应变慢或无法连接到服务器的问题。负载均衡器是解决这些问题的最佳技术。

负载均衡器

负载均衡器会将传入的流量均匀分配给在负载均衡集合中定义的Web服务器。图1-4展示了负载均衡器的工作原理。

image-20230517205101773

如图1-4所示,用户直接连接负载均衡器的公共IP。通过这种设置,Web服务器不再能直接被客户端访问。为了更好的安全性,私有IP用于服务器之间的通信。私有IP是一个只能在同一网络中的服务器之间访问的IP地址,无法通过互联网访问。负载均衡器通过私有IP与Web服务器进行通信。

在图1-4中,当负载均衡器和第二个Web服务器添加后,我们成功解决了故障切换的问题,并提高了Web层的可用性。具体细节如下:

  • 如果服务器1下线,所有流量将被路由到服务器2。这样可以防止网站宕机。我们还可以向服务器池中添加一个新的健康Web服务器来平衡负载。
  • 如果网站流量迅速增长,两个服务器无法处理流量,负载均衡器可以优雅地解决这个问题。您只需要向Web服务器池添加更多服务器,负载均衡器将自动开始将请求发送给它们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值