一、两个网站的伸缩性目标
大型网站都是从小型网站逐步演化而来的,Google诞生的时候也只有一台服务器。中航网需要设计成一个能从廉价PC服务器演化成大型系统的架构体系。为了实现网站的伸缩性中航网要设计成以下两个维度的可分离:
1、服务器分离
每次分离都会有更多的服务器加入网站,使用新增的服务器处理某种特定服务。
2、业务模块分离
业务分离的粒度要可以非常小, 甚至可又一个关键网页部署一个独立的服务。
二、 网站伸缩性拓扑设计
1、硬件防火墙
选用华赛或JUNIPER系列硬件防火墙,主要作用是用来防DDoS和端口映射。
2、静态资源服务器
对于图片型等静态内容,前端缓存的意义重大。可以自己搭建CDN系统或租赁别人的CDN。推荐以租赁CDN为主,把更多的资金投入到后端的文件存储和数据库上。
3、负载均衡(HAProxy)
HAProxy性能优异,稳定性强, 自带强大的监控页面,并且支持动静分离。HAProxy+Keepalived已经实现了亿级/日的网站,并且在高并发的业务时间段也没有发生过宕机情况。
HAProxy在高并发的情况下比较消耗CPU资源,建议使用Dell PowerEdge R710。
4、Web缓存层
使用Squid作为中航网的Web缓存层。为什么前端已经有CDN缓存,还需要架设一层Web缓层?因为高并发高流量的项目,后端的NFS文件服务器的IO压力是巨大的,有时甚至会发生拒绝提供服务的现象。有了Web缓存层,可以起到加速后端Web服务及减小NFS磁盘IO压力的作用。
5、Web服务器
关于Web服务器的选择,Apache作为服务器,用于电子商务/电子广告/页游网站是非常稳定的,在8GB内存的标准配置下,抗并发能力非常不错的。许多公司的网站架构都是从一台Apache Web服务器发展起来的。
6、文件服务器
随着客户越来越多,I/O的压力也会越来越大。这个时候就该考虑分布式文件存储方案。在初期阶段宜采用DRBD+Heartbeat+NFS高可用文件服务器,维护方便,也不存在单点故障。
随着访问量的增大,后期可以采用MFS、Gluster。分布式文件系统是解决文件服务器压力过大的最终途径,但也存在缺点,网站功能越多,摊子越大,机器越多,维护起来越复杂。
7、Session的处理
Session数据默认是在各个服务器上分别存放的,Apache将请求发送到了集群中的另外一台机器,那么就会导致Session的丢失。所以要采用一台独立memcached服务器来存储整个网站的session数据。
不能不session放进mysql, 因为在高流量的网站中, 数据库的压力是非常大的,我们不能让session问题再增加数据库方面的压力。
8、数据库的减压
数据库架构采用一主多从,读写分离的方案,用LVS+Keepalived作为数据库的负载均衡器,计写通过程序上实现分离,前后台业务逻辑分离,针对后台的查询全部转到从机器上, 这样就算查询业务量很大也不影响主要业务逻辑。尽量做到以下几点:
l 尽量把用户往外面推,减小源站的压力
l 保证网站的高可用
l 保证网站高可扩展性
l 合理优化数据库
三、 实施图纸(PV百万级以下)
服务器用途 | 数量 | 型号 | 软件配置 |
负载均衡 | 2 | HP380 2Cell, 4GB | Nginx |
Web缓存 | 2 | HP380 2Cell,4GB | Squid |
Web服务器 | 2 | HP380 2Cell,8GB | apache |
数据库服务器 | 2 | HP580 4Cell, 32GB,2TB | mysql |
数据库负载均衡 | 1 | HP380 2Cell,4GB | Lvs+keepalive |
Session服务器 | 1 | HP380 2Cell,8GB | memcache |
文件服务器 | 1 | HP580 4Cell, 32GB,2TB | NFS |