关于web系统扩展的几点记录

11月 1, 2008 – 2:27 下午

注:本文只谈系统的可扩展点,并不涉及相关技术的具体实现。

可扩展性的定义特性:
1.系统可以容纳使用率的增加,可以简单的理解为用户数的增加
2.系统可以容纳数据集的增加。
3.系统可维护。

误区:

1.可扩展不是指原始速度,性能和可扩性是不同的问题
2.可扩展性与是否选择某种语言无关。
3.可扩展性与特定的技术是无关的。

扩展的几个方向与要点:

一,扩展硬件平台
硬件扩展大体上可以分为两类:
1.垂直扩展:
原理:
很简单当机器性能不足时买一台更大,更强,更猛的机器代替。
优点:设计容易实现,只需在本地机器上构建系统。一定体系稳定,只要换好的机器就行。
不足: 成本不是线性增加的,可能是指数级的。尽管你很有钱,不担心钱的问题,不过由于单台机器的能力有限的,那么这种模型最终会受到限制。
2.水平扩展:
原理:不断的增加更多的硬件,不同垂直扩展的是增长不需要超级强劲的机器,只要很多常规机器。
优点:能够混用不同服务器并且能够配备最便宜服务器
的应用程序,将一直保持成本上的优势。
不足:添加减少机器可能比较容易,但不会过于简单.你将要花费大量的管理成本。
3.冗余:
不管是垂直扩展还是水平扩展,机器都有可能发生故障,这样的话给机器做完全热备是必要的,当一个组件故障时,其他组件自动接手它的工作。

二,负载平衡

1. DNS负载平衡
这个最简单的平衡方案,同时存在不少的问题.
1)做法:在 DNS中给一个域添加多个IP,这样请求域名解析的时候分随机的返回不同的IP地址实现平衡的目的
2)问题: 更新dns的速度比较缓慢,如果要移除一台坏的机器比较的困难了,另一个问题就是无法实现精确控制,也不能定制化平衡。总得来说DNS负载不是一个好的方案。

2.VIP:
这个名词比较有意思,记得有一回去yahoo,技术人员与我谈代码发布时谈到了VIP的一个问题,我就有点乱了,VIP===》贵宾?。还冒出了MVP之类的概念.:
VIP是虚拟IP的意思,一个VIP是由负载平衡器提供的一个IP地址,背后其实有多个实际的IP地址在处理请求.负载平衡器也被称作虚拟服务器。

3.硬件方式的负载平衡:
1)别名:web交换机,内容交换机,内容路由器.
2)特点:非常的昂贵。

4.软件方式的负载平衡:
1)前一段时间才知道lvs(http://www.linuxvirtualserver.org)是一个给linux打上内核补丁的负载平衡操作系统,不过lvs是为了处理极为复杂的负载情况,对于一般平衡就没有必要。

2)第四层与第7层负载平衡
注意这个第字。刚接触的时候不理解,直接看成四层,与7层。呵呵,7层比4层多三层当然7层要牛很多。第7层的确比第4层更灵活,但原因绝对不是7比4大.第4层与第7层指的是网络分层.
传统的负载平衡是在第四层处理的,用户的请求来源与目标IP地址与端口在这一层被捕获,有了这些信息就可以把这个连接引导到后台正常的端口上。最简单的第四层负载采用的是循环算法(round robin)。就是把请请求
循环发送到生产服务器上。除了循环之外,也可以做随机算法。在两种方法中都可以加上权重,对权重比较高的生产服务器,只要有队列中重复出现几次那么被分配到流量的比重就越高。
第7层负载比第4层负载出现的晚,它比第4层更加易活。因为第7层负载平衡器检测HTTP请求,这能够查看请求和请求的标头,并将这些信息纳入平衡策略的考虑中。这样就可以做基于URL平衡,可以确保对特定资源的所有请求都被调度到同一台机器上,这样的方便在同一台机器上做缓存,提高缓存命中率。这就是比第四层优秀的原因之一.
听说apache的mod_rewrite模块加上一些脚本就可以做第7层的负载,具体我没有实施过,不过试过用ngnix做过第4层负载平衡,十分简单:)

三,扩展Mysql
1.可以从主从(master-slave)复制方面考滤提高并行读写性能,当然选表的存储引引擎也很关键,MyISAM能非常快地进行读写操作,但是无法同时快速度的读写操作,而且也不支持事务操作,现在好像比较流行InnoDB。不过innoDB不提供fulltext索引,innoDB的占用的硬盘空间大约会是Myisam的3倍左右。

2.数据库分区也是数据库扩展的重要因素。不合理的数据库分区将会影响以后数据库的扩展.

四,缓存扩展
在缓存的选择上我觉得分存式的缓存memcached(http://memcachedb.org/)是一个无可挑剔解决方案,可以解决大多数的问题

五,存储系统的扩展:
 目前只用过NFS,NFS在实际生产过程中还是存在很多不足。请各位有识之士,留下宝贵意见.!


Post a Comment