1、数据库集群
由于访问比较频繁,而且为了支持更多的访问,Web Server一般都使用了负载均衡的集群,但是对于数据库来说,每秒钟的请求不断增加,随着服务器负载的增加,
响应单个请求的速度越来越慢,如果库文件比较大,出现写操作的时候还会出现锁表时间过长等影响访问效率的事情。
比如现在我们的Web Server是Linux+Apache+Php的三台机器组成的集群,MySQL运行在2G内存的平台上。由于WEB的访问量在高峰的时候几乎满负荷运LoadAvg(就是一分钟之内处于Running状态的进程数量)都在10-20之间,反映出来就是大量的请求都在访问数据库的时候被挂住了,导致一个请求没有完成,下一个请求又进来,最后恶性循环。LoadAvg会在瞬间飙升至800以上。数据库那边就更糟糕了,LoadAvg达到 300多,数据库的线程非常多,CPU忙于切换线程状态,这个时候除非Restart MySQL,否则怎么都不会好。在对SQL语句优化完成后还是不能很好的解决问题,我们增加了一台数据库服务器,通过MySQL的数据同步机制,让两台数据库上的数据保持同步,修改了一部分只会发生读取操作的php程序,让这些程序连接另外一台数据库,算是把负载分离出去一部分,问题得到了初步的解决。但是后来业务做大,我们又增加了多台服务器,修改了很多程序,分离他们对数据库的读取操作,访问不同的服务器。

2、分离图片服务器
一个网站如果图片多了,那加载的速度可想而知。所以网站图片多的或者是专业图片网站一般来说都是将web服务器和图片服务器
分离。这样可以降低提供请求的服务器系统压力,并且可以确保不会因为图片问题让整个页面崩溃。

3、缓存
网站架构设计上Apache提供了自己的缓存模块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。
系统程序方面Linux上提供的Memory Cache是常用的缓存接口,可以在web开发中使用,PHP有Pear的Cache模块。
在数据库服务器与WEB应用服务器之间,还多了一层,即数据库缓存服务器。在SQLServer数据库中,就是利用这些缓存服务器来实现数据库层面的负载均衡,来提高数据库的查询性能。

4、web服务器
当高并发时apache出现瓶颈时可以通过增加服务器负载均衡,也可以使用CDN来分发内容基本不需要变的CSS、JS等。当然nginx、squid反向代理必要时可以使用达到需求。

5、执行效率
php本身效率的影响,如果想要处理本身带来效率低下问题,这个有一定的技术难度,可以重写源代码可以对php代码编译成相关模块(淘宝就是这么做的),也可以使用facebook提供的 HIHOP项目的开源代码。将PHP转化成C++这样性能可以很高的提高。
数据库优化方面,首先要减少不必要的请求,使用 explain对其进行分析。建立合适的索引,增加memcache。对搜索请求可以使用专用的 sphinx和lucence搜索引擎。

大雄在这里总结的都是理论性比较强的,可以慢慢在实践中遇到某个问题然后彻底解决,才能更深刻的理解网站系统架构的方方面面。深入进去可以慢慢成长并能搭建大型的系统,处理各种问题。学习这东西都是入门难,坚持住、努力着,稍加时日你一旦挺过来了,以后学习一切都是那么有趣和简单。