大型WEB系统架构设计的总结

总结一下自己对大型WEB系统架构设计的想法:

1. 一般大型WEB系统的两个共通点:

1) 海量的web访问(以亿为单位的PV)

2)系统需要保存海量数据,这些数据被频繁访问

2. 前端负载均衡考虑:

1)DNS负载均衡 —— 为一个DNS关联多个服务器的IP地址,当客户端发起DNS查询时,对于同一DNS,不同的客户端得到不同的服务器IP地址,从而达到负载均衡的目的。

 

DNS负载均衡有一个问题,就是没有考虑容错,如果后台的某台Web服务器出现故障,DNS服务器仍然会把DNS 请求分配到这台故障服务器上,导致不能响应客户端。即使及时修改了dns设置,还是要等待足够的时间(刷新时间)才能发挥作用,在此期间保存了故障服务器地址的客户计算机将不能正常访问服务器。

 

2)IP负载均衡—— 基于LVS的3种实现。

 

LVS-NAT:把用户请求报文中目的ip地址改为内网的web服务器地址后发送到内网的web服务器上。在把内网web服务器上响应报文的原地址改为NAT服务器的地址。据说LVS-NAT的扩充能力有限,当服务器结点数目升到20时,LVS主机本身有可能成为系统的新瓶颈,因为在LVS-NAT中请求和响应封包都需要通过均衡服务器(LVS主机/Director)。

 

LVS-TUN:均衡服务器把从客户端收到的报文再用ip进行封装,然后将报文通过IP隧道传递到其中某个web服务器上,真正的web服务器处理请求,并将response直接回复给发起请求的客户端。这种做法的好处是真正的web服务器可以不和均衡服务器在一个网络内,且不需要通过均衡服务器转发response给客户端,性能较NAT好,但需要真正的web服务器支持IP Tunneling(一般Linux都支持)。

 

 

LVS-DR:让均衡服务器和实际后端web服务器拥有相同别名的IP地址,均衡服务器只需要修改MAC地址,然后将客户端请求分发到不同的后端web服务器上。这种模式,客户的请求报文是通过均衡服务器,但响应的response就直接发往客户,且没有IP Tunneling的开销,所以在3种负载均衡方案中,效率最高,但必须要求均衡服务器(Director)与后端web服务器(Real Server)都有一块网卡连在同一物理网段上。

 

3. 前端异步处理:

1)异步servlet的引入——Web2.0,Ajax技术的大量使用,产生了海量的响应时间要求不高的数据请求。对于这种情况,采用JEE6的异步servelt可以解决这个问题。

http://taojingrui.iteye.com/admin/blogs/548624

2)Asynchrony Everywhere——通过JMS,分离前端和后端处理。

http://taojingrui.iteye.com/admin/blogs/1178231

4. 分布式缓存:

高访问的数据放到分布式缓存中,memcached、TT、hazelcast...

5. 数据库的考虑:

1)主从复制——这种模式下,需要考虑读写分离,也就是说让写操作要作用在主数据库上。

2)垂直分区——将不同类型的数据,存储在不同的数据库中,方便上层业务模块在部署上的分离。

3)水平分区——将同一个表的数据,通过某种算法分布到不同的数据库中。

猜你喜欢

转载自taojingrui.iteye.com/blog/1179175