今年2月还是3月的时候,tim突然问我想不想去qcon做一次关于高性能方面的技术分享,因为之前在公司分享过挺多次,又是过年前后,正好在做各种灵异问题的排查,头脑一热就答了句“当然没问题”,周末用了几个小时写了个提纲,然后就乐呵呵的产生了自己要走上人生巅峰的错觉。直到最近才深刻的意识到想做一次技术分享要难于之前所有写过的代码、设计过的方案、排查过的问题,这篇文章就算是这几个月来的流水账吧。

之前写的提纲交上去之后就一直没再改过,内容是这样的:

《微博在大规模、高负载系统中的典型问题》

很多开发者都会有这种经验:伴随着系统的规模扩大、性能不断提高,在系统运行的过程会出现很多意料之外的情况,影响服务的质量。在这些意料之外的情况当中,有相当一部分属于高性能、高并发、高负载环境下特有的问题,这类问题出现条件苛刻,难以发现和排查,并且往往会引起整个系统崩溃的严重后果。

微博平台作为典型的大规模、高性能系统,在不断改进架构以应对各类极端峰值的同时,也需要面对高负载系统出现的各类问题,并且积累了一些此类问题的经验。本次演讲中,会和大家聊一聊在大规模、高性能、高负载系统中特有的几类问题和解决思路。

主要提纲:

有哪些问题:结合案例,介绍大规模、高负载系统的几类典型问题
如何解决问题:在排查此类问题时总结出的一些方法和思路
如何避免问题:从系统设计到上线维护的过程中,避免此类问题发生的一些原则

看上去不错,至少很通顺。后来一直在不紧不慢的搜集素材,越搜集就越觉得哪里不对。因为这一年下来排查的问题不少,但是总觉着不管哪个问题都没那么合适,总是觉着素材的内容要么深了要么浅了要么偏了要么不能讲,总之在纠结中过了一个月。

转眼就要交初稿,但是合适的素材还没收集全,咋办呢。灵机一动,先把能堆的东西都堆上,再捋一捋思路吧,于是就有了一版我自己也不知道要讲什么的初稿,内容从高可用到性能调优,从案例到设计思想全都沾了点边,不过仔细琢磨一下又好像屁事都没说,不过总之算是有了个素材库,而且也有几个看起来稍微有点靠谱的案例了。

之后就对着初稿改了两天,把内容加了点又删了点,套了个模板,感觉好像是个有条理的素材库了,第一次玩keynote(之前公司内部分享都是markdown+pandoc),为了图开心还做了好几个特效,感觉似乎可以试讲一下了。

第一天试讲的时候找了几个组里的小伙伴,把一帮人拉到一个小黑屋对着个屏幕开讲,整个过程异常艰辛,我自己都觉着这塔码讲了些什么鸟玩意。甚至有一个小伙伴当场睡着了……嗯,在距离我不到1米的地方坐在椅子上睡着了,还流了一脸口水……最后大家给了一堆建议,其实不给建议也可以,因为我自己都觉着这个ppt简直是坨shit……

在经历了那个悲痛的夜晚之后我决定把不在素材库的基础上改了,直接Command+N,只把要讲的内容拖进来。这一版把案例的比重放大了一些,删掉了一些很突兀的内容,想做成分别讲三个方向的案例,然后各自总结一下的形式。这次找了别的组的几个小伙伴review。

结果群众纷纷表示你这分段法是怎么个意思,感觉就像是把鸡蛋、打印机和键盘放在一个ppt里一样,完全没道理啊。不光如此,每一块内容都伴随着袋鼠一般的跳跃性思维,案例还不知道是怎么个意思突然就升华出一个带着光圈的价值观,感觉就像去饭店吃饭刚看到菜单下一个镜头就开始收拾盘子了。并且质疑了ppt里的好几个观点,我在会议室里抱头痛哭:你们别说了!我改!我改还不行吗!

恰巧这时候架构改造的事情挺多,产品又跟打了鸡血一样天天开需求讨论会,每天白天开7个小时会,晚上查3个小时问题,只有凌晨能改ppt。眼看着交终稿的时间要到了,我开始有了一种只要做完分享别砸了名声我就满足了的感觉……

后来抽了个时间突击了一下,画几个小时在纸上画了画内容(感谢qcon组织的讲师讲座),把分析问题整个章节拉长,讲透,另外两个章节的例子删掉,然后又花一晚上美化了一下,感觉上通顺了不少,找了几个人看了一下,思路上比较流畅了。这时候又做了一次试讲,这次找了几个小伙伴简单过了一下内容,提了一些细节上的问题,问题不大。

