Cydu's Blog Keep it Simple & Stupid!

[WeiDesign]微博计数器的设计 velocity

非常感谢@NinGoo 的邀请, 昨天在 #Velocity中国大会# 上做了一个分享: 微架构设计之微博计数器服务, 主要讲的内容还是微博计数器的设计思路, 但是侧重点方面和之前的Blog略有区别.

Blog侧重更细节的一些优化和考量,因为大家可以有更多的时间 和我来做资源计算的算术题. 技术交流的时候相对来说稍微宏观一些, 随着产品的发展, 架构一路遇到了哪些挑战, 都是如何思考,如何解决的...

会议当时的Keynote下载(相关的视频@Velocity中国大会 应该正在制作,稍后也会放出来):

Velocity分享微架构设计之微博计数器服务杜传赢_20121205.pdf

关于服务优化这一块, 我在会场表达的主要意见是:

  • 虽然我讲了很多优化的小技巧和思路, 但是并非鼓励大家去盲目优化. 除非他真的有必要. 我非常赞同"最好的优化就是不优化", "优化是万恶之源"的观点.
  • 听过我讲的同学应该能够体会到, 我们一路走来都是尽可能地在延迟优化:
    • 产品上线初期, 甚至不在Feed页中提供计数功能(有更加重要的功能待开发)
    • 前期直接通过mysql搭建, 甚至使用更好的硬件(FusionIO)去支撑
    • 虽然想到了value block和key prefix的压缩思路,但是线上还是没有实现(目前的优化已经基本够用)

Marx描述共产主义的场景时说"共产主义社会中,物质极大丰富", 这其实是一个极端悲剧的场景.

  • 因为能量只能按照一个方向转化,"物质极大丰富"的时候就意味着"能量被极大地消耗".
  • 我们追求的应该是能量的充裕,因为能量可以转化为物质, 反过来却不行.

熵与能量守恒这篇文章应该讲得更加清楚.

类比到系统优化上, 也是一样的道理.

  • 我们追求的是能量的充裕(系统架构可优化的空间和能力).
    • 当我们有需求(产品需求, 访问量, 数据量倍增...)的时候, 可以将部分能量转化为物质 (某一项优化的实话, 某一个模块的开发上线...)来满足需求.
    • 如果在没有充分需求的情况下, 就做了过多的优化, 那其实是对时间和能量的浪费, 而这些时间和能量本可以用到更加合适和 更加紧迫的地方.

"让系统保持无限的优化想象空间, 但先只实施当前最紧迫最必要的优化!"