缓存
我们先来看一张图。这是一张简单版的用户浏览器访问网站一套流程。
![e149a254a6c7dce774922edde081cc34.png](https://i-blog.csdnimg.cn/blog_migrate/61b685f5308e6753394f93b81dcc0cd4.png)
我们来分析下,在整个流程里面用到啦多少缓存。
•浏览器:浏览器会对图片视频,css,js文件进行一次缓存,除非文件更新(根据url请求的名称以及后缀版本来判断),如果存在更新则重新向服务器请求数据,当然,现在是cdn的时代,也不会对服务器产生负担。•web服务器: web应用内部内存会缓存一些配置文件,还有一些常用的数据内容。•redis数据库:当某个数据访问非常频繁的时候,会将数据缓存写入redis,就不需要从数据库里面拿数据。•mysql数据库: mysql数据库自带缓存,数据第一次读出来会缓存到数据库。第二次读取直接从数据库读取。•操作系统: 操作系统不会说你mysql 请求一次我就向存储要一次数据,他会把多次mysql发来的请求进行一次性处理,详情看linux i/o性能管理,涉及到队列深度以及条带深度问题。•存储: 现在目前的存储内存基本100T起步,这个空间就是用来缓存数据,当数据读取或者写入的时候,都会先缓存在内存里面,当业务读的时候会从缓存里面读,如果没有在从硬盘里面读。
如果没有缓存会出现什么情况,一个用户访问浏览器直接从存储的硬盘里面取数据,一个用户还好,估计也能1秒反馈,如果是100个用户,1000个用户,估计网站早就因为等待超时导致无法访问。
现在的业务动辄访问量上百万,上千万,每秒的请求在10w级别。使用上面的拓扑规划,2台服务器能轻松抗住数1万的tps压力,基本大部分普通的业务都OK。
缓存的处理
•浏览器:默认自动缓存。•服务器:根据开发人员定义缓存,比如基于内存的权限,一些业务的基础配置,启动的时候直接读入内存。•数据库:需要人为在配置文件里面定制各种缓存大小,根据数据库命中率,慢查询来进行优化。•*操作系统: *操作系统层面主要是深度的设置,由于现在各方面硬件性能都很强啦,基本不用设置。•*存储: *存储的缓存根据内存数量自动分配,唯一需要设置的地方是需要跟操作系统或者软件的条带深度设置为一样或者倍数。
更多小册内容请查看:
更多小册请关注: