php广告系统优化感想

来源:互联网 发布:淘宝和快递合作多少钱 编辑:程序博客网 时间:2024/05/02 02:48

广告系统优化感想

这几个月独自完成了处理接近500万会员的广告系统。

此广告系统不是一般的静态广告,而是每个广告都是个性化的,什么叫个性化,也就是根据每个人的特征投放不同的广告。广告处数不多,但是有些还是有点复杂的。

例如登陆弹窗,登陆弹窗里面的信息是好几个库里面的综合信息,业务都是分离的,这意味着每个人每次登陆要获取的广告要取比较多的信息,而且信息量还不少。

 

先说这次设计上不足的地方,这是我在这次设计上自己意识不足导致的:

1.   没有意识到多处广告都是在登陆的时候可以一次性获取的,所以,不应该分开了多次请求进行获取,这样子会加大请求数量,增加服务器压力,而应该一次性把此会员的所有广告返回,这样子减少了四五个请求量。

2.   大数据量的缓存不应该使用文件缓存,而应该使用内存缓存。而且内存缓存也应该设计过数据结构以后再进行存储,这样子可以有效的减少逻辑处理时间,增加php速度

3.   广告上线以后,有这几个bug都是因为0或者空array导致不停请求数据库,导致服务器挂掉,这是我自己的不慎导致的,要为这个负全责,幸好最后自己能够找出问题。

4.   没有充分利用已有资源,导致很多基础的东西需要自己重新实现,增加开发时间,以及性能问题

 

这次使用的服务器配置主要是:

一台Redis+一台php和mysql服务器

 

编码方式:

Oo

 

分类方式:

按模块划分,这样子我觉得可以灵活删除模块或者增加模块,不过一位长者认为这个不好,导致文件比较零散。

底层框架:

自己搭建了一个比较简单的框架(是否好,有待斟酌)

 

数据结构:

1.   以前的业务不能动,所以以前的业务数据都是固定的,只能通过自己转换数据格式,并使用自己方式自己存储。

2.   广告的数据都生成了php文件数据缓存,没有压力。可以考虑放到memcache里去。

 

缓存方式:

1.   会员信息:redis缓存

2.   广告数据:php数据原始缓存

3.   处理后,根据每个依据条件得到的逻辑缓存

4.   html缓存

 

瓶颈:

登陆弹窗,获取信息比较多,多个业务都是分开的,一个功能要去好几处的数据,所以使用了redis缓存

判断逻辑多,由于是个性化的,每个广告都要进行判断是否进行匹配,才给会员显示,所以后来加了逻辑缓存,以及html缓存。

 

 

 

项目后总结:

1.   一定要充分利用已有资源,减少自己开发压力,以及性能瓶颈

2.   优化不容易,每个小的点都有可能在大并发量下是致命的。

3.   项目最好能够在压力测试后才上线。

4.   需求一定要经过认真分析,自己能力是否可以达到才接,不要盲目的接需求。有时候,为了性能,可以牺牲一些需求。

5.   设计一定要充足才编码,不要盲目进行编码。

6.   写架构需要考虑很多东西,不然,很有可能导致全架构重写。

7.   Oo编程,在php里面最好使用apc,如果文件引入多,可以减少4~6%的cpu

8.   缓存最好不要使用过期时间,如果使用过期时间就失去了缓存了意义了。但是用不用过期时间还是根据需求而定的。

9.   不要盲目用函数,我这次项目就存在盲目使用intval和trim的情况了,虽然说这两个函数开销不算大,但是对于大并发量来说,每个小细节都可能达到神奇效果。

 

最后讲讲php的几个架构优化(借用别人的思路):

1.   前端优化,减少http请求量,例如js,css,小图(使用yslow分析一下)

2.   Mysql设计结构优化,语句逻辑优化,每句语句最好先explain一下,分析效率如何

3.   Php程序逻辑优化

4.   Html缓存,cms常用模式

5.   使用memcache、redis等缓存,并合理设计缓存结构

6.   使用php文件缓存,但需要注意io操作比较慢

7.   Apc,xcache等编码缓存

8.   实在没有优化余力了,减少前端视觉等待(例如增加响应前时间或减少响应后时间)

 

最后感想:

这次项目优化大体上完成了;

总的来说,这次项目对我来说还是有点挑战,出了几次问题导致总监都怒了,但是幸好最后发现把问题发现并解决掉了,这点我深深地表达歉意。

然后这次也让自己成长了,明白了好多技术上的,项目上的,公司上的,自己从未接触过的东西,也把自己懵懂纯真的思想现实化,了解了很多无可奈何的现实。

这次项目改了3次,几乎是整个代码重构,对于我这种有点代码完美主义的,还是觉得很必要的,每次重构都是一种进步,这个也让自己学到很多,感谢yx。

原创粉丝点击