系统设计 —— 随用户扩展

news2025/4/20 4:33:07

单服务器设置:

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

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 尚未过期,则从缓存中获取。

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

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

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

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

相关文章

字符串函数(一):strcpy(拷贝),strcat(追加),strcmp(比较),及strncpy,strncat,strncmp

字符串函数 一.strcpy(字符串拷贝)1.函数使用2.模拟实现 二.strcat(字符串追加)1.函数使用2.模拟实现 三.strcmp(字符串比较)1.函数使用2.模拟实现 四.strncpy1.函数使用2.模拟实现 五.strncat1.函数使用2.…

[Kubernetes] sealos 部署 K8s v1.25.0 集群

文章目录 1.sealos 介绍2.操作系统基础配置3.安装部署 K8s4.验证 K8s 集群5.部署测试资源 1.sealos 介绍 Sealos 是一个基于 Kubernetes 内核的云操作系统发行版。它采用云原生方式,摒弃传统的云计算架构,转向以 Kubernetes 为云内核的新架构。这使得企…

Python从0到POC编写--函数

数学函数: 1. len len() 函数返回对象(字符、列表、元组等)长度或项目个数, 例如: str "python" len(str)2. range range() 函数返回的是一个可迭代对象(类型是对象),…

安卓短视频一键搬运软件_V1.5.2 高级版

短视频一键搬运app是一款非常实用的视频处理软件,拥有各种各样的视频处理功能,可以帮助用户进行视频的多项处理,首先用户可以在这里为视频去除水印,打开视频文件过后,再把视频里面的水印内容框选出来,这样就…

从“金事通”带给我意想不到的来说--“数据是架构的中心”

背景 上周一个保险的销售人员来找我完成一定的售后流程。其中有一项是请我下载一个叫 金事通的 APP。说实在的我根本没听过。她说这是政治任务。我想不是有你们保险公司的APP了嘛。为什么还要我安装。没办法先安装吧。 经历了注册、人脸识别的步骤后。可以登录了。注册短信发…

Rx(Reactive Extensions)的由来

既然我们已经介绍了响应式编程,现在是时候了解我们的明星了:响应式扩展,通常简称为Rx。微软开发了Reactive扩展库,使其易于处理事件流和数据流。在某种程度上,时变值本身就是一个事件流;每个值更改都是一种类型的事件它会更新依赖…

交通地理信息系统实习教程(二)

这篇文章服务于GIS背景用户以及有志于GIS的朋友 操作源数据位置:【免费】交通地理信息系统实习二源数据资源-CSDN文库 软件安装包位置:【免费】TransCad-交通地理信息系统软件资源-CSDN文库 一、最短路径分析 1.1软件启动说明 这里需要给出一个必要的…

快来参加【顶尖赛事】LIC·2024 语言与智能技术竞赛

语言与智能技术竞赛(LIC)是由中国中文信息学会(CIPS)和中国计算机学会(CCF)联合主办,百度公司、中国中文信息学会评测工作委员会和中国计算机学会自然语言处理专委会承办的中文NLP顶级赛事&…

qt移植到imx6ull运行(qt部署到imx6ull)

这个事情对于小白来说确实不是很友好,会经常出现错误,我弄了两天终于弄好了 我主要参考了https://blog.csdn.net/m0_61738650/article/details/131269561 https://blog.csdn.net/m0_61738650/article/details/131171914这两个教程 我现在来简述一下流程…

AI+新能源充电桩数据集

需要的同学私信联系,推荐关注上面图片右下角的订阅号平台 自取下载。 随着我国新能源汽车市场的蓬勃发展,充电桩的需求量日益增加,充电桩的智能化程度不仅影响充电站运营商的经营效益,也大大影响着用户的充电体验。AI技术可以涵盖…

深入浅出:ConcurrentLinkedQueue源码分析与实战

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

C++青少年简明教程:C++中的常量、变量、表达式和语句

C青少年简明教程:C中的常量、变量、表达式和语句 在C编程中,常量、变量、表达式和语句是基本的编程概念。 常量(Constants):在程序中具有固定值的数据称为常量。常量可以是字面值,如整数、浮点数、字符或…

西门子博途WINCC动画之旋转运动

概述 本例将介绍在西门子 TIA Portal HMI 中旋转运动动画的一种实现方法。本例以风机、搅拌器和传送带为例,按下启动按钮开始转动,按下停止按钮停止转动。 第1步: 添加 PLC 设备。​博途TIA/WINCC社区VX群 ​博途TIA/WINCC社区VX群 选择西…

基于SpringBoot的酒店(预约)客房管理系统的设计与实现+毕业论文

系统介绍 酒店客房管理系统为酒店管理者和用户、清洁人员提供一个在线管理酒店客房的系统。在网站的设计中,一共分为了两个模块设计,一个是前台模块,一个是后台模块,前台主要用于提供查看客房信息,酒店资讯&#xff0…

iOS MRC那句话

混编时使用MRC文件需要使用这句话 -fno-objc-arc在下图中显示的位置添加

5月13号作业

使用消息队列实现的2个终端之间的互相聊天 并使用信号控制消息队列的读取方式: 当键盘按ctrlc的时候,切换消息读取方式,一般情况为读取指定编号的消息,按ctrlc之后,指定的编号不读取,读取其他所有编号的消息…

004.可观察对象与观察者

Rx非常适合事件驱动的应用程序。这是有意义的,因为事件(作为)(如前所述)是创建时变值的命令式方法。从历史上看,事件驱动编程主要出现在客户端技术中,因为作为事件实现的用户交互。例如,你可能工作过使用OnMouseMove或OnKeyPressed事件。正因…

commvault学习(7):恢复oracle

在实际生产环境中,oracle的恢复方式大部分是异机恢复。 环境: 备份机:windows server2008,ip:192.168.20.56 恢复目标机:windows server2008,ip:192.168.20.55 CS、MA&#xff1…

acw165. 小猫爬山-DFS剪枝与优化

题目 思路 暴搜顺序:从前往后依次枚举每只小猫,枚举当前这只小猫应该放在哪一辆车上,递归完n层之后,就可以知道所有方案中的最少车辆总数剪枝的情况: 优化搜索顺序:大部分情况下,应该优先搜索分…

Java抽象类:为何它是你代码架构的基石?

目录 1、抽象类的概念 2、抽象类语法 3、抽象类特性 4、抽象类的作用 5、 完结散花 个人主页:秋风起,再归来~ 文章专栏:javaSE的修炼之路 个人格言:悟已往之不谏,知来者犹可追 克…