一、简介
理解大型网站架构的考虑和权衡,同样有助于我们建立小规模网站时做出决策。设计大型Web系统,有下面几个关键原则,多个原则之间往往存在着权衡取舍关系。
- 可用性 系统可用时间,大型电商网站,一般要求永久可用,系统不可用意味着损失大量交易和金钱。高可用性离不开冗余和备份。
- 性能 高相应速度,低延迟,影响用户满意度
- 可靠性 多次请求同一个数据,返回的结果应该是一致的。如果写入数据,应该保证数据不会丢失
- 伸缩性 伸缩性有多种不同的指标。增加存储容量有多容易;提高并发访问量有多容易;支持更多事务处理有多容易;
- 可维护性 维护和更新系统的难度;诊断系统故障的难度;运维难度;
- 成本 开发时间;部署运维成本;硬件成本;
二、伸缩性
提高网站伸缩性的典型方法
读写分离
- 读写的速度有明显差别, 承受的压力不同,独立优化速度
- 读数据不会破坏数据一致性,但写数据有可能破坏数据一致性
分区
冗余
负载均衡
如果系统只有几个节点,轮询DNS是更有用的做法,因为负载均衡器会提高成本,同时给系统带来一层额外的复杂性。当系统迎来高负载情况,负载均衡器会移除访问慢的节点,系统资源利用率下降;因此,负载均衡器需要和系统监控同时进行。
HAProxy 一个广泛应用的开源负载均衡器
待补充
三、性能
提高网站性能的典型方法
缓存 缓存将经常访问的数据,提前保留一份。下一次需要时,先检查缓存,缓存命中则直接读取缓存数据,提高访问效率。计算机系统,缓存无处不在,从硬件到操作系统,从浏览器到Web服务。
Memcached 一个开源分布式缓存系统
代理 代理将多个请求合并成一个请求,通过减少请求次数提高访问效率。
Squid 一个开源代理软件
索引 索引在写数据时额外建立索引,在读数据时通过索引结构,快速定位,加速读数据的过程。索引实际上是用更改的写代价来换取更低的读代价。索引结构广泛用于数据库系统。
Berkeley DB 一个开源数据库,适合学习索引技术
队列
当系统访问量到达一定规模时,一个写数据请求的慢速会影响其他读请求。这时候我们需要异步访问系统,用了提高系统性能和可用性。常见的实现方式是队列。
四、总结
这里总结
更新于2016年9月20日凌晨 TODO:添加图片,补充细节