一本历时2年的书即将出版难免有些激动,同时亦有些忐忑。激动在于这是一次有意义的社会实践,诸多作者参与其中。至完稿时,作者与发起计划时已有些不同。一些朋友因为各种原因退出了,所以从坚持的角度看,完成就意味着第一层面的成功。忐忑在于从初心出发,通读全稿仍有不足之处,诸位作者在具体实践中所遇到的线上问题远非本书所能尽数容纳。而最后精华的实践章节亦经过公司PR审核,略有删减。再一层,设计和编码很重要,运维管理同等重要。一个好用、易用、稳定的运维工具也是选择一套开源组件的重要参考因素,为了集中注意力,本书基本未覆盖运维部分的内容,且待有心人续之。写一本书,面世之后,作者或喜或忧,因为臧否之权利在于读者。
自觉而言,本书适合有一定研发经验的朋友阅读,它山之石,亦有攻玉之效。本书在逻辑上可分为三大篇章:基础概念篇、开源框架篇、应用案例篇。基础概念除了基础知识,也介绍了一些分布式方面的方法和思路;开源框架篇遴选了近年来流行的框架(比如Redis),同时对淘宝Tair、EVCache也做了一些探索。在Redis大行其道之时,对于Memcached及其周边知识也做了介绍,某些公司还有大量的Memcached实例,比如微博、Twitter等。工具的革新总是源自需求的不断被满足,而根据被满足的特性可以归纳其共性,比如解决单点高可用问题就是一个普适性问题,涉及主从模式、双活模式等,可用性同时又和性能、数据一致性相关。缓存为性能而生,但“缓存”设施的存在就决定了这个设施要符合分布式理论的要求。业界介绍理论和概要,或介绍设计原则的书不少,但拿出具体实践的稀有,比如新浪微博、Twitter这样的社交SNS具体如何设计缓存。简约而不简单!在应用案例篇,笔者邀请了对应领域的专家为大家解读案例,可以让大家触摸到真实的设计意图。重要的是大家可以获得不同场景下不同设计策略的启发。
本书的产生要追溯到多年前。笔者一直对缓存技术抱有热情,关注开源框架的发展,亦在工作中关注所遇、所见,乃至所听的案例。从应用程序研发方面看分布式缓存,并不需要所有的程序员都具备开发一套组件的能力,但是需要具备正确使用它的能力。正如易宝CTO陈斌老师所言:“解决雪崩问题的最好办法是不发生雪崩”。不论是在硅谷互联网公司里还是在国内的互联网平台上,曾多次遇到过海量规模的交易瞬间吞噬平台的悲惨故事。笔者亦了解一些缓存因为代码缺陷或者使用不当被击穿的案例,不同数量级的请求产生的结果有天壤之别,不可不慎。
两年前偶遇机械工业出版社的杨福川老师,攀谈之下就萌发了创作本书的念头。但由于工作繁忙且想呈现心中所想之提纲,故邀请一些不同场景下的专家共同完成。组团过程多有波折,特别感动的是北京的孔庆龙兄。他非常有兴趣参与合作,但时逢小孩即将出生,为此,孔兄开了一次家庭会议来讨论此事。虽然孔兄后续未决定参与,但可见其待人之真、之诚,是值得交的朋友。两年间发生了不少事情,刘暻宇(leo)、何涛、曹洪伟和程超都换了工作。在本书项目开始时程超家的小朋友还未出生,现在都快2岁了。大家都很忙,大约1个月碰一下进度,有时候可能一点进展都没有。期间,程超和leo都一度要退出,终坚持了下来。还有些朋友中间退出了,同时有陈波、王晓波等朋友加入。到这时,啥时候出版已不那么心焦了,水到渠成。就是问初心,我们有没有尽自己的努力来呈现一份关于工具书的纪念?
特别感谢曹洪伟身体力行,按时按质完成了分配的章节,同时review了不少章节,带动了这个虚拟组织迈上一个新台阶。这是一本书的编写过程,是一次心灵的旅行,是一次基于互联网的跨组织协同,也是关于工作和生活的点缀。感谢妻子晓娜对于我写作的支持,她对于进度的关注甚于我自己。她花了大量的时间辅导两个小朋友的学习,虽然周末有辅导班、家务等各种事项,但我总能申请到一些时间来构思本书。本书也是送给我的两个宝贝的礼物。这个礼物是初心,想到什么有意义的事情要义无反顾去做;同时,这个礼物也代表“坚持”,如同写作文一样,观察、总结,然后不断练习。
同时还要感谢所有的合作者,我们交叉review了所有章节。感谢机械工业出版社的杨福川老师、孙海亮老师。孙老师的审阅非常专业,从读者视角直面问题所在。朱攀兄弟review了部分章节,在写作过程中和高磊兄弟、丁浪兄弟也有交流,一并表示感谢。
囿于篇幅和知识局限,错漏之处难免,后续将通过勘误和调整完善的形式持续优化。为了初心的纪念,一次心灵的旅游!祝大家阅读愉快!
于君泽(右军)