系统设计 —— 随用户扩展

单服务器设置:

在单服务器设置中,所有内容都运行在一台服务器上。这包括网页应用程序、数据库、缓存等。

8138f2058e40c0262cb2f5470574a94c.png
1*HQXZgCc5Vh8KooJHwKfzjw.png

图1.1 请求流程

1.最终用户通过域名(myurl.com)访问网站。请求发送到 DNS,将域名映射到 IP 地址。2.IP 地址返回给网页浏览器或移动应用程序。3.HTTP 请求直接发送到 web 服务器。4.Web 服务器然后将请求的资源返回给客户端。在上图中,返回 HTML 页面进行渲染。

图中使用的组件定义如下:

Web 服务器:一台能够通过互联网向最终用户提供网页内容的计算机系统。它包括网页服务器软件和网站组件文件,如 HTML 文档、图像、CSS 样式表、JavaScript 文件等。•Web 客户端(Web/移动):用于通过 HTTP 连接到 Web 服务器的客户端应用程序。通常是一个网页浏览器或 Web 应用程序,用于显示从服务器接收的网页并允许用户与 Web 服务器进行交互。•域名系统(DNS):充当互联网的电话簿。人们通过域名(google.com)访问信息,但 Web 服务器使用互联网协议(IP)地址进行交互。DNS 将域名转换为 IP 地址,以便浏览器可以加载互联网资源。互联网中的每个设备都有唯一的 IP 地址,其他机器使用该地址查找设备。通常,DNS 是由第三方提供的付费服务,不由 Web 服务器托管。

将数据库与 Web 服务器分离:

随着用户数量的增长,为了更独立地扩展,第一步是将数据库与 Web 服务器分离。

ad0610b70720ae232bc4a75461a5bc5b.png
1*qu8aalxmzfT-6Yt2_5qkgA.png

图1.2 请求流程

1.最终用户通过域名(myurl.com)访问网站。请求发送到 DNS,将域名映射到 IP 地址。2.IP 地址返回给网页浏览器或移动应用程序。3.HTTP 请求直接发送到 web 服务器。4.Web 服务器向数据库服务器发送请求,执行读取、写入或更新数据操作。5.数据从数据库服务器返回到 web 服务器。6.数据在 web 服务器中处理,最终返回给 Web 客户端。

图中新增的组件定义如下:

数据库:存储在计算机系统中的结构化或非结构化信息集合。数据库的选择取决于存储的信息类型。数据库可以从传统关系型数据库到非关系型数据库等各种类型。•传统关系型数据库:以表、行和列的方式结构化信息。关系型数据库能够通过连接表之间的关系来建立链接,这使得理解和获取有关各种数据点关系的见解变得容易。常见的传统数据库有 MySQL、Oracle 数据库、PostgreSQL 等。•非关系型数据库:也称为 NoSQL 数据库,使用针对存储的数据类型的特定要求进行优化的存储模型。它可以进一步分为多种不同的类别,如键值存储、图形存储、列存储、文档存储等。一些常见的例子包括 Cassandra、MongoDB、Neo4j 等。

扩展 Web 服务器:

随着用户基数的增长和流量的增加,扩展 Web 服务器的能力变得至关重要。扩展的方式有两种,即垂直扩展和水平扩展。在垂直扩展中,通过向同一台服务器添加更多 CPU、RAM 等来“扩展”,而在水平扩展中,通过向资源池中添加更多服务器来“扩展”。尽管垂直扩展在性质上更加简单,但它也有自己的局限性。其中一些限制包括硬件限制(无法向单个服务器添加无限制的内存和 CPU),而且存在单点故障,这可能是一个巨大的缺点。因此,在大规模应用程序的情况下,使用水平扩展可能是更好的选择,通过负载均衡器将流量分布到多个服务器上。

dcef03c73e31b589cccba90c59007cbf.png
1*Zw6mTI8yip3Gb8DUn8kJuQ.png

负载均衡器:负载均衡器充当流量管理器,位于服务器前面,将客户端请求路由到能够满足这些请求的所有服务器上,以最大化速度和容量利用率。负载均衡器的一些主要责任包括:

