缓存分为:文件缓存和数据缓存
文件缓存.主要指的是静态内容(如HTML网页,图片,视频文件,脚本文件等),这些可以通过CDN分发处理,从而提高网站的响应速度.还可以通过varnish或squid缓存服务器来处理.
Varnish与一般服务器软件类似,分为master(management)进程和child(worker,主要做cache的工作)进程。master进程读入命令,进行一些初始化,然后fork并监控child进程。child进程分配若干线程进行工作,主要包括一些管理线程和很多woker线程。
数据缓存:可以使用redis,memcache等工具
客户端缓存
现在越来越多的图片、脚本、 css、 flash 被嵌入到页面中,当我们访问它们的时候势必会做许多次http 请求。其实,我们可以通过设置网页头部报文中的时间属性来缓存这些文件。
缓存时间(Expires)是通过头部(header)报文来指定特定类型的文件在浏览器中的缓存时间。大多数的图片、flash 在发布后都是不需要经常修改的,做了缓存以后再次浏览就不需要再从服务器下载这些文件,直接从缓存中读取即可,这样再次访问页面的速度会大大加快。
例如,在PHP 中设置 30 天后过期:
Header("Cache-Control: must-revalidate");
$offset = 60 * 60 * 24 * 30;
//gmdate — 格式化一个 GMT/UTC 日期/时间
$ExpStr = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
Header($ExpStr);
CDN加速
CDN(Content Deliver Network,内容分发网络),其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置多个节点服务器从而构成一个在现有的互联网基础之上的一层智能虚拟网络
CDN 系统能够实时地根据网络流量和各节点的连接、负载状况,以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决Internet 网络拥挤的状况,提高用户访问网站的响应速度。
静态文件缓存
静态文件缓存主要用到的是 Varnish/Squid,它在 Web 服务器前面添加了一层缓存,可缓存图片、js 等格式的文件,当访问这些文件时,会先从缓存服务器中查找,如果未命中,才会去请求Web 服务器。
数据缓存
数据缓存方面使用较多的是 Memcache 和 Redis。Redis 是一个 key-value 存储系统,
和Memcache 类似,但它支持更多的存储类型,包括 string(字符串)、 list(链表)、 set(集合)、
zset(sorted set,有序集合)和 hash(哈希类型)。 Redis 通常将全部的数据存储在内存中,
但它也支持持久化。目前Redis 通过两种方式实现持久化,1) 一种是使用快照,它是一种半持久
耐用模式,不时将数据集以异步方式从内存中以RDB 格式写入硬盘;2) 另一种是AOF,它是一种只能
追加的日志类型,将数据集修改操作记录起来。Redis 能够在后台对只可追加的记录作修改以避免无限
增长的日志。
Redis 支持主从同步。数据可以从主服务器向任意数量的从服务器同步,从服务器又可以是关联其他从
服务器的主服务器,这使得Redis 可执行单层树复制。由于完全实现了发布/ 订阅机制,使得从数据库
在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展
性和数据冗余很有帮助。
文件存储
提到图片存储,我们很容易就会想到共享存储,目前最容易的解决方式就是使用 NFS方式。 NFS 即网络文件系统,是使用软件方式实现的,对服务器端的要求很低,普通的 PC甚至都可以,通过在每台 Web 服务器上挂载服务器端开放出来的目录,实现了文件的远程存储和共享。NFS 是软件实现,当然目前也有许多专业的硬件存储设备可以选择,像 IBM、DELL 都有成熟的存储设备,这些设备基本是通过 SAN、 NAS 模式来实现的。在大型平台上,一般是采用分布式文件存储系统,像HDFS、 FastDFS 等都是不错的选择
NFS 的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。在本地的NFS客户端的机器看来,NFS服务器端共享的目录就好像自己的磁盘分区和目录一样。----NFS原理详解 - CSDN博客
参考资料
高性能电子商务平台构建:架构、设计与开发
网友评论