网站总体结构变迁过程
一.网站应用和数据库分离
二.增加页面缓存
1.前端页面缓存技术,nginx和squid等
三.增加页面片段缓存
1.页面片段缓存技术,例如ESI等
四.数据缓存
1.缓存技术,包括像Map数据结构、缓存算法、所选用的框架本身的实现机制等。
五.增加webserver
1.负载均衡技术(包括但不限于硬件负载均衡、软件负载均衡、负载算法、linux转发协议、所选用的技术的实现细节等)
2.主备技术(包括但不限于 ARP欺骗、linux heart-beat等)
3.状态信息或缓存同步技术(包括但不限于Cookie技术、UDP协议、状态信息广播、所选用的缓存同步技术的实现细节等)
4.共享文件技术(包括但不限于NFS等)
5.存储技术(包括但不限于存储设备等)
六.分库
1.数据库的设计、调优以及维护
七.分表、DAL和分布式缓存
1.分表更多的同样是业务上的划分,技术上涉及到的会有动态hash算法、consistent hash算法等
2.DAL涉及到比较多的复杂技术,例如数据库连接的管理(超时、异常)、数据库操作的控制(超时、异常)、分库分表规则的封装等
3.分布式缓存
八.增加更多的webserver
1.Apache的软负载或LVS软负载等无法承担巨大的web访问量(请求连接数、网络流量等)的调度了,这个时候如果经费允许的话,会采取的方案是购买硬件负载,例如F5、Netsclar、Athelon之类的,如经费不允许的话,会采取的方案是将应用从逻辑上做一定的分类,然后分散到不同的软负载集群中;
2.原有的一些状态信息同步、文件共享等方案可能会出现瓶颈,需要进行改进,也许这个时候会根据情况编写符合网站业务需求的分布式文件系统等;
在做完这些工作后,开始进入一个看似完美的无限伸缩的时代,当网站流量增加时,应对的解决方案就是不断的添加webserver。
这一步涉及到了这些知识体系:
九.数据读写分离和廉价存储方案
1.数据读写分离要求对数据库的复制、standby等策略有深入的掌握和理解,同时会要求具备自行实现的技术
2.廉价存储方案要求对OS的文件存储有深入的掌握和理解,同时要求对采用的语言在文件这块的实现有深入的掌握
十.进入大型分布式应用时代和廉价服务器群梦想时代
1.拆成分布式后需要提供一个高性能、稳定的通信框架,并且需要支持多种不同的通信和远程调用方式
2.将一个庞大的应用拆分需要耗费很长的时间,需要进行业务的整理和系统依赖关系的控制等
3.如何运维(依赖管理、运行状况管理、错误追踪、调优、监控和报警等)好这个庞大的分布式应用
4.通信、远程调用、消息机制等有深入的理解和掌握,要求的都是从理论、硬件级、操作系统级以及所采用的语言的实现都有清楚的理解
数据库架构策略
一.WEB应用和数据库部署在各自独立的服务器上
二.数据库服务器采用集群方式部署(比如Oracle的一个数据库多个实例的情况)
三.数据库采用主从部署方式
1.主从配置
2.读写分离
3.数据库反向代理
四.数据库垂直分割
五.数据库水平分割
1.余数分区
2.范围分区
3.映射关系区
前段框架部署
一.配置超长时间的本地缓存 —— 节省带宽,提高性能
1.强制浏览器使用本地缓存(cache-control/expires),不要和服务器通信。
2.通过更新页面中引用的资源路径,让浏览器主动放弃缓存,加载新资源 a.css?v=1.1
二.采用内容摘要作为缓存更新依据 —— 精确的缓存控制
1.利用 数据摘要要算法 对文件求摘要信息,摘要信息与文件内容一一对应,就有了一种可以精确到单个文件粒度的缓存控制依据了 a.css?v=3fds34
三.静态资源CDN部署 —— 优化网络请求
四.更资源发布路径实现非覆盖式发布 —— 平滑升级
1.非覆盖式发布 上线过程中,先全量部署静态资源,再灰度部署页面,整个问题就比较完美的解决了。
参考:
1:http://www.cnblogs.com/prime/archive/2012/11/29/Web.html
2:http://blog.csdn.net/zhangzhaokun/article/details/4711693
3:http://www.zhihu.com/question/20790576