基础框架:apache(PHP)
+ Mysql / IIS + MSSQL (最基础框架,处理一般访问请求)
进阶1:替换Apache为Nginx,并在数据库前加上cache层【数据库的速度是最大的瓶颈】 Nginx(PHP) + Memcache + Mysql (此时已经具备处理小型访问量的能力)
进阶2:随着访问量的上涨,最先面临的问题就来了:CGI无法匹配上Nginx的高IO性能,这时候可以通过写扩展来替代脚本程序来提升性能,C扩展是个好办法,但是大家更喜欢用简单的脚本语言完成任务,Taobao团队开源了一个Nginx_lua模块,可以用lua写Nginx扩展,这时候可处理的并发已经超越进阶1
一个档次了。 Nginx(nginx_lua or C) + Memcache + Mysql (此时处理个同时在线三四千人没有问题了)
进阶3:随着用户的增多,Mysql的写入速度成了又一大瓶颈,读取有memcache做缓存,但写入是直接面对Mysql,性能受到了很大阻碍,这时候,要在Nginx和Mysql中间加入一层写缓存,队列系统就出场了,就以RabbitMQ为例,所有写入操作全部丢到这只兔子的胃里面,然后屁股后面写个接应程序,一条条的拉出来再写入mysql。而RabbitMQ的写入效率是Mysql的N倍,此时架构的处理能力又上一阶层。 |----write------>RabbitMQ-------- Nginx(lua or c)----- |--------->Mysql |----read------>Memcache--------
单点调度故障解决: 集群的好处显而易见,但是有一个弊端就是单节点进行调度,如果节点出现故障,则整个集群全部都无法服务,对此的解决方案,我们使用keepalived来解决。Keepalived
for Linux keepalived是基于VRRP协议(VRRP协议介绍)的,请一定先了解VRRP协议后再进行配置。 keepalived可以把多台设备虚拟出一个IP,并自动在故障节点与备用节点之间实现failover切换。这样我们配置两台货多台lvs调度节点,然后配置好keepalived就可以做到lvs调度节点出现故障后,自动切换到备用调度节点。(同样适用于mysql)