@Lenciel

推行微服务架构的最大收益

作为行业里面最火热的名词之一,「微服务架构」在AmazonNetflix等大厂取得的成功,大家算是耳熟能详了。

但是作为 CTO、技术 VP 或者架构师,要把你服务的公司或者项目加入到「实践微服务并取得成功」的列表上,难度其实是很大的。仅仅是把自己的系统打散成多个服务,就有很大的成本。所以 Martin Flower 也提醒过要当心入坑。

所以看到各种会议,博客,社交媒体上实施微服务架构的经验分享时,要明白这里面真正的成功并不在于对各种技术的应用,或者说,在成功利用 Docker、Kubernets 或者 SpringBoot 等等性感的技术之外,微服务架构带来的最大的收益并不简简单单是技术的落地。

最大的收益

微服务架构真正的收益在于形成小而美,能胜任各种职能的扁平化,自组织,自管理的团队,完成在传统组织架构下无法完成的拓展性和创新性工作。

两个披萨的团队

Amazon 的「团队规模应该控制在点两个披萨就可以吃饱」的规则很有名,Jeff Bezos自己说

Managers: We need more communication on and between our teams Bezos: No. Communication is terrible」

要构建自组织的,创新的团队,需要的不是「更多」的沟通而是 更有效的沟通。这点说起来容易也很好听懂,但要做到其实非常难,只要看看你自己手机上那 50 多个工作原因拉的微信群就知道。

但我们可以在团队规模较小的时候开始尝试。所有人一起办公,培养起友谊和信任,产生化学反应互相激发:这样发生group think或者social loafing的几率就会变小很多。

J Richard Hackman在研究了团队和组织之后指出,团队里面的人之间的沟通和人数的关系是:

(n*n-1)/2

如果人数 n 不断增加,顺畅沟通的难度就会变大,团队的效率就会降低。

Hackman 建议的人数是 10 人以内,Amazon 一般是 6-8 个人,海军陆战队是 4 人一个编组:也就是说,人数不需要那么死板的规定,只是应该比较少。

其实要感受这个不需要那么多理论,回忆一下参加一个婚礼时在餐桌上沟通的质量,和跟两三个朋友喝个茶沟通的质量对比一下,就明白小团队的优势。但我还是推荐好好读读 Hackman 关于团队的文章

多功能团队

为什么我们需要一个团队有各种功能,而不是负责开发、测试、产品、运维的某个单一方面?

Bad behavior arises when you abstract people away from the consequences of their actions

创建团队在功能上的清晰分界,就跟告诉住宾馆的人弄脏了房间是服务员来打扫一样,是在鼓励「坏行为」的发生。一个优秀的程序员应该在编写质量上乘的代码的同时,关注可测试性、易维护性、安全性、性能、可扩展性和易用性等多个方面的问题。如果你划分了 DBA、OPS、QA 等职能团队,开发自然而然的就会认为自己把功能实现出来,工作就完毕了,下面的话就会出来:

  • 「我哪有时间测试,那是测试做的」
  • 「数据库的变更找 DBA」
  • 「我只负责这个功能的实现,基础设施和运维负责它的高可用」

要防止这些对话发生在你的团队,就需要引导和宣扬「一专多能」的文化。在很多成功的公司里面(Amazon,Netflix,Facebook,Google)都很强调这点,比如 Amazon 著名的「谁编写,谁负责」。现在行业里面很流行另外一个热词 DevOps,实际上 DevOps 的本质是 Dev 在前的,甚至不应该有专职的DevOps部门

康威定律

软件开发里面,技术问题远没有人的问题难解决。所以康威说:

organizations which design systems … are constrained to produce designs which are copies of the communication structures of these organizations

要如何打破内部各个团队之间的壁垒呢?除开自顶向下的进行组织架构的变更,还可以尝试内部开源。

内部开源

一旦你打破职能壁垒,构建起小的,多职能的团队,就能够看到这些人为了构造一个高质量的软件系统,一起努力。他们的工作形态其实挺像开源组织的:大家都可以发表意见,都可以贡献代码,对最终的发布负责。

这样的团队形成之后,在他们的输出基本稳定成形后,就可以开始尝试内部开源。

总结

微服务架构的各种成功案例和大家拥抱它的热切姿态,很容易让我们觉得它解决了很大的问题。

其实微服务架构里面很多基本指导原则,SOA 里面都有。但后者最终的失败就在于,虽然技术上有一整套 WS-*的规范,但是却没有在组织结构上做相应的适配,所以陷入了康威定律指出的死路。

技术和流程当然很重要,但是它们的推动,永远是靠人的,因此,组织结构先行,全员参与,共同为建设能够输出高质量系统,快速响应需求变更的团队努力, 这才是实践微服务架构或者 DevOps 对一个公司最大的收益。

我可能要搞个公众号

Don't touch me

这当然是个错误。

因为爱吹水,一直有朋友要我开个公众号。但试用了一下之后,感觉微信公众号的用心特别险恶:评论功能默认没有不说,外链的功能居然也没有。

很多人可能不会理解,但互联网最大的作用在于各种各样的信息被「链接」起来,孤立信息不再有被「收藏」的价值,而是被更高效地消费和验证了。

