系统设计实例(一)百万级别用户系统

news2024/12/29 9:49:28

二、百万级别用户系统

原则:

  • 尽可能地缓存数据
  • 采用无状态Web层
  • 支持多个数据中心
  • 在 CDN 中托管静态资源
  • 通过分片扩展数据层
  • 将层级拆分为独立的服务
负载均衡器

负载均衡器会将传入的流量均匀分配给在负载均衡集合中定义的Web服务器,用户直接连接负载均衡器的公共IP。通过这种设置,Web服务器不再能直接被客户端访问,负载均衡器通过私有IP与Web服务器进行通信。

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

image-20230517205239480

  • 更好的性能:在主从模型中,所有的写操作和更新操作都发生在主节点上,而读操作分布在从节点上。这种模型改善了性能,因为它允许更多的查询并行处理。
  • 可靠性:如果你的数据库服务器之一被自然灾害(如台风或地震)摧毁,数据仍然得以保留。你不需要担心数据丢失,因为数据被复制到多个位置。
  • 高可用性:通过在不同的位置复制数据,即使一个数据库离线,你的网站仍然可以运行,因为你可以访问存储在另一个数据库服务器中的数据。
无状态Web层

有状态服务器会记住从一个请求到下一个请求的客户端数据(状态)。无状态服务器不保存任何状态信息。

有状态Web层的问题在于同一客户端的每个请求必须路由到同一台服务器,我们将状态(例如用户会话数据)从Web层中移出,做法是将会话数据存储在持久性存储中,如关系型数据库或NoSQL数据库。用户的HTTP请求可以发送到任何Web服务器,这些服务器从共享数据存储中获取状态数据。状态数据存储在共享数据存储中,并且不保存在Web服务器中。无状态系统更简单、更健壮和可扩展。

image-20230517205815284

内容分发网络(CDN)

CDN是一个由地理分布的服务器组成的网络,用于传送静态内容。CDN服务器缓存像图像、视频、CSS、JavaScript文件等静态内容。静态资源不再由 Web 服务器提供。它们从 CDN 获取以获得更好的性能。

  • 看用户的 IP 地址,查表得知地理位置,找相对最近的边缘节点
  • 看用户所在的运营商网络,找相同网络的边缘节点
  • 检查边缘节点的负载情况,找负载较轻的节点
  • 其他,比如节点的“健康状况”、服务能力、带宽、响应时间等

img

流程
  • 如果CDN服务器没有image.png的缓存,CDN服务器会从源请求文件。
  • 源将image.png返回给CDN服务器,其中包括可选的HTTP头部Time-to-Live(TTL),描述图像被缓存的时间。
  • CDN缓存图像并将其返回给用户A。图像会在CDN中缓存,直到TTL过期。
  • 用户B发送请求以获取相同的图像。
  • 只要TTL未过期,图像将从缓存中返回。

其中有两个衡量CDN服务质量的指标:

  • 命中率:用户访问的资源恰好在缓存系统里,可以直接返回给用户,命中次数与所有访问次数之比
  • 回源率:缓存里没有,必须用代理的方式回源站取,回源次数与所有访问次数之比
消息队列

image-20230517205941209

消息队列是一种持久性组件,存储在内存中,用于支持异步通信。它作为缓冲区并分发异步请求。消息队列的基本架构很简单。称为生产者/发布者的输入服务创建消息,并将其发布到消息队列中。其他服务或服务器,称为消费者/订阅者,连接到队列并执行消息定义的操作。

数据中心

在正常运行时,用户会根据地理位置通过geoDNS路由到最近的数据中心,其中在美国东部的流量占x%,在美国西部的流量占*(100 - x)%*。geoDNS是一种DNS服务,根据用户所在地将域名解析为IP地址。

image-20230517205854112

如果发生任何重大数据中心故障,我们会将所有流量引导到一个正常运行的数据中心。

技术挑战:

  • 流量重定向:需要有效的工具将流量引导到正确的数据中心。根据用户所在地,可以使用geoDNS将流量引导到最近的数据中心。
  • 数据同步:来自不同地区的用户可能使用不同的本地数据库或缓存。在故障转移情况下,流量可能会路由到一个数据中心,该数据中心的数据不可用。一种常见的策略是在多个数据中心之间复制数据。一项先前的研究展示了Netflix如何实现异步多数据中心复制。

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

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

相关文章

数据结构与算法3-选择排序

文章目录 1. 认识选择排序2. 图示2.1 图示12.2 图示2 3. 代码 1. 认识选择排序 双层for循环,每次选出最小的数放到i位置,时间复杂度O( n 2 n^2 n2),空间复杂度O(1);从未排序的序列中找到最小(或最大)的元素&#xff0…

Windows server Database 2025 安装 i225/i226 网卡驱动

windows这比坏得很,intel消费级网卡不准在服务器系统上安装。你要说他是异构不支持?他就纯粹恶心人。 之前已经安装过一次,但是今天database预览版一更新,又给我把网卡驱动杀了,气死,写一篇教程。 1.去官网…

