从零到百万用户的扩展之路

写在前面: 此博客内容已经同步到我的博客网站,如需要获得更优的阅读体验请前往https://mainjaylai.github.io/Blog/blog/system/design-system

设计一个支持数百万用户的系统是极具挑战性的,它是一段需要持续优化和不断改进的旅程。在这篇博客中,我们将构建一个支持单个用户的系统,并逐步扩展到能够服务于数百万用户。在阅读这篇博客之后,你将掌握一些有助于破解系统设计面试题的技术。

在这段旅程中,你会学到:

  1. 初始设计:如何从一个简单的系统开始,满足最基本的用户需求。
  2. 扩展策略:使用不同的技术和架构模式来提升系统的扩展性。
  3. 性能优化:识别并解决性能瓶颈,确保系统在高负载下依然稳定高效。
  4. 容错和恢复:设计系统以应对故障,并快速恢复,保证高可用性。
  5. 监控和调试:实施有效的监控和调试策略,确保系统的健康运行。

通过这些内容,你不仅能更好地理解如何从零开始构建一个大规模系统,还能在系统设计面试中脱颖而出。接下来,我们将逐步深入探讨每个阶段的关键技术和最佳实践。

单服务器设置

千里之行,始于足下,构建一个复杂的系统也不例外。我们需要从一个简单的开始,一切都运行在一台服务器上。这一阶段的目标是构建一个功能完整、易于维护的初始系统。图1展示了单服务器设置的示意图,在这个设置中,所有东西都运行在同一台服务器上:包括Web应用、数据库、缓存等。

Maple

为了理解这一设置,研究请求流程和流量来源是很有帮助的。首先,让我们看看请求流程(图2):

Maple

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

接下来,让我们来探讨流量来源。Web服务器的流量来源有两个:Web应用和移动应用。

Web应用:它使用服务器端语言(如Java、Python等)处理业务逻辑和存储等,并使用客户端语言(如HTML和JavaScript)进行展示。

移动应用:HTTP协议是移动应用和Web服务器之间的通信协议。JavaScript对象表示法(JSON)通常用作API响应格式,因为它简单易用。下面是一个JSON格式的API响应示例:

// GET /users/12 – Retrieve user object for id = 1
{"userId": 1,"userName": "john_doe","email": "john_doe@example.com","profile": {"age": 30,"gender": "male","location": "New York"}
}

数据库

随着用户基础的增长,一台服务器已无法满足需求,我们需要多台服务器:一台用于处理Web/移动流量,另一台用于数据库(图3)。将Web/移动流量(Web层)和数据库(数据层)服务器分离,可以使它们独立扩展。

Maple

数据库的选择

你可以在传统的关系型数据库和非关系型数据库之间进行选择。让我们来探讨它们的区别。

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

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

对于大多数开发人员来说,关系型数据库是最佳选择,因为它们已经存在了超过40年,并且在历史上表现良好。然而,如果关系型数据库不适合你的特定用例,那么探索关系型数据库之外的选项是很重要的。非关系型数据库可能是正确的选择,如果:

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

关系型数据库的特点:

  1. 数据结构化
    关系型数据库使用表格来组织数据,数据结构清晰,便于管理和查询。
  2. 支持事务
    关系型数据库支持ACID(原子性、一致性、隔离性、持久性)事务,确保数据操作的可靠性。
  3. 强大的查询能力
    使用SQL可以方便地进行复杂的查询和数据分析,支持连接操作,适合关系数据。

非关系型数据库的特点:

  1. 高性能
    非关系型数据库通常具有较低的延迟和较高的吞吐量,适合高性能需求的应用。
  2. 灵活的数据模型
    非关系型数据库支持多种数据模型,如键值对、文档、列族和图结构,适合非结构化或半结构化数据。
  3. 可扩展性
    非关系型数据库通常更容易横向扩展,可以处理大规模的数据和高并发请求。

选择合适的数据库:

  • 如果你的应用程序主要处理关系数据,并且需要执行复杂的查询和事务操作,关系型数据库是理想的选择。
  • 如果你的应用程序需要处理大量非结构化数据、高性能需求或者需要简单的键值存储,非关系型数据库可能更合适。

垂直扩展 VS 水平扩展

