扩展Web应用程序
一.概念
简单的来说,如果一个系统可扩展,那么你可以通过扩展来提供系统的性能。这代表着系统能够容纳更高的负载、更大的数据集,并且系统是可维护的。扩展和语言、某项具体的技术都是无关的。扩展可以分为两种:
1. 垂直扩展(stade up),通俗的说就是将某台单一的机器的性能提升的更高,如添加内存、更换更强的处理器等等。
2. 水平扩展(out),通俗的说就是添加新的机器。
对比可以发现,水平扩展比垂直扩展有更强大的扩展性,可以说是“无限”扩展,毕竟单台的机器的性能总是有限的,硬件的技术发展还赶不上web的发展。但同时,水平扩展也来了更高的维护成本。实际中,需要根据具体情况来寻求一个平衡点。
二.冗余
机器总可能会发生故障,而唯一的保证故障状况下服务依然可用的办法就是由多个硬件备份。备份可以分为热备份和冷备份,注意的区别在于数据服务是否在线,数据在线服务的同时进行的备份成为热备份。例如将mysql服务器关闭,然后拷贝数据文件到备份位置,则是典型的冷备份行为。
三.负载均衡
当我们使用了水平扩展之后,我们开始考虑新的问题了,如何将大量的请求“均衡”到我们的扩展机器上呢?
两种负载均衡模式:有状态(如有携带session)和无状态
两种负载均衡方式:硬件均衡和软件均衡
硬件均衡比较简单,通常接入一个设备即可,之后的均衡和故障检测等等都由硬件自动完成。成本较高。
软件均衡则是通过软件来转发各种请求,更加容易的定义转发规则,有较多的开源产品选择。
第四层和第七层
经常在负载均衡中看到第四层和第七层这两个名词。它们实际上是指它们各自工作时所处理的网络协议的层数(使用ISO模型)。
第四层是数据传输层,包括TCP和UDP,第七层则是应用层,通常web中为HTTP应用。如Apache、nginx等支持第七层的均衡,而且可配置性都相当强大,能够适应较复杂的应用。例如可以简单的将流量分担到各个负载机上,也可以定义一套业务规则,将应用划分为不同的池,每个池处理某些固定规则的URL。
对比软件均衡与硬件均衡,可以发现它们各自的优缺点:
1. 硬件均衡成本比较高,软件均衡多数可以使用免费的开源软件来实现。
2. 硬件均衡对于故障检测比软件均衡更加强大、快速。在采用硬件均衡时,一旦某台机器出现故障,马上就可以检测出来并立即屏蔽。
3. 硬件均衡可以快速的添加机器(接入硬件接口即可),而软件均衡除了添加机器外还要添加一些配置信息,以将某些流量导入到新的机器。
4. 软件均衡可以定义非常复杂的业务规则,而硬件均衡在这方面相对较弱。
5. 多数的硬件均衡方案都有捆绑附加的一些服务如HTTPS加速、DOS防火墙等等。
还有一种比较流行的方案:DNS解析。这种方式对解决用户分布在不同地理位置、不同网络的情况有着相当好的效果,每个用户都可以根据自己的网络得到一个较快速的访问IP。缺点也比较明显:DNS更新缓慢,对于实时性的均衡几乎没有什么作用,因为DNS的更新往往需要一两个小时,甚至一两天。
四.使用缓存
使用缓存将某些实时性要求不高的服务结果缓存起来是大型应用解决方案的一个共识,合理的使用缓存将极大的改善应用体验和性能。
常用的几类缓存:
缓存数据:memcached memcachedb
缓存HTTP请求: squid,varnish