# 结束语 | 静下心来,享受技术的乐趣 你好,我是韩健。 一晃几个月的时间就过去了,这段日子里,我们一起在课程里沟通交流,与我而言,这是一段很特别的经历。我看到很多同学凌晨还在学习、留言,留言区里经常会看到熟悉的身影,比如约书亚、唔多志、每天晒白牙、小晏子,很感谢你们一直保持着学习的热情。 就要说再见了,借今天这个机会,我想跟你唠点儿心里话。我问自己,如果只说一句话会是啥?想来想去,我觉得就是它了:**静下心来,享受技术的乐趣。**其实这与我之前的经历有关,我想你也能从我的经历中,看到你自己的影子。 我们都有这样的感觉,无论任何事情,如果想把它做好,其实都不容易。我记得自己在开发InfluxDB系统期间,为了确保进度不失控,常常睡在公司,加班加点;在写稿期间,为了交付更高质量的课程,我总是会有很多想法,偶尔会通宵写稿,核对每句话、每个细节;再比如,为了解答kernel\_distribution同学的一个关于外部PPT的问题,我通过Google找到相关代码的出处,然后反复推敲,在凌晨4点准备了一个答案。 当然,技术的学习就更加不容易了,不是读几遍材料、调调代码就可以了,而是需要我们设计检测模型,来验证自己是否准确地理解了技术。我曾见过一些团队,做技术决策的依据是不成立的,设计和开发的系统,尽管迭代多版,也始终稳定不下来。在我看来,这些团队最大的问题,就是对技术的理解不准、不够。 在我看来,我们需要调整下心态,也就是静下心来,全身心地投入,去体会技术的乐趣,“Hack it and enjoy it!”。然后学习和工作中的小成就,又会不断地给我们正反馈,激励我们,最终可以行云流水般地把事情越做越好。 具体到我们课程的主题,也就是分布式技术,该怎么继续精进呢?我们都知道,分布式技术属于新技术,仍在快速发展(比如Raft在2013年才提出),没有体系化的学习材料,而且知识碎片,学习起来尤为不易。今天我想再补充几点个人看法。 **首先是“杨不悔”。**也就是我们要“衣带渐宽终不悔,为伊消得人憔悴”。想想你在大学的时候,是不是很执着呢?学习分布式技术,也需要这么个劲头儿。 **其次是“张无忌”。**也就是我们要“不唯书不唯上只唯实”。理论是为了解决问题的,而不是为了“正确”,理论也是在实战中不断发展的,所以在日常学习和使用技术时,我们要注意妥协,没有十全十美的技术,我们需要根据场景特点,权衡折中使用技术,并且实战也会进一步加深我们对技术的理解。 **最后是“师夷长技以制夷”。**也就是我们要科学上网,多阅读英文资料。 另外,有些同学可能刚刚接触分布式系统和分布式技术,我对你的建议是“单点突破,再全面开花”。比如,你可以反复研究20讲的分布式KV系统,然后研究Raft算法,最后再去研究其他分布式算法,循序渐进地学习。 为了帮助你更好地学习,掌握“渔”的技巧。在这里,我推荐一些适合入门和深究的学习材料(当然材料不能太多,太多了,相当于没推荐)。 * [迭戈·安加罗(Diego Ongaro)的博士论文](https://github.com/ongardie/dissertation#readme):安加罗的博士论文,对Raft算法做了很详细的描述,我建议你反复读,结合源码(比如Hashicorp Raft)读,直到读懂每一句话。 * [《Paxos Made Live》](http://www.read.seas.harvard.edu/~kohler/class/08w-dsi/chandra07paxos.pdf):这是Google团队的Paxos实践总结,我建议你从工程实践的角度去阅读,多想想如果是你,你会怎么做。 * [《Eventually Consistent》](https://www.allthingsdistributed.com/2008/12/eventually_consistent.html):了解下沃纳·威格尔(亚马逊CTO)对一致性的理解和定义。 说到这里,我还想强调一点,希望能在后续的工作和学习中帮到你。那就是,“技术要具有成本优势”。什么意思呢? 基于开源软件,我们很容易“堆砌”一套业务需要的功能。基于大型互联网后台(比如QQ)的架构理念,我们能支撑极其海量的服务和流量。也就是说,实现功能或支撑海量流量,相关的软件和理念,都已经很成熟,不是挑战了,但功能背后的成本问题突出。 而成本就是钱,功能背后的成本问题是需要重视和解决的,比如,自研KV存储相比Redis降低了数量级倍数的成本。另外,分布式技术本身就是适用于规模业务的,而且随着业务规模的增加,成本的痛点会更加突出。我希望你能注意到这点,在根据实际场景设计系统架构时,如果需要的话,也将成本作为一个权衡点考虑进去。 为什么要考虑这些?**因为我真心希望你是分布式系统的架构师、开发者,而不仅仅是开源软件的使用者。** 好了,专栏到此就告一段落了。但专栏的结束,也是另一种开始。我会花时间处理还没来得及回复的留言,也会针对一些同学的共性问题策划答疑或者加餐(这是一个承诺,也请你监督)。总的来说,我会继续帮你吃透算法原理,让你掌握分布式系统的开发实战能力。当然,你可以随时在遇到问题时,在留言区留言,我们一起交流讨论。 在文章结尾,我为你准备了一份调查问卷,题目不多,希望你能抽出两三分钟填写一下。我非常希望听听你对这个专栏的意见和建议,期待你的反馈! [![](https://static001.geekbang.org/resource/image/b8/72/b8538443cdc6fff2962a5bf1f692bd72.jpg)](https://jinshuju.net/f/e470QX) 最后,我想用一段话结束今天的分享,学习技术的路上你可能会遇到对无法准确理解某技术原理的问题,但你不要觉得孤单,因为这是一个正常的情况,大家都会遇到。如果你觉得某技术的原理,理解起来很吃力,你不妨先把这个技术使用起来,然后多想想,如果是你,你会怎么设计,接着你可以带着自己的猜测去研究技术背后的原理。 希望你能在繁忙的工作中,保持一颗极客的初心,享受技术的乐趣! * * * 编辑角:目前课程已经结束了,为了交付更好的内容,《分布式协议与算法实战》于2020年4.26日启动迭代计划,15讲为迭代版本,后面也会对ZAB协议进行更细致化的讨论,敬请期待!