最近,在市场部门的努力下,公司的产品终于赢来一大波用户的涌入,接踵而来的有对网络服务的压力,因为是单台服务器在跑,并且用户都是在下午至晚上的高峰期访问,过度集中,导致服务器压力巨大,有的功能甚至不能正常使用,因而很有必要针对当前状态做优化。
累计用户数
一、 解决思路
产品的主要载体是一个 APP,但是因为集中引爆使用的是内嵌的 H5活动页面,经过高峰时段的检测,服务的压力主要表现为 数据库的 cpu 占比超高以及 Apache 服务进程过多,再进一步分析:
1. H5 页面需要建立过多的网络请求获取资源;
2. H5 页面的动态数据获取对数据库访问次数过多;
待解决的方式有:
1. Web 服务器采取更加高效的服务器,如 apache 更换为 Nginx 【待定方案,短期服务器更换不便】
2. 所有的静态资源在不更换存储服务器的情况下,采取 CDN 加速 【采纳】
2.1 H5页面的 css、js、image 文件可以直接才用 CDN 域名更换;【采纳】
2.2 已经上架的 APP ,有个讨论区和资讯内容的图片因为地址是本地拼接的,不可以动态更换地址,得专门针对同一个域名请求的图片数据做重定向【采纳】。
3. H5页面的动态数据获取功能代码优化,减少数据库连接数 【采纳】
4. 数据库主从备份,公司内部运营人员统计数据走从服务器,减少对主服务器的压力【采纳,具体参考 《数据库优化之一 -- Mysql 主从备份》】
二、解决步骤
1. H5页面静态资源加速
因为服务器用的是阿里云的 ECS 服务器,所以简单入手先采用的是阿里云的 CDN 服务
服务器情况 流量包价格具体的配置过程官网都有挺多说明,入门手册 ,我就不一一叙述了。
结果就是,本来是 www.abc.com下访问的资源也可以通过 cdn.abc.com 来访问,这样将 H5页面里边所有的 js,css,image 文件地址都更换为 cdn.abc.com 下来访问即可。当第一次访问资源时候需要占用 主服务器的性能,然后就会缓存到CDN 服务器下,接下来的请求都不需要和主服务器打交道,大大减轻 H5页面的静态资源访问对服务器产生的压力,并且能以更好的本地CDN 网络来服务用户,提高下载速度。
2. APP 内讨论区和资讯文章的图片素材加速
刚刚提到了,APP 内的通过 API 请求下来的图片都是相对地址的,然后APP 本地拼接 URL 再来请求资源,就导致了无法在API 直接输出 CDN 地址来达到加速的目的。因而才有了 Apache 的 mod_rewrite 模块的重定向功能,将网络请求的图片资源做重定向,定向到新的 CDN 地址,就可以实现加速。
这里说一下为什么不全站内容都做重定向,因为 API 的内容都是动态输出的,得保证实时性,所以坐重定向后还是要动态计算得到内容输出,就没有必要画蛇添足了,只有图片资源是固定 URL 的,将其添加到 CDN 服务可以有效的减轻服务器的响应压力。
Apache 服务器打开 mod_rewrite模块后,是通过读取根目录的 .htaccess文件内容来实现url 请求的匹配规则,具体操作步骤学习入门可以参考链接:
https://devops.profitbricks.com/tutorials/install-and-configure-mod_rewrite-for-apache-on-centos-7/
.htaccess 配置上图是我在服务器的配置指令,只针对图片来坐重定向,下面检测效果,所有的图片请求都可以正常的转到 CDN 地址去访问,bingo!
效果3.数据库的连接数优化
这个就关系到 H5页面的代码编写的优化了,没办法具体交待,一句话总结就是:动笔前多思考。
三、总结:
CDN 服务器开启前后对比,看来代码还有有很大的改善空间,但起码流量上判断,对服务器的静态资源获取压力已经减少了许多。
CDN 服务开启前和后对比,CPU 压力变化不大,流出带宽变化大,都跑 CDN 流量去了但是也有个弊端就是,CDN 流量开启后就像脱缰的野马,两天半就跑了25G 多的流量,平均一天10G,每个字节都是钱呀,看着心疼。
流量统计
网友评论