之后组织了一次部门的几十人的试讲,感觉过程挺轻松,大家给的反馈还可以。不过跟tim单独过的时候他提出现在这个分享上下文还是不够,公司外面的人很难跟上,并且说教太多,干货不够,大多数在讲自己的观点,但是你又不是意见领袖,单纯讲观点没有意义。这时候我就觉着很纠结,演练了几次,时间刚好能控制在45分钟,要加内容必须得删;但现在的ppt上每一页都是排查问题的过程中通过无数次踩坑总结出来的,属于个人多年吐血心得,删什么都舍不得……

眼看着临近qcon的日期了,抱着“马勒戈壁的我现在是为了尊严而战了!”的决心在ppt前面加了一大段上下文,之后重新review了一下整个ppt,基本是一直在念叨:“我如果是其它公司的员工话这一页对我有什么收益?”。没收益,删。没证据,删。前后没关联,改。花了大半夜把ppt又整个锄了一遍,删了几十页,把犹豫不定的内容全都删掉了。又分析了一下内容,为了减少说教增加了两个案例,把动画效果加上,基本上就成了现在的最终稿。

做演讲前一天去踩点的时候吓了一跳,之前没想到场子这么大,虽然对演讲之类的事情不怎么打怵,不过从几十人到几百人的场子还是隐隐觉着有些压力。

开讲那天起了个大早,跑到场地调设备,发现提词器用不了,现场的投影仪也做不成屏幕扩展模式,后来志愿者妹子找工作人员帮忙解决了,提词器接第二台电脑手工翻页。但是这玩意开讲之前是好用的,开讲之后没30秒妈蛋就变成显示器logo了,看不了时间也看不了下一页内容,只能靠记忆讲,讲的过程里一直想提醒台下很认真的在帮我给提词器翻页的那个志愿者妹子你别翻了,反正我也看不到……

整个过程算是比较顺利,满场都是人,大部分没在玩手机(其实没怎么看清),并且直到讲完也没见几个人离场(也可能是门口被围观的人群堵死了想走也走不了……)

讲完之后一直在庆幸,感慨ppt有个清晰的思路是塔码多么重要!不用提词器也能很自然的想到下一页的内容是多么重要!事前小黑屋演练一下时间有多么重要!

之后不知道反馈怎么样,问了几个来听的小伙伴的感想,似乎尊严总算是保住了。回头看了一下视频,很明显的感觉讲的时候有些着急(因为看不到时间),很多应该停顿和重复的地方没有顾及到,同时也发现演讲的时候一直在来回溜达,这个事情在演讲的时候是没啥印象的,事后看就很明显的感觉一个死胖子在屏幕前乱晃让人有一种生理上的不适感,不知道当时的观众是不是也有这感觉,只是因为门被堵了出不去……

回忆过去的几个月,似乎自己也印证了帕金森定律,大部分的时间都被浪费了,不过总的来说收获还是大于痛苦的,总结一下整个准备、发表演讲和在qcon听别人演讲的过程里的一些收获:

  1. 所谓的干货是对方听完之后对自己有帮助的内容,而不单纯是正确的内容
  2. 非精神领袖的ppt里,所有内容都得有事实依据,单纯说观点跟没说一样
  3. 同样,如果不是精神领袖,那就不要妄图自己能把内容讲的面面俱到,只要整体思路流畅,挑几个重点讲透了,观众能从中收获一个观点就会认为分享可以接受
  4. 上下文很重要,但是单纯的上下文很无聊,讲超过5分钟的概念基本上下面的人就坐不住了
  5. 多找多元化的人做review
  6. ppt前期别加特效,反正之后会删掉
  7. 试讲很重要,脱稿试讲很重要,提前给自己演讲的状态录个像也很重要
  8. 很多事情经历一次比说什么都强

总的来说这次qcon之旅还是有很多做的不够好的地方,离一场“受欢迎的技术分享”还有很长的路要走,不过总算保住了尊严又有些收获,不敢奢求更多。做完这次分享也终于有时间把之前挖的关于docker和java+linux内存管理的文章的坑填了,可喜可贺。

最后还是很俗的感谢@TimYang 提供的机会和帮助,感谢@InfoQ 的所有编辑的工作,感谢所有不厌其烦的陪我review ppt的小伙伴,感谢qcon其他的讲师,确实学到很多。

这次分享的ppt下载地址:http://pan.baidu.com/s/1gd4EKQf

视频观看地址:http://v.pptvyun.com/show/0a2dnqyVoKChn6mL4K0.html