1.高效地将客户端请求或网络负载分布到多个服务器上。2.仅将请求发送到在线的服务器,确保高可用性和可靠性。3.根据需求灵活添加或移除服务器。

用户直接连接到负载均衡器的公共 IP。在此架构中,无法使用公共 IP 访问 Web 服务器。负载均衡器使用私有 IP 与不同的服务器进行通信。私有 IP 仅用于在同

一网络内进行通信。

一些常见的负载均衡算法:

1.轮询法(Round Robin)— 顺序分发请求。2.最少连接法(Least Connections)— 发送到当前连接最少的服务器。3.最少时间法(Least Time)— 发送到响应最快且连接最少的服务器。4.哈希法(Hash)— 根据您定义的键(如客户端 IP 地址、URL 等)进行分发。

数据可用性和复制

扩展的最关键方面之一是增强数据的可用性和可靠性。数据复制是实现这一目标的重要方式,它通过在不同服务器上创建和维护数据库的副本来实现。

f21574d2efc9aae02d7a5c650c0a7025.png
1*2fnRDHRVnJGEQyUSKIYjBw.png

在图1.4中,我们可以看到原始(主)数据库和副本(从)数据库之间的主从关系。

主数据库:仅支持来自 Web 服务器的写入操作。所有修改数据的操作,如插入、删除、更新,都必须发送到主数据库。如果主数据库下线,一个从数据库将被提升为新的主数据库。•从数据库:仅支持来自 Web 服务器的读取操作。通常情况下,从数据库比主数据库多,因为读取和写入的比例总是更高。如果从数据库下线,一个新的从数据库将取代旧的从数据库。

数据复制的优势:

1.更好的性能 — 允许更多查询并行处理。2.可靠性 — 数据在多个服务器上复制。我们不需要担心数据丢失。3.高可用性 — 如果一个数据服务器下线,您可以从另一个数据库访问存储的数据。

一些其他常见的数据复制类型:

1.主-主复制 — 对任何主数据库进行的更改会复制到配置中的其他主数据库。2.快照复制 — 在特定时间点创建整个数据库的副本,然后将快照复制到一个或多个目的地。

讨论了 Web 层和数据层之后,我们将简要介绍对改善负载/响应时间起着关键作用的两个其他概念:缓存和内容传递网络(CDN)。

缓存

缓存是一个临时存储区,用于在内存中存储昂贵响应的结果或频繁访问的数据。

cd384a19044411b5aa861a3a477e87a3.png
1*WystPXvpETZDscKaEF0FWA.png

缓存命中 — Web 服务器从缓存中请求数据。如果数据存在于缓存中,则为缓存命中。在这种情况下,无需向数据库服务器发出网络调用。•缓存未命中 — Web 服务器从缓存中请求数据。如果缓存中不包含数据,则为缓存未命中。此时,需要从数据库获取数据,然后将数据保存到缓存中。

使用缓存的一些关键考虑因素:

1.数据读取频率高于修改频率。2.实施良好的过期策略,这很重要,因为延迟的过期策略可能导致缓存中的数据过时,而频繁的过期策略可能会降低缓存的效果,因为这会导致频繁从数据库重新加载数据。3.为了减少故障,请考虑添加多个缓存服务器,以避免单点故障。4.必须有一个良好的驱逐策略。一旦缓存已满,为了添加新项目,现有项目应根据驱逐策略进行删除。

缓存的类型:

1.应用程序服务器缓存 — 缓存与应用程序服务器一起存储在内存中。在多 Web 服务器系统中,此架构中的一个缺点是,每个服务器将不知道已缓存请求,因此会产生大量的缓存未命中。2.分布式缓存 — 每个节点将拥有整个缓存空间的一部分,然后使用一致性哈希函数将每个请求路由到可找到缓存请求的地方。3.全局缓存 — 您将拥有单个缓存空间,所有节点都将使用此单个空间。

内容传递网络(CDN)

CDN 是一个由地理位置分散的服务器网络,用于传递静态内容,包括图像、视频、CSS、JavaScript 文件等。CDN 由像亚马逊、Akamai 等第三方提供商运行。

