看了不少文章,都是关注微观细节上优化,而我喜欢从大的往小的说。html
一、服务器集群、负载均衡web
毫无疑问,程序写得再好,只能最大利用一台服务器的性能,让单台服务器可以支持更多的人访问请求。但别忘了,单台服务器性能再高也是有限的,redis
带宽也是有限的,要想支撑更多的并发量,只能采用多服务器集群方式,每台服务器支撑必定数量的并发,这就是负载均衡概念。sql
负载均衡分为硬件负载均衡(如F五、dns负载均衡)和软件负载均衡(如Nginx/LVS/HAProxy),硬件级负载均衡转发到的必须是具备外部ip的服务器,而这台服务器又是一台软件负载均衡服务器,转发给内部局域网的多台服务器,最终接入web系统。mongodb
通常来讲,一台搭建有Nginx/LVS/HAProxy 的软件负载均衡服务器,支撑的并发数在5万之内(理论最高值),正常在一半(2.5万)左右,要考虑并发量在千万级,那就须要400台以上的具备外部ip的软件负载均衡服务器。数据库
二、web网站集群、缓存集群、session集群json
每一台最终用户接入的服务器都部署彻底同样的web服务,这些web程序虽然能够统一链接数据库做为数据全局共享,可是数据库链接操做影响了很大的性能,因此须要使用缓存数据提升性能,这些缓存数据可能分布在不一样的服务器中,为了保持数据的一致性,必须同步共享。我的数据保存在Session中也同样,每台服务器保存的Session数据也须要同步。缓存
这些数据的集群共享,已经有不少成熟的方案,好比 mecached session manager 等。服务器
三、数据库集群session
数据库服务器集群无非也是想达到负载均衡提升吞吐量的做用,传统的数据库如 MySQL /oracle/ sqlserver 等,能够采用分布式安装部署,经过分表分区技术达到负载均衡,可是,为了保护数据的一致性,只能均衡读操做的负载,没法均衡写操做的负载,也就是插入数据库时,仍是采用只在中心服务器插入,而后复制到其余服务器,这就致使了瓶颈出如今中心服务器的插入性能上。
四、内存数据库
内存操做比传统数据库采用的磁盘读写操做,速度上不是一个量级的,若是中心数据库采用内存数据库,那么将会很好地解决插入瓶颈的问题,大大提升并发量。
gemfire是比较成熟商业化的内存数据库,如今已经有了开源版本,听说12306就是采用它,缺点是开发文档比较少。
mongodb是开源的比较有影响力的内存数据库,基于类json格式结构数据库,比较靠近关系型数据库,用于统计查询过滤的系统是很好的选择。
redis 是纯key-value的缓存数据库,结构比较单一,用做缓存比较合适。
五、缓存数据集群
缓存数据能够减小数据库的频繁操做,提升性能,可是为了保证数据的一致性,这些分布在不一样服务器的缓存数据须要集群共享。
mecached 是不错的分布式缓存。
六、session集群
用户数据通常保存在session中,相似于缓存数据,Session数据也须要集群共享。
mecached session manager 是值得推荐的 集群Session方案。
七、独立文件存储服务器
说完了服务器集群,如今该说怎么优化单台服务器性能了。
下载文件,显示图片,这些都是占用很大带宽的资源,带宽不够,还会消耗cpu性能。
咱们把文件和图片都保存到独立的文件服务器里,这样web服务器就会只负责运算和传输少许文字内容,显示图片或下载文件转向文件服务器,显示图片或下载文件慢也不会影响后面的用户操做,增长高并发量。固然,文件服务器也能够多台镜像服务器负载均衡提升下载速度。
八、html静态化
不少数据库里的固定资源(好比新闻内容)能够查询出来后转成html页面,这样就不须要每次都去查询数据库,直接访问html页面提升速度。
值得注意的是,html静态化只适用于某些特定场合,不少系统是没法静态化的,不要抱以过高的但愿。
就这些了,可能还有些没想到的方面。
关注我写的开源框架 ErpCore & BigCore ,
下载源码到 http://www.8088net.com