cordova安装安卓版本,遇到的各种坑。折腾了两天才弄好

cordova官网地址 https://cordova.apache.org/docs/en/12.x/guide/cli/index.html 1. 输入命令 npm install -g cordova 全局安装cordova 2. 创建文件和项目以及app的应用名称 cordova create hello com.example.hello HelloWorld 我写的是这个 cordova create myApp 3.co…

基于Springboot的员工健康管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的员工健康管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

【Linux】盘点广义层面上【三种最基本的进程状态】

前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…

cmd中cd命令无法进入文件目录

问题:在cmd中用cd命令进入不了目录 解决办法:在cd后面加/d(cd和/d之间有空格) windows的cmd命令cd和cd /d的区别: 1. cd 命令: - cd 是 "change directory" 的缩写。 - 默认情况下,cd 命令…

DNA存储技术原理是什么?

随着大数据和人工智能的发展,全球每天产生的数据量剧增,对存储设备的需求也随之增长,数据存储问题日益凸显。传统的硬盘驱动器(HDD)、磁带等冷存和深度归档存储占据数据中心存储的60-70%,由于它们的访问频率…

Java特性之设计模式【组合模式】

一、组合模式 概述 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式&#x…

【YUNBEE云贝-PostgreSQL】FDW应用

注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。 前言 Wrapper(FDW)是一项关键特性,它赋予数据库用户直接通过SQL语句访问存储于外部数据源的能…

Jumpserver 堡垒机用户启用双因子登录

前言: 堡垒机双因子登录 堡垒机往往是内部权限的集合体,拿到了堡垒机的用户账号密码,很容易就顺藤摸瓜攻破各种应用系统,除了常规的用户名复杂密码的要求外,我们常常都要求采用双因子的登录方式。双因子最常见的就是账…

【Super数据结构】先进先出/后进先出,队列和栈代码实现+应用场景

🏠关于此专栏:Super数据结构专栏将使用C/C语言介绍顺序表、链表、栈、队列等数据结构,每篇博文会使用尽可能多的代码片段图片的方式。 🚪归属专栏:Super数据结构 🎯每日努力一点点,技术累计看得…

HarmonyOS如何使用低代码实现界面布局

介绍 本篇Codelab是基于ArkTS语言的低代码开发方式实现的一个简单实例。具体实现功能如下: 创建一个低代码工程。通过拖拽的方式实现任务列表和任务信息界面的界面布局。在UI编辑界面实现数据动态渲染和事件的绑定。 最终实现效果如下: 相关概念 低代…

ECharts5 概念篇2

数据转换 数据转换基础使用 在 echarts 中,数据转换是依托于数据集(dataset)来实现的. 我们可以设置 dataset.transform 来表示,此 dataset 的数据,来自于此 transform 的结果。下面是上述例子的效果,三个饼…

冶炼金属(二分)

题目描述: 小蓝有一个神奇的炉子用于将普通金属 O 冶炼成为一种特殊金属 X。 这个炉子有一个称作转换率的属性 V,V是一个正整数,这意味着消耗 V个普通金属 O 恰好可以冶炼出一个特殊金属 X,当普通金属 O 的数目不足 V 时&#x…

【机器学习】基于粒子群算法优化的BP神经网络分类预测(PSO-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】粒子群算法(PSO)原理及实现 2.设计与实现 数据集: 多输入多输出:样本特征24,标签类别4…

项目五 实现对学生信息的简单查询

项目五 实现对学生信息的简单查询 1,查询数据库中部分字段的信息 使用select语句对表的选择及连接等操作,结构会生成一个临时表,将select结果存放到临时表中 查询数据表中所有字段的值 #格式:(*:表示所有列) select * from 表…

milvus安装

milvus安装 sudo curl -L “https://github.com/docker/compose/releases/download/1.29.2/docker-compose- $ (uname -s)- $ (uname -m)” -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose sudo ln -s /usr/local/bin/docker-compose /usr/bin/…

SpringBoot项目通过触发器调度实现定时任务

文章目录 前言一、quartz是什么?二、quartz中核心概念三、集成步骤1.引入依赖2.demo样例a.定义一个任务参数实体类b.定义操作触发器、定时任务接口及实现c.作业实现d.结果截图 四、其他1.QuartzJobBean和Job区别2.注意事项3.作业(Job)和触发器…

考虑功率均分与电压频率的事件触发分布式二次控制MATLAB模型

微❤关注“电气仔推送”获得资料(专享优惠) 模型简介 此模型是在《基于事件触发机制的孤岛微电网二次电压与频率协同控制MATLAB仿真模型》上进一步创作的,之前的模型只考虑了二次电压与频率控制,并没有考虑均分这一项点。 因此…

STM32相关资料汇总

STM32选型表 STM32手册参考网站 https://www.stmcu.org.cn/