网站架构的演变:
1,从一个小网站开始:一台服务器,只有文件和数据库。
2,数据服务与应用服务分离:应用服务器更好的CPU,数据服务器更快更大的硬盘。动静态资源分离。
3,使用缓存:1,客户端缓存(浏览器,)2,前端页面缓存(squid)3,页面片段缓存ESI(Edge Side Includes)4,应用服务器本地缓存 5,远程分布式缓存
4,服务器增多,使用服务器集群和负载均衡。
这会引来Session的管理问题,有以下几种方案解决:1,Session Sticky,就是在负载均衡服务器(load balancer)上保存Session,但是如果服务器重启,则Session都会清除掉,不够稳定。2,Session Copy,就是在各个应用服务器上复制并保存Session,这适用于服务器机器数目较少的情况,但会占用应用服务器的带宽和内存。3,Cookies,每个用户访问时自带Cookies,但是Cookies自身长度有限,携带信息有限,并且会消耗服务器外部带宽,不够安全,当请求数目过多时,影响应用服务器性能。4,在应用服务器后面加个Session处理服务器,适用于Session数目大和服务器充足的情况。
5,当数据库读性能下降时,实施读写分离,将读操作引向slave数据库。数据库负载均衡。
6,反向代理和CDN加速,解决不同地区的访问速度问题。
7,使用分布式文件系统,如:Lustre,HDFS,GFS,TFS,FreeNas等。
8,数据库分库(垂直切分),可按照功能模块等分为用户数据库,产品数据库,交易数据库等。
当单个数据库的性能达到瓶颈时,进行水平切分,将某个数据表如User表分开为多个结构相同的数据库。水平切分会碰到SQL的路由问题,分页查询,跨库跨表的Join等问题。可以使用分布式缓存方案解决部分场景使用,如Memcached,Redis等
图片来源http://www.codeceo.com/article/web-artch-perform.html
Web缓存的规则:
Cache-Control: public
头的设置使其公有。HTTP 1.1标准兼容的缓存服务器可以使之缓存。Cache-Control
响应头信息,让网站的发布者可以更全面的控制他们的内容,更好地处理Expires的些限制。
Cache-Control
有用的响应头包括:
max-age
, 除了仅应用于共享缓存(如代理)。must-revalidate
,除了只能应用于代理缓存。如:Cache-Control: max-age=3600, must-revalidateLast-Modified
头信息通信确定文档最后的修改时间,如果缓存有内容存储,会包含
Last-Modified
信息的,辅助
If-Modified-Since
请求,我们可以询问服务器内容是否改变了。
HTTP 1.1引入了一个新的验证器,称为
Etag。
Etag
是每次展现内容改变时候由服务器生成的唯一标识符,由于服务器控制
ETag
如何生成,当缓存发起
If-None-Match
请求的时候,如果
Etag
匹配,就可以确定展示内容其实是一样的。
典型的Web资源 可以一个Web页,但也可能是JSON或XML文档。服务器单独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端,以下是服务器端返回的格式:ETag:“50b1c1d4f775c61:df3”客户端的查询更新格式是这样的:If-None-Match : W / “50b1c1d4f775c61:df3”如果ETag没改变,则返回状态304然后不返回,这也和Last-Modified一样。测试Etag主要 在断点下载时比较有用。
"/index.html"
, 则要一直使用这个地址。Cache-Control: max-age
头信息的值设大一点。max-age
或过期时间实现缓存。Last-Modified
值。另外,当你更新站点的时候,只要上传改动的那些文件,而不要把整个站点都覆盖过去。