在没有互联网之前,孤立的信息也是有价值的:能够读到的书,能够听到的曲,就是高价值的,一般老百姓无福消受。

比如贵妃约明皇吃个饭,傻等了半天结果听说皇上早去了西宫,一举喝大伤伤心心起个四平调,唱得再凄美,唱完就消失在空气里了。而梅兰芳的《贵妃醉酒》就已经可以被灌进唱片,但唱片仍然不便宜。到了李玉刚的《新贵妃醉酒》呢?你随便搜一下就听到了。

所以互联网时代,孤立的信息失去了价值:能背得四书五经,记下元素周期表不再有用,真正有意义的变成了我们在信息之间添加的「链接」。

而互联网寡头的做法,常常就是依靠「相关法律和政策」,把本来是链接起来可以不断流转和冲洗的信息,变成独家提供。特别在国内,在构建局域网这件事情上,国家有国家的政治需要,寡头有寡头的商业需要,一拍即合。

因此,作为一名互联网从业者,我一直认为迎合微信公众号这种东西绝对是错误的。

但本座很喜欢的前苹果设计师 Bret Victor 给自己设定的新年目标让我有了一些新想法,他说他要:

改造我们的低幼化社会。提供工具,帮助人们对抗和摧毁消费主义文化(无孔不入的、以操纵情感为手段的品牌营销和广告,物质主义,人为造出的时尚和潮流),以及巨型企业对劳动市场、娱乐以及创造力的垄断性控制。将权力、尊严和责任还给个体。

这样的愿景是很好的,社会也非常需要这样的人。但我突然发现,从 2012 年到现在,他花在「提供工具」的时间越来越多,「帮助人们对抗和摧毁消费主义文化」的时间也越来越少了。

这种用技术手段对抗技术手段的做法有没有取胜的希望呢?

Harold Innis 在《The Bias of Communication》里用许多历史证据说明了新技术如何「击破」传统的知识垄断,并创造出由另一批人掌控的新垄断。他认为新技术的好处和坏处并不是平均分布的。

总是会有赢家和输家:很多时候,输家还会出于无知为赢家欢呼。

这种看起来不合理又悲哀的事情,其实一直在发生。

技术带来的好处,究竟是对谁更大?如果仔细想一下,电脑的普及究竟是让你交税更方便了,还是让政府查到你漏税方便了?摄像头的普及,究竟是让你记录美好时刻更方便了,还是让你被跟踪,被识别,被开罚单更容易了?

所以其实没有什么好对抗的。用什么不用什么如果看得太重,可能反而有些役于物了,就好比反抗母亲的小孩常常恰恰是被定义的小孩一样:只不过做了个取反的操作。

何况,开公众号是个错误也挺好。随着年纪的增长,我越来越喜欢错误。《西部世界》里面有段让我觉得很有趣的台词:

Bernard Lowe: 是您加的代码,福特先生,那些「白日梦」,里面有一些…… Robert Ford: 「错误」。你不愿意说出来的就是这个词。这没有必要。你自己就是亿万个错误的结果。这个星球上的一切有知觉生命都是用「错误」这唯一的工具演化出来的……但我们现在已经摆脱了演化的枷锁不是吗?任何疾病都可以治好,最弱的人也能生存,或许有朝一日我们还能把Lazarus从洞穴里召唤出来,到时连起死回生都不是问题。你知道那意味着什么?意味着我们完了,意味着我们目前已经做到了尽头。

这让我想起了 Nelson 和他的「世外桃源计划」。Seymour Papert 的那本先知般的《Mindstorms》里面也说过:

许多儿童学习受阻,是因为在他们的学习模式里,对与错总是泾渭分明。但在编程时你几乎不可能第一次就做对。成为编程高手的过程就是学会熟练地找出并修复Bug的过程。在编程时我们要问的不是对或错,而是错误能否被修正。如果这种对待智识产品的方法被普及到更大的文化范畴,成为人们对待知识的态度的一部分,或许我们就都不会那么怕错了。

在 70 年代末,个人电脑的萌芽期,人们还在讨论使用它会不会让人类变得离群索居的时候,Nelson 就觉察到了,作为媒介,电脑和编程对那些能够运用它们创造价值的人,在思维方面可能产生的微妙却根本性的改变:试错、迭代、进化。

技术发展到今天,进化的齿轮似乎已经运转得日益高效,超越我们想像边界的可能性不断出现。郭敬明电影里面的元素,是根据三、四线城市小姑娘放到淘宝收藏夹里面的物品拼凑的;世界上最厉害的围棋手变成了 Google 的机器人;政府可以在你以为关机的时候,通过电脑的前置摄像头看到你的一切……

面对这样的世界,我不想像 Bret 那样号召大家去抵抗。出世修炼,回归自然,或者心灰意冷没有任何好处。我们还是应该多读,多看,多写,用更完整的视角来观察社会,特别是商业社会的方方面面。

保持创造力,保持对技术和艺术的感受力,保持精神和肉体的强健,才是在享受生活的同时,对抗消费主义的办法。

所以虽然微信公众号这么反人类,还是准备就范了。本座现在的心情,大概很像横尾忠则在自传里面写自己在浴室滑倒把肋骨摔碎的时候:

……那瞬间我在无法呼吸的剧痛当中内心呼喊着:「太棒了,这样我的风格又要改变了。」