高并发架构 第一章大型网站数据演化——核心解释与说明。大型网站技术架构——核心原理与案例分析
大型网站架构烟花发展历程
- 1.1.1初始阶段的网站构架
- 1.1.2应用服务和数据服务分离
- 1.1.3使用缓存改善网络性能
- 1.1.4使用应用服务器集群改善网站的并发处理能力
- 1.1.5数据库读写分离
- 1.1.6使用反向代理和cdn加速网站相应
-
1.1.1初始阶段的网站构架
-
大型网站都是由小型网站一步步发展而来,网站构架也是一样,也是从小型网站构架逐步演化而来的。一开始写网站都是从一台服务器开始,应用程序、数据库、文件等所有资源都在一台服务器上。通常服务器操作系统用Linux,应用程序使用PHP,部署在apache上,数据库使用MySQL,汇聚各种免得的开源软件就开始网站的发展之路了。
-

-
1.1.2应用服务和数据服务分离
-
随着网站业务的发展,一台服务器逐渐不能满足需求:越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足。这时就需要将应用和数据 分离。应用和数据分离后整个网站使用三台服务器:应用服务器、文件服务器、文件服务器和数据库服务器,这三台服务器对硬件资源的要求各不相同,应用服务器需要处理大量的业务逻辑,因此需要更快更强大的CPU;数据库服务器需要快速磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存;文件服务器需要存储大量用户上传的文件因此需要更大的硬盘。
-

-
应用和数据分离后,不同特性的服务器承担不同的服务角色,网站的并发处理能力和数据存储空间得到了很大的改善,支持网站业务进一步发展,但是随着用户逐渐增多,网站有一次面临挑战:数据库压力太大导致访问延迟,进而影响整个网站的性能,用户体验收到影响。这是需要对网站进行下一步优化。
-
1.1.3使用缓存改善网络性能
-
一般网站使用的缓存可以分为两种:存储再应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存。本地缓存的访问速度更快一些,但是受应用服务器内存限制,其缓存数据量有限,而且会出现和应用程序争用内存的情况。远程分布式缓存可以使用集群的方式,部署大内存的服务器作为专门缓存服务器,可以再理论上左到捕兽内存容量限制的缓存服务。
-

-
分布式缓存的作用?
-
使用缓存后,数据库访问压力得到有效缓解。
-
但是单一应用服务器能过够处理的请求连接有限,在网站访问高峰期,应用服务器成为整个网站的瓶颈。
-
1.1.4使用应用服务器集群改善网站的并发处理能力
-
使用集群是网站解决高并发海量数据问题的常用手段。当一台服务器的处理能力、存储空间不足时,不要尝试去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。而更好的办法是增加一台服务分担袁勇服务器的访问及存储压力。
-
对网站架构而言只要通过增加一台服务器的方式改善负载压力,就可以 以同样的方式持续增加服务器不断改善系统性能,从而实现系统的可伸缩性。应用服务器实现集群是网站可伸缩集群架构设计中较为简单成熟的一种
-

-
负载均衡是为了做什么?
-
通过负载均衡调度服务器,可将来自用户浏览器的访问请求分发到应用服务器集群中的任何一台服务器上,如果有更多的用户,就在集群中加入更多的应用服务器,使应用服务器的负载压力不再成为整个网站的瓶颈。
-
1.1.5数据库读写分离
-
使用网站缓存后使绝大部分数据 读操作访问都可以不通过数据库就可以完成,但是仍有一部分 读操作比如缓存访问不命中/缓存过期。或者全部的 写操作需要访问数据库,在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈。
-
目前大部分的主流数据库都提供主从热备功能,就是通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。而网站则可以利用数据库的这一功能,实现数据库读写分离,从而改善数据库负载压力。
-

-
应用服务器再需要写数据时 访问主数据库 ,主数据库通过主从复制机制将数据库更新同步到从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据。为了便于应用程序访问读写分离后的数据库,通常在应用服务器端使用专门的数据访问模块,使数据库读写分离对应透明。
-
1.1.6使用反向代理和cdn加速网站相应
-
随着网站业务不断发展,用户规模越来越大,由于中国复杂的网络环境,不同地区网站访问越慢,用户越容易失去耐心离开。所以,为了提供更好的用户体验,留住用户,网站需要加速网站访问速度。主要手段有使用CDN和反向代理。
-