5fd35b89762d0f61914b033ffe9a0c2a.png
1*jfNgu-FMZcenadDMkX1g7A.png

使用 CDN 的请求流程:

1.用户通过 URL 请求资源。这些 URL 是由 CDN 提供商提供的。2.如果 CDN 缓存中没有资源,则从源(如亚马逊 S3)请求。3.源然后将资源返回给 CDN 服务器。4.CDN 缓存资源并将其返回给用户。该图像将在 TTL(存活时间)过期之前保留在缓存中。5.当另一个用户请求相同资源时,如果 TTL 尚未过期,则从缓存中获取。

总之,与用户规模的扩展不仅是技术上的挑战,更是现代数字系统的战略必需品。从设计

弹性架构到实施有效的扩展策略,我们探讨了确保您的系统可以与用户需求无缝增长的关键要素。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Laravel框架使用图片处理简单教程

PHP图片处理扩展包使用 文中使用的是Laravel框架,更多框架扩展包请点击传送门-》更多框架集成 Intervention Image 是一个开源的 PHP 图像处理和操作 库。它提供了一个更简单也更优雅的方式来创建/编辑/组合图像,并且支持最常见的两个图像处理库 GD Library 和 Im…

solidworks的进阶操作

目录 1 可以找别人的图 2 渲染 2.1 基本流程 2.2 相机和光源 3 装配图缩放 3.1 将装配图转换为零件 3.2 删除一些细节(可选) 3.3 缩放 4 3dmax文件转换为STL并对STL上色 5 文件是未来版本 1 可以找别人的图 有时需要出一些示意图,像是电脑桌子…

【NodeMCU实时天气时钟温湿度项目 4】通过NTPClient库获取实时网络时间并显示在TFT屏幕上

今天是【实时天气时钟温湿度项目】第四专题,主要内容是:学习导入NTPClient库,通过这个库获取实时网络时间,显示在1.3寸TFT液晶屏幕上。此前三个专题,请选择查看以下链接。 第一专题内容,请参考 【N…

springboot2.x集成Elasticsearch7.7.0

一、前言 elasticsearch安装就不做过多介绍了,网上一搜一大堆;最需要注意的就是Elasticsearch与spring版本,防止版本不兼容导致的后续的一系列问题。我这里springbootspring-data-elasticsearch,他们的版本对照关系可以参照sprin…

Redis进阶学习

Redis进阶学习 一、Redis事务1.2 Redis监控1.3 Jedis连接1.4 SpringBoot整合1.5 自定义RedisTemple1.6 Redis.conf详解 二、 Redis持久化2.1 RDB2.2 AOF进程 三、Redis发布订阅3.1 Redis主从复制3.2 集群环境配置3.3、复制原理3.4、宕机后主动变为主机3.5、哨兵模式 四、Redis缓…

如何禁止打开PDF文件?推荐2种方法!

在工作中,我们经常会使用到PDF文件,对于重要的文件,不想被随意打开怎么办呢?下面小编分享2个方法,第二个很实用,记得收藏起来! 方法1:设置密码保护 我们可以通过PDF编辑器&#xff…

拼多多二面,原来是我对自动化测试的理解太浅了

如果你入职一家新的公司,领导让你开展自动化测试,作为一个新人,你肯定会手忙脚乱,你会如何落地自动化测试呢? 01 什么是自动化 有很多人做了很长时间的自动化但却连自动化的概念都不清楚,这样的人也是很悲…

Excel常用操作

