首页 > 代码库 > 服务器的优化
服务器的优化
作为一个技术人员,不能范两种错误:一个是安全问题、一个是高并发的问题。前面我们说了安全问题,这里我们再来说说高并发的问题。 产品的新增用户越来越多,本来产品走势很好。但可能会因为不能承受高并发,影响用户正常使用功能,用户就都纷纷去用竞争对手的产品了。2015年初足记APP突然走红,但因为足记承受不了高并发,足足宕机一周时间。猪八戒网以前竞争对手很多,他们的人告诉我之所以他们能幸存下来,是因为几年前新闻媒体大量报道威客模式时,流量突然猛增,他们意识到了流行的趋势,在那期间大量增加服务器,而他们的竞争对手不以为然导致最后承受不了高并发,然后用户都来猪八戒网了。 要让程序能承受高并发,我总结了6个要点,大家可以参考。
1,做好数据库优化 后端程序最可能出现瓶颈地方就是数据库,数据库做好了优化能让程序速度快很多。 首先我们要选择好MySQL引擎,InnoDB的优点是事务处理,如果是一般的读写建议用MyISAM。 要做好MySQL索引优化,如果MySQL没有索引,每次查询都是全表扫描,数据量大后性能就差,可以用explain来分析MySQL语句的性能。 做好表结构的优化,适当用一些冗余字段从而减少程序SQL语句出现join查询的情况, join查询的性能比较低, group by查询的性能更低,不要在访问量大的页面使用group by 查询。 设置好mysql的配置, query_cache_*相关的配置项可配置查询缓存, key_buffer可配置索引缓存, thread_cache_size可配置线程缓存, tmp_table_size配置临时表的大小。 可以用mysqlreport这个工具来分析mysql的健康状况。
2,使用缓存 用MemCache、Xcache等可以对数据库查询结构进行缓存,从而降低数据库的压力。 PHP可以开启Opcache模块,对Opcache进行缓存Apache,Nginx,Varnish等运行环境都有缓存模块,数据不经常更新的页面可以开启运行环境的缓存。 还可以根据HTTP协议将缓存设置在用户的浏览器。
3,使用队列 对于一些耗时的程序可以使用队列处理, NSQ,Gearman,Redis都可以做队列。 使用队列可以减轻服务器的负载。 举一个应用场景,比如有一个招聘产品用户上传简历后要对简历进行分析,要提取简历的文字,要生成简历截图,这是一个很耗时的工作,每次分析简历都可能需要1分钟。 在不用队列的情况下,如果有1000人同时在上传简历,那么就有1000个进程同时处理简历,每个进程都要花1分钟,此时服务器负载会十分高,内存和cup也不够用,服务器会宕机。 而如果我们使用队列,让简历分析排队来处理,一次同时只处理1、2份简历,服务器负载不会那么高。用户上传简历然后往队列里面加一个任务,再给用户显示一个“简历分析中”的页面,让用户等待一会儿, 这个页面每隔几秒钟会调用接口查询简历是否分析完成,如果分析完成页面就显示分析结果。 用了队列后 当访问量大的时候 服务器并不回宕机, 可能只是用户等待分析结果的时间会长一些而已。 12306网站上面购买火车票时下订单的时候也使用了队列。平时都能快速买到票,但在春节高峰期的时候下单等待时间能让用户等半个小时,但他们如果不用队列是支持不了这么大量的高并发的。
4,搭建分布式环境 当访问量大到一定程度时,一台服务器不能支持访问,需要多台服务器,这时候需要搭建分布式环境, 可以用Nginx ,LVS等做负载均衡来搭建分布式环境。 可以用Docker封装我们的应用,这样每次要扩容时启动Docker十分的快。 我们的数据库也可以做分布式的主从读写分离。
5,压缩文件 Apache,nginx运行环境有压缩模块, PHP可以设置配置项zlib.output_compression进行压缩,前端js,css文件可以用工具压缩减少体积 。图片可以用css sprite的方法切图,将多张图片合并在一张图片上提高加载图片的速度。 对文件做上述压缩后,用户访问使用流量减少,用户访问速度更快。
6,使用云计算 支持高并发有一个最简单的方法就是使用云计算。分布式环境,分布式数据库这些环境云计算的服务商已经搭建好了,我们只管用就可以。而且云计算是弹性计费的, 用多少付多少,不像购买服务器,一年没有多少流量也要不少的服务器租赁费,使用云计算,我们不用把重心放在服务器的搭建和维护上,而可以专心开发自己的产品。阿里云,青云等都是IAAS类的云,他们提供的只是基础服务,使用它们我们还是需要花精力来维护操作系统。大家可以试一试新浪云SAE,它是PAAS类的云,提供的是程序运行平台,我们连操作系统都不用维护。 我们要对自己的系统能承载的并发量进行测试,要知道自己系统能承受多大并发, 并对系统流量进行监控, 当发现流量变大,快到达最大能承受并发量时应即使扩容。 测试并发量可以用压力测试工具(如 ab,wrk,webbench等)。 可以用OneAPM 对程序性能监控,实时知道应用的流量。 关于服务器优化的知识很多,本书由于字数限制只能做简要的介绍,大家还需收集其他资料来学习或者学习优才学院的web全栈课程,优才学院的CEO伍星老师也是本书作者之一,他曾是开心网创始团队成员,亲手部署过上千台服务器,处理过上亿的高并发,他们的全栈课是能真正学到如何处理高并发的,我也在全栈课里面为大家讲几节课。
服务器的优化