垂直扩展,也称为“向上扩展”(scale up),指的是通过增加服务器的处理能力(如CPU、内存等)来提升性能。水平扩展,也称为“向外扩展”(scale-out),则是通过增加更多服务器到资源池中来进行扩展。

当流量较低时,垂直扩展是一个很好的选择,其主要优势在于简单。然而,垂直扩展存在一些严重的限制:

  1. 硬性限制
    垂直扩展有一个硬性限制,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/39200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NC13611 树(dfs序+区间dp)

链接 思路&#xff1a; 容易知道对于同一种颜色的子图一定是仅由该颜色的点连通的。设我们要划分的个数为x&#xff08;x<k&#xff09;&#xff0c;也就是说我们要选出x-1条边&#xff0c;这里有种情况。那么我们需要选出x种颜色&#xff0c;这里有种情况。然后我们需要将…

双端队列广搜——AcWing 175. 电路维修

双端队列广搜 定义 双端队列广搜&#xff08;Breadth-First Search with a Deque&#xff09;是一种图或树的遍历算法变体&#xff0c;它利用了双端队列&#xff08;Deque&#xff0c;全称Double Ended Queue&#xff0c;允许在其两端进行插入和删除操作&#xff09;作为数据…

1996-2023年各省财政收支数据(无缺失)(地方财政一般预算收入、地方财政一般预算支出)

1996-2023年各省财政收支数据&#xff08;无缺失&#xff09;&#xff08;地方财政一般预算收入、地方财政一般预算支出&#xff09; 1、时间&#xff1a;1996-2023年 2、来源&#xff1a;国家统计局、统计年鉴、 3、指标&#xff1a;地方财政一般预算收入、地方财政一般预算…

跨境业务经验推荐:三大优秀的IP代理服务商

作为一名多年从事跨境业务的老手&#xff0c;今天我要给大家介绍几款绝对靠谱的IP代理服务商&#xff0c;保证让你的全球业务更加顺畅&#xff01; 1. 711Proxy 711Proxy以其优秀的性能和覆盖范围广而著称。对于跨境电商和国际业务来说&#xff0c;快速稳定的网络连接至关重要…

d3dx9_43.dll丢失怎么解决?d3dx9_43.dll怎么安装详细教程

在使用计算机中&#xff0c;如果遇到d3dx9_43.dll丢失或许找不到d3dx9_43.dll无法运行打开软件怎么办&#xff1f;这个是非常常见问题&#xff0c;下面我详细介绍一下d3dx9_43.dll是什么文件与d3dx9_43.dll的各种问题以及d3dx9_43.dll丢失的多个解决方法&#xff01; 一、d3dx9…

Zynq—按键控制LED灯闪烁

一、GPIO简介 ZYNQ 的 IO包括对外连接的 GPIO 和内部 PS 与 PL 通信的 AXIO。其中对外的 GPIO 又分为 两种&#xff1a; MIO 和 EMIO。 MIO 和 EMIO 只是 GPIO 信号的两种接口&#xff0c; MIO 直连到PS(数量有限)&#xff0c; EMIO 则是 PS 扩展到 PL&#xff0c;从 PL 接出的…

UTONMOS:探索未来区块链与元宇宙的游戏奇妙融合

在科技的飞速发展浪潮中&#xff0c;区块链技术正以前所未有的力量重塑着各个领域&#xff0c;而游戏行业也迎来了一场前所未有的变革——元宇宙游戏的崛起。 元宇宙&#xff0c;这个充满无限想象的虚拟世界&#xff0c;让玩家能够沉浸其中&#xff0c;体验超越现实的奇幻之旅。…

springboot评选投票系统-计算机毕业设计源码15837

摘 要 本文介绍的是基于Spring Boot开发的评选投票系统小程序。该系统旨在为用户提供一个便捷、高效的平台&#xff0c;以实现评选活动的投票功能。随着社交媒体和互联网的普及&#xff0c;评选活动已成为各行业中常见的形式&#xff0c;如最佳歌曲、最佳演员等。然而&#xf…

探索PcapPlusPlus开源库:网络数据包处理与性能优化

文章目录 0. 本文概要1. PcapPlusPlus介绍1.1 概述1.2主要特性和功能1.3 PcapPlusPlus 主要模块关系和依赖1.4 网络协议层处理过程 2. 实例2.1 基于 PcapPlusPlus 的应用程序设计和封装流程&#xff1a;2.2 多线程示例代码2.3 代码说明&#xff1a; 3. 程序性能进一步优化3.1 避…

