blog优化项目的总结

服务化的意义

一个页面的输出=how,what ,when
how :如何输出
what:输出什么内容
when:什么时候更新(大部分是实时更新)

为什么采用java来实施

1. 代码复用问题
2. django ORM的问题

left jion和拆分成N条SQL(通过pk查询)

  JOIN 拆分成2条SQ
优点 1. 代码简单
2. 理论上响应时间更短
1.对数据库压力小。
 2.由于是组合关系,非常利于优化,比如message的photo可以走cache。
 3.支持后续数据库分表。
 4.通过并行加载可以缩短响应时间。
缺点 1. 对数据库压力更大
2. 数据耦合在一起,不利于优化
3. 不支持后续数据库分表
代码比较复杂

一些亮点

  1. 网络请求减少20倍。由于之前实现没有采用批量请求,导致一次瀑布流加载需要访问200次memcached,此次通过 BlogQueryService提供的批量查询一次性返回24条blog只需要一次网络请求,现在全站每秒的memcached请求量从之前的 18000降低到6000左右。
  2. python和java统一Blog模型。 未来需求开发上不用再纠结buyable,favorite_count和原发之间的关系,让工程师专注于商业本身,提高需求的开发效率。
  3. 高性能。基于dboss通过socket长连接方式性能优于通过http的调用。对比comment的实现,comment在mandala本 身的实现是非常快的,但通过http的方式会导致在python经常出现超过100ms的情况。dboss实现了连接池和自动重试,保证了 connnection的稳定。
  4. 高度优化的BlogQueryService。由于BlogQueryService业务职责单一,所以我可以对其进行高度优化,包括只返回最 小字段,采用小sql代替join等复杂sql,批量查询,并行加载,保证了接口的性能,经测试单条blog查询耗时在5ms左右(需8条SQL),批量 24条查询耗时在30ms左右,同时当mysql压力过大时候能无缝替换成mongoDB实现。
  5. 瀑布流和detail的数据保持一致性。虽然这点不是我们的目的,但如果可以低成本的做到瀑布流和detail的数据保持一致,对于用户体验还是有提升的。

猜你喜欢

转载自san-yun.iteye.com/blog/1958899