批量的生成大批有相互关系的静态页面遇到性能瓶颈


场景:
视频id:vid
专辑id:pid
单视频地址:abc.com/vplay/vid.html
专辑地址 abc.com/pplay/pid/1...3.html
队列:starling
逻辑:
1.专辑信息改动,所有专辑地址需要重新生成一次页面
2.单视频改动,除单视频地址重新生成页面,还需找到相关所有包含该视频的专辑地址也要重新生成一次页面(专辑有个字段vidstring:vid1,vid2,vid3)
问题:
1.队列堆积的时候不好控制(准备换队列,可以设置优先级的)
2.涉及专辑集数很多的情况,生成播放页需要大量的时间,导致新上线的视频播放页生效慢。
3.极大浪费服务器的资源

求相关的优化方案。

讨论 php 性能

苦逼少年-乱码 12 years, 10 months ago

如果很明确就是页面生成太耗时间导致的,建议你从以下几方面入手分析问题的原因:
1、页面生成是否可并发进行。你用队列来实现说明有次序的问题要考虑,但是不是所有的生成操作都需要一个一个地顺序处理?数据一致性有没有可能通过其它方式来保证?如果页面生成可以并行化,那么伸缩性就可以大幅提升,碰到性能问题就不会这么窘迫了。
2、页面生成的逻辑是不是有调优空间。既然你已经使用了memory cache,那生成一个页面差不多应该在几十ms量级,做个profiling看看在哪里消耗了过多的时间。如果大量的页面需要频繁更新,那就要考虑是不是应该放弃静态页面,改用动态页面来实现。因为静态页面的主要好处是便于CDN缓存,但是页面更新太频繁CDN的效率也会降低,何况视频网站主要成本在视频的带宽占用,页面上CDN的收益不高。

擦屁股老抠穿纸 answered 12 years, 10 months ago

Your Answer