指哪打哪,重绘神器!我已出手…

最近AI界又爆出了一个大新闻&#xff0c;阿里巴巴、香港大学和蚂蚁集团的研究人员联合推出了一款超厉害的AI工具——MimicBrush&#xff0c;它的问世&#xff0c;无疑给图像编辑领域带来了一场革命&#xff0c;它就像魔法师手中的魔杖&#xff0c;轻轻一挥&#xff0c;就能让图…

隐私计算实训营第二期第七课:XGB算法与SGB算法开发实践

隐私计算实训营第二期-第七课 第七课&#xff1a;XGB算法与SGB算法开发实践1 决策树模型1.1 决策树的训练和预测过程1.2 决策树的发展过程 2 GBDT模型2.1 Boosting核心思想2.2 GBDT原理 3 XGB模型3.1 XGB核心思想3.2 XGB优点 3 隐语纵向树模型3.1 数据纵向分割3.2 隐私保护的树…

和小红书一起参会! 了解大模型与大数据融合的技术趋势

在过去的两年中&#xff0c;“大模型”无疑成为互联网行业的焦点话题&#xff0c;曾经炙手可热的大数据架构似乎淡出公众视野。然而&#xff0c;大数据领域并未停滞不前&#xff0c;反而快速演进&#xff0c;传统依赖众多开源组件的大数据平台正逐步过渡到以融合与简化为核心特…

SQL语句的案例分析

根据提供的图片内容&#xff0c;这段文字看起来像是一个SQL查询的一部分&#xff0c;特别是一个用于删除数据的语句。以下是对这段SQL的核心内容整理&#xff1a; ### 核心内容整理&#xff1a; 1. **删除操作**&#xff1a; - 使用DELETE语句来删除数据。 2. **子查询**…

Java 并发集合:CopyOnWrite 写时复制集合介绍

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 016 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

如何查看xpf文件

xpf文件是什么 XPF文件是“XML Paper Specification File”的缩写&#xff0c;它是一种文件保存格式&#xff0c;具有以下特点和相关信息&#xff1a; 一、定义与用途 定义&#xff1a;XPF文件用于保留文档的固定布局&#xff0c;包括文本、图片以及其他文档元素的确切位置。…

mysql-sql-第十三周

学习目标&#xff1a; sql 学习内容&#xff1a; 37.查询各科成绩最高分、最低分和平均分&#xff1a; 以如下形式显示&#xff1a;课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率 及格为>60,中等为&#xff1a;70-80,优良为&#xff1a;80-90,优秀…

Vue组件间通信方式超详细(父传子、父传后代、子传父、后代传父、兄弟组件传值、没有关系的组件传值)

Vue组件间通信方式超详细(父传子、父传后代、子传父、后代传父、兄弟组件传值)_vue 父传子-CSDN博客 vue 组件间传值&#xff1a;父传子 / 子传父 / 子传子 / 祖传孙 - 简书

刚入行的测试新人,应该如何规划自己的职业发展路径?

作为一个刚入行的测试新人&#xff0c;应该如何规划自己的职业发展路径&#xff1f;如何规划自己的技术路线&#xff1f;软件测试的段位都有哪些&#xff1f;他们之间的薪资差异如何&#xff1f; 听说这些问题&#xff0c;是目前想要入行软件测试的同学们最关心的。那么我们今天…

2024 年江西省研究生数学建模竞赛A题:交通信号灯管理问题分析、数学模型及VISSIM仿真实现

2024 年江西省研究生数学建模竞赛题目交通信号灯管理 1 题目 交通信号灯是指挥车辆通行的重要标志&#xff0c;由红灯、绿灯、 黄灯组成。红灯停、绿灯行&#xff0c;而黄灯则起到警示作用。交通 信号灯分为机动车信号灯、非机动车信号灯、人行横道信号 灯、方向指示灯等。 一…

第2章.现场设备的物联网模式--数字孪生

2.2 数字孪生 DT是部署在现场的物联网设备的虚拟复制品。这个概念与创建物理实体或过程的模型&#xff08;模拟&#xff09;以了解其表现行为的过程非常相似。本书中使用的DT符号如下图所示&#xff1a; 图2.3——DT模式的符号 DT是物联网背景下的一种重要模式&#xff0c;因为…