-
CDN和方向代理的原理都是缓存,区别在于CDN部署在网络提供商的机房,使用户载请求网站服务时,可以从距离自己最近的网络提供上级房获取数据;而反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器中缓存者用户请求的资源,就将其直接返回给用户。
-
使用CDN和反向代理的目的都是尽早返回数据给用户,一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。
后续文章请关注以下内容
该文章出自 《大型网站技术架构核心原理与案例分析》 李智慧 著
注:因并非我自己的文章,写的时候方便大家理解,故此文章稍有篆改。后续如作者大大要求删除 我会第一时间删除该文章(毕竟画风确实low)。
如果有想要深入了解的小伙伴可以购买该书 也可以通过该渠道下载该书的pdf电子版。(免费)
链接:百度网盘
密码:u9bg
相关文章:
高并发架构 第一章大型网站数据演化——核心解释与说明。大型网站技术架构——核心原理与案例分析
大型网站架构烟花发展历程1.1.1初始阶段的网站构架1.1.2应用服务和数据服务分离1.1.3使用缓存改善网络性能1.1.4使用应用服务器集群改善网站的并发处理能力1.1.5数据库读写分离1.1.6使用反向代理和cdn加速网站相应1.1.1初始阶段的网站构架 大型网站都是由小型网站一步步发展而…...
VPP接口INPUT节点运行数据
在设置virtio接口接收/发送队列函数的最后,更新接口的运行数据。 void virtio_vring_set_rx_queues (vlib_main_t *vm, virtio_if_t *vif) { ...vnet_hw_if_update_runtime_data (vnm, vif->hw_if_index); } void virtio_vring_set_tx_queues (vlib_main_t *vm,…...
RabbitMQ学习(九):延迟队列
一、延迟队列概念延时队列中,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望 在指定时间到了以后或之前取出和处理。简单来说,延时队列就是用来存放需要在指定时间内被处理的 元素的队列。其实延迟…...
TCP并发服务器(多进程与多线程)
欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 TCP并发服务器(多进程与多线程)1. 多进程并发服务器(1)…...
第1章 Memcached 教程
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。 Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素…...
【2022.12.9】Lammps+Python 在计算g6(r)时遇到的问题
目录写在前面绘制g6( r )执行步骤【updated】如何检查图像的正确性:不是编程问题,而是数学问题的一个小bug废稿2则:写在前面 全部log: 【2022.11.16】LammpsPythonMATLAB在绘制维诺图时遇到的问题 绘制g6( r )执行步骤【updated…...
MySQL使用C语言连接
文章目录MySQL使用C语言连接引入库下载库文件在项目中使用库使用库连接数据库下发SQL请求获取查询结果MySQL使用C语言连接 引入库 要使用C语言连接MySQL,需要使用MySQL官网提供的库。 下载库文件 下载库文件 首先,进入MySQL官网,选择DEVEL…...
JavaScript随手笔记---比较两个数组差异
💌 所属专栏:【JavaScript随手笔记】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#…...
【C++修炼之路】21.红黑树封装map和set
每一个不曾起舞的日子都是对生命的辜负 红黑树封装map和set前言一.改良红黑树的数据域结构1.1 改良后的结点1.2 改良后的类二. 封装的set和map2.1 set.h2.2 map.h三. 迭代器3.1 迭代器封装3.2 const迭代器四.完整代码实现4.1 RBTree.h4.2 set.h4.3 map.h4.4 Test.cpp前言 上一节…...
下载ojdbc14.jar的10.2.0.1.0版本的包
一、首先要有ojdbc14.jar包 没有的可以去下载一个,我的是从这里下载的ojdbc14.jar下载_ojdbc14.jar最新版下载[驱动包软件]-下载之家, 就是无奈关注了一个公众号,有的就不用下了。 二、找到maven的本地仓库的地址 我的地址在这里D:\apach…...
关于欧拉角你需要知道几个点
基础理解,参照:https://www.cnblogs.com/Estranged-Tech/p/16903025.html 欧拉角、万向节死锁(锁死)理解 一、欧拉角理解 举例讲解 欧拉角用三次独立的绕确定的轴旋转角度来表示姿态。如下图所示 经过三次旋转,旋…...
git ssh配置
ssh配置 执行以下命令进行配置 git config --global user.name “这里换上你的用户名” git config --global user.email “这里换上你的邮箱” 执行以下命令生成秘钥: ssh-keygen -t rsa -C “这里换上你的邮箱” 执行命令后需要进行3次或4次确认。直接全部回车就…...
Linux进程概念(三)
环境变量与进程地址空间环境变量什么是环境变量常见环境变量环境变量相关命令环境变量的全局属性PWDmain函数的三个参数进程地址空间什么是进程地址空间进程地址空间,页表,内存的关系为什么存在进程地址空间环境变量 什么是环境变量 我们所有写的程序都…...
新手福利——x64逆向基础
一、x64程序的内存和通用寄存器 随着游戏行业的发展,x32位的程序已经很难满足一些新兴游戏的需求了,因为32位内存的最大值为0xFFFFFFFF,这个值看似足够,但是当游戏对资源需求非常大,那么真正可以分配的内存就显得捉襟…...
虚幻c++中的细节之枚举类型(enum)
文章目录前言一、原生c的枚举类型关键字classint8 - 枚举的基础类型(underlying type)二、枚举类型的灵活运用位运算枚举循环遍历三、虚幻风格的枚举类型UENUMUMETATEnumAsByte总结前言 虚幻引擎中的代码部分实现了一套反射机制,为c代码带了…...
判断某个字符串在另一个字符串中的个数
/** * 用于判断字符串中字符的个数 * * param str1 原字符串 * param str2 需要判断的字符 * return 返回有几个 */ private int getCount(String str1, String str2) { //获取两个字符串的长度 int oneLength str1.length(); int toLength str2.length(); //定义两个整数&am…...
测试人员如何运用好OKR
在软件测试工作中是不是还不知道OKR是什么?又或者每次都很害怕写OKR?或者总觉得很迷茫,不知道目标是什么? OKR 与 KPI 的区别 去年公司从KPI换OKR之后,我也有一段抓瞎的过程,然后自己找了两本书看,一本是《OKR工作法》…...
CentOS7 Hive2.3.9 安装部署(mysql 8.0)
一、CentOS7安装MySQL数据库 查询载mariadb rpm -qa | grep mariadb卸载mariadb rpm -e --nodeps [查询出来的内容]安装wget为下载mysql准备 yum -y install wget在tools目录下执行以下命令,下载MySQL的repo源: wget -P /tools/ https://dev.mysql.…...
【PTA Advanced】1142 Maximal Clique(C++)
目录 题目 Input Specification: Output Specification: Sample Input: Sample Output: 思路 代码 题目 A clique is a subset of vertices of an undirected graph such that every two distinct vertices in the clique are adjacent. A maximal clique is a clique …...
1. MySQL在金融互联网行业的企业级安装部署
这里写目录标题 1. 版本介绍示例2.安装MySQL规范(建议二进制)2.1 安装方式2.2 安装用户2.3 目录规范3.二进制安装3.1 操作系统配置3.2 MySQL 5.7.33 安装部署2.3 MySQL8.0.27安装2.4 源码安装(了解 )3.多实例部署及注意事项3.1 多实例概念3.2 多实例安装3.3 多实例第二种方式…...
避开这3个坑,你的LVGL界面动画才能流畅不卡顿:定时器使用避坑指南
避开这3个坑,你的LVGL界面动画才能流畅不卡顿:定时器使用避坑指南 在嵌入式GUI开发中,流畅的动画效果往往能大幅提升用户体验。但很多开发者在使用LVGL定时器实现动画时,常会遇到界面卡顿、响应迟缓的问题。这通常不是LVGL本身的问…...
NCM格式高效解密工具:三步解决网易云音乐文件播放限制问题
NCM格式高效解密工具:三步解决网易云音乐文件播放限制问题 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 您是否曾经遇到下载的网易云音乐文件无法在其他设备播放的困扰?ncmdump工具正是为解决这一痛点而生&…...
Seed-Coder-8B-Base案例分享:这些实用代码片段都是AI写的
Seed-Coder-8B-Base案例分享:这些实用代码片段都是AI写的 1. 引言:AI编程助手的崛起 在软件开发领域,一个革命性的变化正在发生:AI代码生成工具正从简单的补全功能,进化成为真正的编程伙伴。Seed-Coder-8B-Base作为一…...
Wan2.2-I2V-A14B从零开始:RTX4090D专属镜像安装、验证、生成全流程
Wan2.2-I2V-A14B从零开始:RTX4090D专属镜像安装、验证、生成全流程 1. 镜像概述与准备工作 Wan2.2-I2V-A14B是一款强大的文生视频模型,能够根据文本描述生成高质量视频内容。本教程将指导您完成从安装到实际生成视频的全过程,特别针对RTX40…...
douyin-downloader:高效采集抖音内容的全流程解决方案
douyin-downloader:高效采集抖音内容的全流程解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppo…...
三步解决华硕笔记本性能优化难题:G-Helper全方位调控指南
三步解决华硕笔记本性能优化难题:G-Helper全方位调控指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix,…...
开源项目Windows Subsystem for Android部署与优化解决方案
开源项目Windows Subsystem for Android部署与优化解决方案 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA Windows Subsystem for Android(WSA&…...
华硕笔记本智能管理:用G-Helper实现高效调节与散热优化
华硕笔记本智能管理:用G-Helper实现高效调节与散热优化 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, S…...
别再手动算坐标了!用Python的coord-convert库5分钟搞定高德/百度/WGS84互转
别再手动算坐标了!用Python的coord-convert库5分钟搞定高德/百度/WGS84互转 你是否曾在处理地理数据时,被不同地图平台的坐标系搞得焦头烂额?GPS设备采集的WGS84坐标无法直接在高德地图上显示,百度地图的坐标又和微信小程序不兼容…...
G-Helper终极指南:3分钟解锁华硕笔记本隐藏性能,告别臃肿控制中心!
G-Helper终极指南:3分钟解锁华硕笔记本隐藏性能,告别臃肿控制中心! 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting acr…...
