HelloC先生 2014-07-09
第二章主要是讲网站的演化过程,即怎么样从一个小网站演化成一个大型网站的架构变化。
1. 大型网站的定义,大数据量和大访问量具备两者才能算大型网站。
2. 演化过程
2.1 单机阶段
一台服务器兼顾了web服务器和数据库服务器
2.2 双机阶段
将数据库服务器跟web服务器拆分,做到分摊负载,这个阶段基本属于web服务负载有多大,数据库服务负载就有多大。
2.3 web服务器集群
当高并发时web服务器明显表现不足,这时候需要将web服务器进行复制,即web服务器集群,通过负载均衡来进行访问的负载平摊,但由此产生session问题,后面详细说明。
2.4 数据库读写分离
当访问量提高时数据库的压力也会变大,一般写入操作少但是写操作带来的锁表对占据主导的读操作影响很大,严重影响网站的吞吐,所以进行数据库的读写分离。读写两库一般使用主从复制进行数据同步,不免有同步延迟发生。
2.5 存储读取的优化方案
为了弥补高并发时读取的延迟,采取各种弥补方案,如:
2.6 分布式数据库
为了满足不断加大的负载,采用分布式数据库,优点在于分布式数据库高并发,高容量及数据冗余容灾。大部分分布式数据库都是key-value形式,常见的一些NoSQL库都是具备分布式这种特点。不足之处在于它对事务的支持比较弱,所以适合弱事务情况。
2.7 主库的拆分
纵向拆分,通过业务区分来对库进行拆分,如用户、商品、交易可以分三个库。
横向拆分,单表拆分成同样结构的多个表,每个表涵盖一部分数据。
以上两种可以综合使用,纵向拆分以后再对业务单表进行横向拆分。分库带来的分布式事务、表链接、表键约束等问题。
2.8 web服务器拆分
根据应用进行拆分,缺点在于公用功能代码的维护。
服务化拆分,即分拆服务应用,所有的服务应用成一个分层,提供给web各种服务,服务层再各自请求各自的业务数据库。
2.9 应用间的通信
经常涉及到应用之间的通信,为了解耦应用而提供通信中间件,并且可以异步调用。
2.10 总结
2.1 属于初级阶段;2.2~2.4属于中级阶段;2.5~2.9属于高级阶段;后期阶段开始整体的安全、容灾、收缩扩容等。
3. 外传
3.1 集群后的session问题
先解释下这个问题的由来,当web服务器集群时,通过前端的负载均衡来引导流量到不同的web服务器,由于承接访问的web服务器可能不是同一台机器导致存储在前一次session中的信息在第二次访问时丢失,由此产生session问题。文章中介绍几种解决方案: