因为做过一个微投票的组件,在早期前辈的设计下采用数据库外键限制,代码中循环处理的方式,本次活动从功能上受到一些限制,再加上参与活动的人员过多,候选人已经达到2000多人,投票人更是达到20多万,让投票出现了比较高的并发,拖垮了服务器和数据库,让服务器宕机了!!!多么悲剧!哈哈哈。经过总结,现在提出了如下几个方案
1.从服务器上考虑,图片压缩缩略图,设置缓存cache时间,设置nginx连接数,并发数
2.从php角度来讲,减少不必要的逻辑代码处理,增强php代码可维护性,可读性,考虑效率,内存,时间,空间等问题,找到处理时间长的短板,并优化它
3.从数据库方面考虑,减少表锁,增大冗余,定时清理和整理。如果能用云数据库尽量用云数据库,如果能用memcache redis尽量都用上,然后减少数据库交互查询,避免数据重复读取和写入。
4.从web访问层考虑,js css img能采用外部第三方库CDN就用CDN库 ,如果不能就采用自己的CDN并设置缓存和压缩等等,合并请求,让请求更少,减少nginx压力
5.从前后端配合考虑,可以拆分逻辑代码和静态数据,通过静态页ajax异步获取data的方式加载页面,让页面首先出轮廓,避免用户因为打不开页面而重复刷新 增大nginx压力
6.多用前端js完成需要的功能,来处理php端需要的功能,让大部分功能在客户端完成,避免服务器压力