我是道彦。2014年加入阿里,在阿里通信工作近两年。我是2016年底加入业务平台组的,当时领导让我第一??件事就是解决大促的问题,第二件事就是解决安全生产的问题。我带着这个命题进入了业务平台,开始了后面的故事。今天借此机会跟大家分享一下这件事情和这件事情背后的一些思考,以及我对建筑师的一些思考。我理解技术架构的第一点是顶层设计。国家每五年有一个五年计划。这其实是一个非常清晰的国家层面的顶层架构设计。在这里,重大建设项目和国民经济生产力的宏观建筑设计本质上是建筑设计。在里面,要做什么事情要明确,要达到什么样的结果也必须明确。双11保护也需要设计。双11本身就是一场商业盛会。因为它的规模比较大,需要大量的技术来支撑这个东西。在技??术上,我们可能需要考虑低成本、高效率、高稳定性,我们必须引入一些更多的新技术来支持它。我们还要把这些东西整合起来,把架构设计好,让架构能够顺利支撑业务。第二点是物理架构。我们是单元化的结构,当然很多公司也有类似的结构。但是,阿里的单元化架构与其他架构相比,有一些本质的区别。阿里目前的单元架构目标是什么?通过部署远程单元,生产流量完全在千里之外的独立机房运行,实现业务不间断运行。这几句话包含了很多要点,一是异地,二是千里之外,三是独立,四是连贯。单元式建筑的总设计师是毕轩。因为我们的业务跟单元化架构有很大的关系,所以一定要充分把握和理解,才能往前走。第三个重点是应用架构。目前中台有很多项目叫做星环。杏环实现该架构的本质目的是将简单的代码共建模式抽象为横向和纵向的业务封装模式,从而实现业务与业务的隔离,业务与平台的隔离。这背后的问题是什么?我们最初以共建的方式生产和支持了50多个BU会员、商品、交易、营销、资金、支付、库存回溯等业务。其实每一个都充满了ifelse,导致代码合并。难,开发难,测试难,上线难,整个过程很痛苦。所以2015年在打造星环结构的时候,就是为了让这些事情不那么痛苦,慢慢解决这些问题。架构师的角色关于架构师的角色,我来说说我的想法。第一点,形散神不散。架构其实存在于每一个业务线,有的技术生本身也是架构师。很久以前,阿里有一个特殊的建筑师职位,专攻建筑,但是作为建筑师,他已经不在了。因为它太没有根据了,所以它没有解决具体的、真实的、实际的问题。但是现在,阿里的架构师职位在逐渐增加,他们的价值就在于将这些技术问题抽象出来并加以解决。所以第一点就是形散神不散。优秀的技术生一直在用架构意识来解决实际的技术和业务问题,这与普通的技术生有着根本的区别。他不只是解决这个问题,他可能会解决这种问题,用架构的思维来解决问题。第二点是前瞻性。你为什么能解决这个问题,你能解决这类问题吗?一定是需要看的多,想的多。这背后是大量的实践和知识的积累,而你是站在过去的肩膀上。阿里的电商体系很早就建立起来了,我们一代又一代一直在建设,站在上一代人的肩膀上。我们要看看上一代为什么要做这样的设计,想一想或者找他谈谈,学习他的优点。你现在可能会遇到新的问题,通过其他方法解决一些新问题需要实践和知识的积累。接触更多的人和事,用新的方法解决新的问题,是非常重要的。不能只看一个月的代码,而是找到真正的业务方,你的上下游,合作伙伴。比如说到双11,我在2016年12月就去了商务平台,我花了整整三个月的时间和组长以及每年参与双11的重要人物聊双11。他们怎么理解,他们怎么想,他们认为哪里不对。我向他们征求意见:我该怎么做。在和他们聊天的过程中,我们知道自己需要做什么样的大促,有哪些要把握的重点。这些都是一些宝贵的财富。第三点是解决复杂问题。优秀的架构师解决复杂的问题。只有复杂的问题才需要更多不同的技术或更新的技术来彻底解决它们。高并发和高可用是阿里电商面临的基本问题,但是对于高并发和高稳定性,架构师必须有不同的解决方案。目前最紧迫的问题,比如用户体验、效率提升、低成本等等,其实都非常复杂。很多同学都想解决这个问题,也用了很多方法来解决,但是整体效果不是特别明显。因为链接太长了,链接越长,受影响的商家和人就越多。你必须以一种新的方式来思考这个问题。同时,用户分层,内部技术人员增多,迫使我们把复杂的问题简单化,所以我将解决复杂问题定义为架构师的典型角色。架构师需要什么样的能力?架构师需要什么样的能力?我参考了外面一些同学的分享,结论其实就是发现问题,分析定义问题,解决问题。发现问题需要有发现局部和全球问题的眼光,更重要的是有发现未发生问题的能力。哪些需要治疗,哪些需要治疗。这是发现问题的基本判断。现在系统可能没有什么大问题,但是你一定要有发现的眼光。如果不解决这些问题,未来业务可能会遇到更严重的问题。建筑师看待问题的方式与其他人不同。不要只看到眼前的问题,还要看到这个问题背后是什么,这类问题背后是什么,我如何抽象地解决这类问题。想了想,还是先解决当前的问题,再抽象的方式解决其他问题。定义问题,分析问题阿里不缺解决问题的学生,缺的是定义问题的学生。你怎么知道这是一个问题并清楚地定义问题。需要对发现的问题进行抽象和总结,明确问题的基本要素,同时明确问题的短期和长期解决方案,从而推动整体技术进步。定义问题非常苛刻。平时在解决业务技术问题的时候,还需要具备分析问题和定义问题的能力。如果你清楚地定义了一个问题,你就能真正推动业务向前发展。解决问题需要落实路径和解决方案,协调团队和上下游,推动问题的解决。架构要解决的问题一定不是局部问题,而是全局问题。架构师肯定会遇到各种各样的角色和环节。他必须有能力定义问题的解决方案和实施路径,同时与团队协调。他不能低着头做事,他真的要抬起头来,还得有很好的沟通能力,和所有同学达成共识,才能往前走。第一点,沟通能力很重要。如何把这个问题说清楚,切中问题的要害,同时帮助上下游带来实效。第二点,建筑师要有灭火的能力,不仅仅是眼前的火灾,还有未来的火灾。建筑师必须有很强的灭火能力。来阿里之前,我是做CRM系统的。后来要解决很多业务问题,把它抽象出来,做业务问题下的基础平台。后来发现如果要更彻底的解决基础平台的问题,必须要做下面的中间件,这样通过层层深入,才能理解整个链路。自2017年来到业务平台以来,我学到了很多东西,包括它的系统链路是什么样子的,它的数据链路是什么样子的,它的整个调用链路是什么样子的,它和底层的关系是什么样的,可能会遇到什么样的问题?现在可能会出现这个问题,以后会不会出现其他问题?通过救火的过程,一次次积累对系统的认识。所以,过去的每一次积累,对解决现在的问题都有很大的帮助,每一次解决问题,都能让自己对大局有更深的认识。架构师面临的挑战的第一点是全局视角。比如你看到“会员”这个业务功能,不能只看功能本身,你要看会员上有什么业务,谁在使用会员。这叫大局。同时,导购和交易是会员使用最多的,登录只是会员自身的一个小业务功能。基于会员,我们有导购和交易。如果我们一起了解这些东西,我们就可以充分了解成员提供的内容。我们必须有全球视野。第二点是技术广度。阿里的技术很复杂。一个学生能够加入阿里,体验阿里的整个技术栈,真的很了不起。以单元化架构为例,我们可能需要了解端,包括iOS、Android、PC,还有CDN、网络、接入层、服务发现、服务路由、HSF等。数据库包括存储同步、多点写,消息中间件。这些技术和产品其实平时学生都在用,但是架构师不光是在用,架构师真的要把玩,把这些东西吃透,这才是重点。举个例子,数据库的强同步对我们后续的技术架构演进和业务提升都有很大的影响。这时候大家肯定对数据库有了一个全局的认识。2009年Oracle数据库被大量使用。我当时并没有做数据库相关的工作,但是为了深入研究Oracle数据库,学习了很多Oracle数据库相关的内容。了解里面的逻辑,知道它的发展状态、运行状态、管理状态等,知识就有了延续性。后来来到阿里,可能需要几个小时才能彻底了解现在的阿里数据库。技术的广度非常依赖积累。你必须考虑问题。只有这个时候你才能有记忆。随着积累,你的技术广度会逐渐越来越深。想要了解数据库,就必须了解底层的网络,所以我们需要对网络和CDN有更深入的了解。2009年,我花了大约两年的时间研究网络。全面了解交换机、路由器、骨干网、城域网、运营商如何建网、自建IDC如何建网。怎么交互,为什么重传高?为什么延迟高,TCP/IP4层下面的IPlayer3是怎么操作的,IP下面的MAC层是怎么操作的,大家应该有更深入的了解。这些积累最能体现救火时的价值。我去救火的时候,根本不会用现在的平台化工具。我直接用TCP代码抓取原帖,很多问题立马分析出来。这就是平时的积累,慢慢地你就会对大局有一个了解。2019年整个核心系统上云的时候,也跟技术的广度有关。上云后发生了哪些变化?整个基地都上云了,计算、存储、网络都上云了,所以要懂云。2018年基本了解了阿里云的所有云产品,这时候对阿里云的网络和技术会有一个本质的了解。架构师必须具有技术广度。每个人都要学会积累,积累到一定程度之后,就可以无师自通了。比如你了解了网络和数据库,然后你就了解了30%的磁盘。当这些知识逐渐成为一个系统的时候,你就能够消化和理解不同技术点背后的关联,提高个人的能力和认知。升级是一个巨大的帮助。第三点是持续学习。技术的升级和变化一直在发生。只有不断学习,才能对旧架构有新的认识,才能对老问题产生新的解决方案。了解这个行业最近发生了什么变化,这个领域最关键的项目和人在做什么,学习他们的技术,研究他们的论文。我以前每天大概学习2到3个小时,这几个小时的学习时间是我最放松的时间,没有想太多的事情。学习不是盲目学习,一定要系统。首先,和你的工作有关,你要系统地学习,从下到上,学习之后会有新的不同的理解。把你的想法告诉你的团队,告诉你的主管。还有阅读论文的需要。数据相关,OLTP和OLAP都有很好的论文。看完论文再看看别人对论文的理解。一定要看点好东西,工作相关的都可以看,天天学习。每天花2到3个小时学习,三年后你就会知道自己和别人完全不一样。有人曾说过:如果你能在一个行业里投入10000个小时,你就会与别人形成本质的区别。但在我们的领域,1000小时可以有所作为。第四点是业务理解。这必须付诸实践。不是业务离不开架构,而是架构离不开业务。业务、架构和技术必须三位一体才能达到最佳效果。我们在学、练的过程中都在磨刀,但是你不能说你每天都在磨刀,你就得用这把刀。这是结合业务,用不同的思路解决实际业务问题,会带来更低的成本和更高的效率。最后是结果。把技术的先进性转化为业务的先进性,屁股就别管了。这种“忘掉屁股”意味着很多事情你不能一个人做。复杂的、更大的事情,需要和更多的人合作。如果你做的事情只是为了你自己,比如KPI,我告诉你,你可以做一两次,但以后就没有人会跟你合作了。你得忘掉你的屁股,这样你才能慢慢的把这件事情做成,真正达到你想要的结果。遇山开路,遇水架桥,这就是决心。很多时候,问题确实很难解决,需要协调更多的人。很多人可能会放弃。我们最近在升级架构,用国产芯片,从下到上全链路。如果一方配合不好,这件事情就很难推进。从4月到7月底,曾两次被封锁。如果不能进行第三次,这件事就彻底结束了。我们将整个团队召集在一起并互相鼓励:必须完成。遇山开路,遇水搭桥,有什么问题大家一起解决。我们必须下定决心和果断。
