今天一口气读完了《逆流而上——阿里巴巴技术成长之路》,颇有收获,也为之震撼。全书只有五个章节,200多页。


逆流而上——阿里巴巴技术成长之路

  1. 基础架构高可用
  2. 中间件使用常见隐患与预防
  3. 数据库常见问题
  4. 业务研发经典案例
  5. 运行管理域稳定性建设

整体来看,这是一本秀肌肉的书。挑选了一些经典案例,主要是遇到的故障,及故障的解决过程。全书篇幅有限,又是以各个案例为主线,不太容易记住,相比于书中的知识点,更有价值的是学习借鉴其排查故障的思路及解决过程。从这个角度来看,这本书更适合运维的程序员阅读,当然对于从事业务开发的程序员也非常值得一读,毕竟业务和技术结合的系统中埋着无数的坑。

网络&底层硬件


大学毕业之前曾经在中国电信实习过一个月,跟着师傅走遍了大大小小的机房。机房中密密麻麻的光纤,成捆成捆的堆叠在机架上,第一次看到颇为震撼。电信内部有个故障预警系统,某个设备故障了,会自动触发警报,通知给中心的工作人员,工作人员通过系统可以精确的定位故障的位置,哪个机柜,哪个设备,哪个端口。我当时的工作,就是和师傅一同解决各种故障。一直觉得运营商的故障监测系统应该是最先进的了,没想到,阿里在运营商之上做出了 秒级互联网监控系统 , 故障定位的精细度可以细化到运营商网内地市级故障。确定了故障,通过 容灾调度决策系统 将流量瞬间切换至其他运营商的链路上,绕开故障点。同学之前在海南省中国联通工作,我就拿这个例子调侃他们运营商。

阿里在技术上的投入令人敬佩,比如在第一章中提到网络静默丢包的原因,其中有一条是:

  • 芯片封装材料包含有放射性元素引发芯片软失效
  • 来自宇宙和太阳系的高能粒子,芯片的原子核捕获产生附属的带点例子,进而引发芯片软失效
  • 低能中子会和芯片内部绝缘体材料发生原子反应,产生高能粒子,引发软失效

对问题刨根问底能到这个层面,已经超乎了我对互联网公司的认知。

分布式系统


分布式系统是云计算的核心,优势很多。但是也得面对许多挑战,比如,高度依赖通信,集群应用管理,分布式事务控制等。这些问题一般的公司,基本上没有能力应对。2007到2008两年,淘宝架构完成了从集中式到分布式的演进。从第二章开始,陆续介绍了阿里的分布式缓存集群, VipServer, 阿里云飞天系统等。有意思的是,飞天系统里面模块都是用中国古代神话中神命名的,比如,盘古、女娲…


阿里云飞天系统的技术架构

我平常主要的开发面向业务,所以在这个章节更想看到关于阿里开源的Dubbo 的相关介绍,然而并没有:flushed:
有些公司,在阿里云上面购买了一个服务器,然后服务端的程序放在上面,然后就对外宣称,自己基于云计算的“云XXX”应用,我司就是其中之一:joy:。 购买一个服务器,实际上还是将鸡蛋放在一个篮子中,和分布式、集群并无关联,也毫无优势。因为本质上还是一个单机应用,所以有并发导致的热点问题只会更严重,没有容灾防备,系统更脆弱:speak_no_evil:

分布式系统的控制,对任何一个公司来说都是挑战,即便是阿里,第四章的第一个案例讲的就是分布式事务锁与业务并发,导致用户余额多出了一分钱的异常。从系统维护角度来看,分布式系统架构要远复杂于单体架构。 从系统微服务的划分,到整体测试,再到系统的部署,每个环境都要面对挑战。这就需要各个部门的团队能够灵活高效的协作,而事实是,稍微体量大一点的公司,就会有各种繁琐的流程,要层层决策审批,效率低下。这几乎是大公司的通病,吴军在他的《浪潮之巅》中讲过这么个故事:

IBM 里面的人常常讲这么一个故事,在 IBM 公司,如果要把一个纸箱子从二楼搬到三楼, 需要多长时间。这件本来几分钟就能办成的事,在 IBM 需要几个月。原因是,要搬动一个箱 子,你要先打报告,然后经过层层审批;审批后,审批报告再层层向下落实,最后交给替 IBM 搬家的搬运公司。在搬运公司的任务单上,上个月的任务可能还没有完成呢,现在提交的任 务单一个月以后能完成就不错了。这样,搬动一个纸箱花几个月时间一点也不奇怪。

一个公司要是想搞分布式云计算,首先要把团队协作的效率搞上去,否则一个bug可能就需要处理几个月。那阿里是怎么做到高效的呢?在书的最后一章,介绍了阿里内部故障的处理机制和流程,值得学习借鉴,但是需要注意的是阿里巴巴已经是全球市值最顶尖的10家公司之一了(2018 7月 排名第七),拥有大量的尖端人才,它的经验不是想学就能学来的。

我从去年学习SpringBoot的过程中接触到分布式服务框架,然而很快意识到,如果一个还未稳定,需要频繁改动的产品,没有大量的用户,根本就没有必要使用分布式的架构。从维护的角度来说,要是只有业务的开发人员没有运维团队,几乎不可能玩得转。

数据库&业务系统


这部分内容集中在第三章和第四章,如果是业务开发,可以直接看这部分的内容。重点放在问题的排查方法、过程。至于发现问题的深度追究,适可而止,毕竟大多数的公司没有阿里这样的格局,会给你时间让你研究MySQL、Tomcat的源码。关于时间,Google 给的更充分,在Google有个20% time规则,每个员工都可以用“20% 时间”,也就是每周花一天,一个月花四天,或一年花一个月的时间在在自己的小项目上。实际上,Google许多重要应用就是从这些“20%”中诞生,比如Gmail, Goolge Maps等。

从事业务开发的程序员,不能只关心业务的实现,也要关心底层的技术实现,数据库的性能等。从自身角度讲,即便是工作没时间,也要抽出业余时间充实自己,这样才能有更多的选择机会。

总结


阿里这种强技术驱动的公司,是国内程序员最向往的公司之一。尊重技术不是侃侃而谈,不是这个很简单,那个也简单。尊重技术,尊重那些一线的开发人员,是他们一行行的代码、一次次测试,日复一日不厌其烦的调试,才有了稳定的产品。正如阿里首席风险官刘振飞所说:

他们面对日常一个个突发的故障,遭受委屈、忍受冤枉、不惧倒霉、坚忍不拔;他们是脚踏实地、埋头苦干的无名英雄,是阿里技术的脊梁!