架构系列一:大型项目架构演进过程

作为一名程序员,单单只会Coding是远远不够的,想要走的更高更完,还必需懂Coding之外的其他东西,如架构设计,系统分析等,今天就架构这块,谈谈自己的理解

一、单机时代 

单机时间的应用,都很简单,一个应用,一台服务器,就搞定了,大至的架构设计如下图 
 
用户通过Internet访问某个网站,经过DNS服务器解析,找到对应的服务器地址,请求服务器,响应用户请求的信息 
优点: 
1.部署简单 
2.维护方便 
3.成本低 
缺点: 
1.DNS服务器或应用服务器宕机,整个网站不可访问

单机的系统架构,缺点很明显,现在应该不会有哪个企业用这种部署方式,如果有,那只能说呵呵了。单机不好,那就多部署几个应用嘛,用DNS去扩展,因此就用了下面这种架构设计

二、基于DNS的集群部署 

先看图,DNS的集群部署如下 

在DNS服务器上,配置了一个域名对应三个IP(和Tomcat服务器的IP对应),同时部署了三台Tomcat服务器,这样用户发送请求,经过DNS解析,找到其中一台Tomcat服务器来响应用户的请求,是不是也达到了“集群”的效果 
优点: 
1.部署简单,只需要在DNS服务器上多加几条映射关系,再扩展几台应用服务器就可以了 
缺点: 
1.如果有一台Tomcat服务器宕机,经过DNS解析,正好解析到这台服务器的IP,就无法给用户提供响应 
2.服务器之间不能实现负载,可能会出现这种情况:一台服务器处理很多用户的请求,但是其他服务器却是空闲状态

这种集群方式缺点也很明显,Tomcat应用服务器之间不可以自动切换,如果一台服务器宕机或负载太高,有没有办法可以让服务器之间自动切换,分担负载呢,这必须有啊,请看下面这种基于Nginx的集群部署

三、Nginx集群部署 

Nginx集群部署的架构图如下 


 
这种架构,DNS只配置一条记录,该条记录的IP,是统一对外的IP地址;同时增加了Nginx做反向代理,所有的请求,都必须经过Nginx处理,根据权重负载等,Nginx会自动计算,选择一台服务器处理用户的请求 
优点: 
1.简化DNS配置 
2.安全性,所有请求都经过Nginx,避免用户直接与应用服务器直接通信,Nginx与应用服务器之间使用内网地址通信 
3.如果某台应用服务器宕机,Nginx会自动将这台服务器从集群中剔除,并指定另一台服务器作为响应,宕机的服务器恢复后,Nginx会自动将它加入到集群中 
缺点: 
1.部署复杂 
2.用户Session共享问题,例如目前使用Tomcat1服务器响应用户请求,突然宕机了,这时Nginx会切换到另一个服务器如Tomcat2继续响应用户的操作,但是用户已经登录,Session信息保存在Tomcat1服务器上,Tomcat2上没有用户的信息,因此需要解决Session共享的问题,只要是做集群,都会碰到这个问题 
3.Nginx万一宕机,整个应用将无法正常工作

以上这种架构,已经可以满足大部分小型企业的需求了,但难免Nginx会有宕机的可能,如果宕机,整个应用就完完了,实际在企业中,老板怎么可能容忍因宕机应用无法正常运作的事情发生呢,请看下面的另一种架构

四、keepalived+Nginx集群 

在介绍之间,先看下keepalived是做什么的

keepalived介绍: 
Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点

keepalived+Nginx集群架构图 


 
这种集群架构,在Nginx层,加了keepalived,都配置成相同的虚拟IP,保证nginx的高可用性,如果其中一个Nginx宕机,keepalived会自动检测到,并切换另一台Nginx处理用户的请求 


Nginx号称最大可抗并发数为10W,这不小了,已经可以满足大部分中小企业的需求,当然,Nginx毕竟也有上限,超出Nginx上限怎么办呢?此时就得LVS/F5登场了,LVS是Linux Virtual Server的简称,实施在操作系统层,F5性能比LVS更高,实施在硬件层面,当然,也比LVS昂贵

五、LVS+keepalived+Nginx集群 

LVS+keepalived+Nginx集群架构图如下 

 


 
纵向上增加了LVS,通过LVS来扩展多个Nginx,结合keepalived保证nginx的高可用,通过nginx来做负载均衡,基本上可以满足99%以上企业的需求了,那剩下的1%的企业,像淘宝,腾讯,百度这种级别的,超出nginx上限怎么办呢,这时候又回到了问题的开始,水平扩展NDS服务器,增加DNS轮询,想想淘宝,腾讯不可能只有一台DNS服务器吧,一定有很多台,这样才是解决性能问题的根本

电商架构图:

原文链接:http://www.noobyard.com/article/p-uolqlupe-z.html