计算支付成功率 使用公式 ROUND(B2/C2,4)*100&"%" 字符串拼接 将A1-A10的数字用英文逗号拼接 TEXTJOIN(",",TRUE,A1:A10) 将A1-A10中大于5的数字用英文逗号拼接 ARRAYFORMULA(TEXTJOIN(",",TRUE,IF(A1:A10>5,A1:A10,"")…

centos7下fastdfs分布式部署

需要先在159及120服务器上安装fastdfs服务 可参考:centos7部署FastDFS服务_centos fastdfs 增加到服务中-CSDN博客 1、整体架构,使用3个服务器节点,其中两台为跟踪器节点及存储节点,一台服务器搭建nginx做统一入口进行负载均衡 …

Android bootchart 分析启动性能工具使用

bootchart简介 bootchart 可为整个系统提供所有进程的 CPU 和 I/O 负载细分。该工具不需要重建系统映像,可以用作进入 systrace 之前的快速健全性检查。 1. 板端配置: 在Android 板端启用 bootchart,请运行以下命令: 2. Bootch…

Python 框架安全:SSTI 模板注入漏洞测试.

什么是 SSTI 模板注入 SSTI (Server-Side Template Injection) 是一种Web应用程序安全漏洞,它发生在应用程序使用模板引擎渲染用户输入时。当应用程序将用户输入直接插入到模板中而不进行充分的过滤和验证时,就可能导致SSTI漏洞。攻击者可以利用这个漏洞…

今天遇到一个GPT解决不了的问题

问题描述 你好,postman的一个post请求,编辑器里面放了一个很长的json数据,报Tokenization is skipped for long lines for performance reasons. This can be configured via editor.maxTokenizationLineLength.,但是同样的数据&a…

C语言标准函数库解析及应用

文章目录 C标准函数库主要包含在以下几个头文件中:常见标准库函数的使用方法:1. **stdio.h - 输入输出**2. **stdlib.h - 动态内存分配**3. **string.h - 字符串操作**4. **math.h - 数学运算**5. **time.h - 时间处理**6. **ctype.h - 字符分类**7. **a…

ACC-UNet: A Completely Convolutional UNet Model for the 2020s

文章目录 ACC-UNet: A Completely Convolutional UNet Model for the 2020s摘要方法实验结果 ACC-UNet: A Completely Convolutional UNet Model for the 2020s 摘要 这十年以来,计算机视觉领域引入了 Vision Transformer,标志着广泛的计算机视觉发生了…

26-ESP32-S3 的 FLASH分区表以及 SPIFFS 文件系统 和spiffsgen.py工具

ESP32-S3 的 SPIFFS 文件系统 ESP32-S3的ROM,RAM,FLASH 存储器类型描述容量内部存储器ROM用于存储固定的程序代码和数据384KBSRAM用于存储运行时的程序数据512KBRTC SRAM在深度睡眠模式下仍然保持数据16KB外部存储器PSRAM片外用于存储运行时的程序数据…

Python专题:八、列表(2)

Python的内置数据类型——列表 定义一个列表a,直接遍历,列表元素 for in循环,通过索引遍历列表 range(参数一,参数二) range(len(a))range(0,len(a)) in 关键字判断元素是否在列表…

射频识别技术RFID

射频识别技术RFID RFID介绍 射频识别: 英文名称是(Radio Frequency Identification), 简称是“ RFID” 又称 无线射频识别, RFID是物联网的其中一种终端技术。 RFID是一种通信技术, 可通过无线电讯号耦合识别特定目标并读写相关…

人脸识别之bbox【det_10g】-ncnn(c++)

模型描述 det_10g是insightface 人脸框图和人脸关键点的分类,最终能够得到人脸框图bbox,分值还有人脸五官(眼x2、鼻子x1、嘴巴x2) 由于我这里没有采用最终结果,通过onnx转换为ncnn,所以后面的步骤结果丢弃…

空间复杂度与链表刷题

"一切的一切都是你自己在感应." 本文索引 空间复杂度复杂度实例实例1实例2实例3 链表题目1. 返回倒数第K个节点2. 链表的回文结构3. 相交链表4. 随机链表的复制5. 环形链表 总结: 前言: 本文主要探究空间复杂度与链表题目讲解 更多文章点击主页: 酷酷学!!! 如果此文对…

Python自动化测试面试题 —— Selenium篇!

Selenium中有几种等待 隐形等待/智能等待 dr.implicitly_wait() 显性等待 WebDriverWait 强制等待 time.sleep() Selenium中有哪些定位方式 8种 tag 三大基本属性 id/name/class_name 链接 link text/partial link text 高级 css selector/xpath 弹框怎么处理 4种弹…