论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
数据库
›
PostgreSQL
›
【redis】数据量巨大时的应对策略
【redis】数据量巨大时的应对策略
干翻全岛蛙蛙
金牌会员
|
2024-9-8 10:08:17
|
显示全部楼层
|
阅读模式
楼主
主题
886
|
帖子
886
|
积分
2658
为什么数据量多了主机会崩
一台主机的硬件资源是有上限的,包括但不限于一下几种:
CPU
内存
硬盘
网络
…
服务器每次收到一个请求,都是需要斲丧上述的一些资源的~~
如果同一时刻处置处罚的请求多了,此时就大概会导致某个硬件资源不够用了,无论是谁人方面不够用了,都大概会导致服务器处置处罚请求的时间变长,乃至于处置处罚堕落
如果我们真的碰到了这样的服务器不够用的场景,我们可以:
开源
简朴粗暴,直接增长更多的硬件资源(什么不够补什么)
不过一个主机上面能增长的硬件资源也是有限的,取决于主板的扩展能力
节流(软件上优化)
针对步伐进行优化,优化代码(各凭本事)
通过性能测试,找到是哪个环节出现了瓶颈,再对症下药
操作起来很难!对步伐员的程度要求比较高
分布式系统
当一台主机扩展到极限了,但是还不够,就只能引入多台主机了
但不是说买来的新的机器直接就可以办理问题,也需要软件上做出对应的调解和适配。当引入多台主机了,我们的系统就可以称为“
分布式系统
”了
引入
分布式系统
是
万不得已
的,系统的复杂程度会大大大提高(指数增长),这样出现 bug 的概率就越高、加班的概率就越大、丢失年终奖的概率也随之提高
应用数据分离架构
之前应用服务和数据库服务部署在一个服务器上,意味着这一份硬件资源要给两人用
现在各用各的,还可以针对两种服务器的特点,配置不同的主机
应用服务器,里面大概包罗很多的业务逻辑,大概会很吃 CPU 和内存。就给其配置 CPU 配置高、内存大的主机
存储服务器,最主要的就是需要更大的硬盘空间、更快的数据访问速度。就给其配置更大硬盘的服务器,乃至还可以上 SSD 硬盘(固态硬盘)
分离了之后,能一定程度上的办理硬件资源不够用的问题。但是如果随着请求量进一步增长、数据量进一步增长,我们就需要进一步地增长硬件资源、调解服务器的结构
应用服务集群架构
引入更多的应用服务器节点
应用服务器大概会比较迟 CPU 和内存。如果把 CPU 和内存吃没了,此时应用服务器就顶不住了
此时引入更多的应用服务器,就可以有效办理上述问题
相当于是有了更多的 CPU 和硬件资源
负载均衡器
用户的请求先到“负载均衡器/网关服务器”(单独的服务器)这里,然后由其对这个请求进行分发
现在我们有多个应用服务器了(图中是俩,实际上大概是多个),每个应用服务器都是能单独完成整个业务逻辑的,
此时引入多个应用服务器之后,就可以让每个应用服务器负担整体请求中的一部分
负载均衡器就像公司的一个组的领导一样,要负责管理,负责把任务分配给每个组员
假设有 1w 个用户请求,有 2 个应用服务器,此时按照负载均衡的方式,就可以让每个应用服务器负担 5k 的访问量
[!quote]
负载均衡器
负载均衡器就像公司的一个组的领导一样,要负责管理,负责把任务分配给每个组员
其内部有很多的“负载均衡”详细的算法
此时应用服务器的压力变小了,但“负载均衡器”不是一人负担了所有请求吗?他不会崩吗?
负载均衡器对于请求量的负担能力要远远凌驾应用服务器
负载均衡器是领导,他的职责是分配工作
应用服务器是组员,他的职责是执行任务
执行一个任务所花的时间远远超出分配一个工作所花的时间,所以负载均衡器斲丧的硬件资源是很少的
当请求量大到负载均衡器也扛不住的时间,只需要引入更多的负载均衡器(引入多个机房)就可以了
如上面讨论,增长应用服务器,确实能够处置处罚更高的请求量,但是随之存储服务器要负担的请求量也就更多了,此时仍是两个办法:
开源,引入更多的机器,
数据库读写分离
节流,门槛高
数据库读写分离
在这个图里可以看到,存储服务器酿成两台了(实际上大概有更多台)
主数据库(master),只负责
写
从数据库(slave),只负责
读
。是主数据库的“跟班”,这个数据库中的数据要从主数据库中进行同步
应用服务器需要
读
,就从“
从数据库
”中去读。需要
写
,就从“
主数据库
”中去写
这样就把每一台机器的压力降低了。在实际的应用场景中,
读的频率是比写要高的
主服务器一般是一个,从服务器可以有多个(
一主多从
),同时从数据库通过
负载均衡
的方式,让应用服务器进行访问
引入缓存
冷热分离架构
数据库天然有个问题——响应速度比较慢。所以将数据区分“冷热”,热点数据放到缓存中,缓存的访问速度往往要比数据库要快很多
缓存中只是放一小部分
热点数据
(会频仍被访问到的数据)
数据库里面存储的仍然是
全量数据
,只是相比之下
热点数据
会被放在
缓存
中
二八原则
,20% 的数据能支持 80% 的访问量,更极度的情况能到一九
后续应用服务器在读取数据的时间,就可以先读缓存,如果这个数据在缓存中存在,就不需要读数据库中的数据了;如果不存在,就再去读数据库。由于二八原则,所以大部分的访问都可以直接在缓存中找到答案
这样数据库的压力又进一步降低了
同时缓存读的又快,又节流了时间
此时就相当与缓存服务器在帮助数据库服务器负重前行
分库
引入分布式系统有两个方面:
应对更高的
请求量
(并发量)
应对更大的
数据量
虽然一个服务器存储的数据量可以到达几十个 TB,但是仍然会存在一台主机存不下数据的情况。当出现这样的情况时,我们就需要
多台主机来存储
针对数据库进行进一步拆分==>
分库分表
,原来一个数据库服务器,这个数据库服务器上有多个数据库(指的是逻辑上的数据集合,create database 创建的谁人东西)
现在就可以引入多个数据库服务器,每个数据库服务器存储一个大概一部分数据库
将不同的表分到不同的机器上
分表
如果某个表非常大,大到一台主机存不下,也可以针对表进行拆分
将一张表拆成五张表,用五个服务器去存储,每个服务器都存储原表中的一部分
这样的话我们引入的存储空间就更多了
详细分库分表如何实践,还是要团结实际的业务场景来开展
微服务
是什么
上面已经演化出了一个比较复杂的分布式系统,可以处置处罚更多的请求,同时可以存储更多的数据。但是这样的演化远远不是终点。在实际工作中还会对应用服务器做进一步的拆分
当应用服务器中要做的功能太多、太复杂,就需要将应用服务器拆成更多的部分
每一部分只负责其中的一小部分功能
之前应用服务器,一个服务器里面做了很多的业务,这就大概会导致这一个服务器的代码变得越来越复杂。为了更方便于代码的维护,就可以把这样的一个复杂的服务器,拆分成更多
单一的,但是更小的服务器
==>
微服务
服务器的种类和数量就增长了
每组服务器都有各自的存储集群和缓存模块
注意:微服务本质上是在办理“人”的问题
当应用服务器复杂了,势必就需要更多的人来维护,当人变多了,就需要配套的管理,把这些人组织好
划分组织结构,分成多个组
每个组分配领导进行管理
分成多个组就需要进分工
代价
引入微服务,办理了人的问题,但是付出的代价:
整个系统的性能会下降
本来用户、商品、交易这些模块都是直接在进程内相互调用的。而现在需要通过网络,进行跨主机通讯
网络通讯比进程内调用慢太多太多了
访问最快的是 CPU、其次内存、才到硬盘,硬盘自己就比内存慢很多了
拆出更多的服务,多个功能之间要更依靠网络通讯,而网络通讯的速度大概比硬盘还要慢,这样系统的性能就会下降很多
想要保证性能不下降太多,只能引入更多的机器,更多的硬件资源(充钱,大厂不差钱)
幸运的是,由于硬件技术的发展,网卡现在有“
万兆网卡
”,读写速度已经能凌驾硬盘读写了,这样才导致微服务的通讯操作不至于“太慢”
不过就一个字——
贵
万兆网卡还需要配上万兆路由器、万兆交换机,乃至是能支持万兆带宽的网线…
所以,这些就不是一些中小公司折腾的起的,还是只有一些大厂能玩得转
系统复杂程度提高,可用性受到影响
服务器更多了,出现问题的概率就更大了,这就需要一系列的手段,来保证系统的可用性
更丰富的监控报警机制
配套的运维人员
上风
办理了人的问题
利用微服务,可以更方便于功能的复用
比如电商系统里面的用户模块,大概在很多模块中多需要用到,那我们就将其单独提取出来,给其他模块来调用
可以给不同的服务进行不同的部署
有的模块对于请求量/数据量处置处罚的不是很多,我们就给它少部署一点机器;有些重点的、负载量大的模块,我们就可以配置更好的机器
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
干翻全岛蛙蛙
金牌会员
这个人很懒什么都没写!
楼主热帖
Mac 上下载安装《鸣潮》详细教程(含更 ...
SQL的函数
Android Studio实现一个校园图书管理系 ...
ASP.NET Core依赖注入之旅:针对服务注 ...
类与对象的创建
我为什么选择Wiki.js记笔记? ...
ES6案例 ------ 模拟浏览器网页顶部切 ...
批量下载浏览器网页中全部链接的方法 ...
Redis笔记总结(狂神说)
sql注入详解
标签云
挺好的
服务器
快速回复
返回顶部
返回列表