发现问题
对局部和全局的问题需要有发现的眼光,更应该有发现未发生问题的能力,哪些需要治标,哪些需要治本,这是发现问题的基本判断力。现在系统可能没什么大问题,但你要有发现的眼光,这些问题如果不解决,未来业务可能遇到更严重的问题。架构师看问题的眼光和别人不一样,不要只看见眼前这一个问题,还要看见这个问题背后是什么,这一类问题背后是什么,我怎么能用抽象的方法解决一类问题。想好了以后,我就把当前的这个问题先解决掉,其他的问题用抽象的方式去解决它。定义和分析问题
阿里不缺解决问题的同学,但是缺定义问题的同学。你怎么知道这是个问题,并且把这个问题定义清楚。需要将发现的问题进行抽象和归纳,定义出问题的基本要素,同时定义出问题的短期和长期方案,推进技术整体的进步。定义问题这个要求非常高。大家平时在解决业务技术问题的时候,也需要具备分析和定义问题的能力,把一个问题定义清楚了,可以真正推动业务往前进。解决问题需要实施路径和解决方案,协同团队和上下游,推进问题的解决。架构要解决的问题一定不是一个局部问题,一定是一个全局问题。架构师一定会碰到各种各样的角色和链路,他要有这个能力去定义问题的解决方案和实施路径,同时要协同团队。他不能闷头做事,真的要抬头,并且要有良好的沟通能力,跟所有的同学达成共识才能往前进。第一点就是沟通能力非常关键。你怎么把这个问题说清楚,切中问题的点,同时也能帮助上下游带来实际的效果。第二点是架构师需要能救火,但不仅仅是救眼前的火,应该救未来的火,架构师救火能力要很强。我来阿里之前在做一个CRM系统。后来我要解决很多业务的问题,要把它抽象出来,去做业务问题下面的基础平台。再后来发现基础平台的问题如果要解决得更彻底,还要做下面的中间件,这样层层深入就会把整个链路打通看懂。从年到业务平台以后,我学到了很多,包括它的系统链路是什么样的,数据链路是怎么样的,整个调用链路是怎么样的,它和底层的关系是什么样的,可能遇到什么样的问题?现在可能出现这个问题,再往后运行是不是会出现其他的问题。通过救火的过程,一次次积累对系统的了解。所以,每一次过去的积累对于解决现在的问题还都有很大的帮助,每一次问题的解决又能让自己对全局有更深的理解。架构师的挑战第一点是全局式的视角。比如看到“会员”这个业务功能,你不能仅仅看到这个功能本身,你要看到会员上面的业务是什么,谁在用会员,这叫全局。同时,会员用得最多的是导购和交易,登录仅仅是会员本身一个很小的业务功能而已。基于会员,我们有导购、有交易,把这些东西要串起来看明白,就能完整的认识到会员到底提供了什么,一定要有一个全局视角。第二点是技术广度。阿里的技术特别复杂,能入职到阿里来,把阿里的整个技术栈完整摸一遍的同学真的是很了不起。以单元化架构为例,我们可能需要了解端,有iOS、安卓、PC,还要了解CDN、网络、接入层、服务发现、服务路由、HSF等。数据库包括储存同步、多点写,还有消息中间件等。这些技术和产品其实平时同学们都在用,但架构师不仅在用,架构师真的是要去把玩,彻底了解透彻这些东西,这是关键点。给大家举个例子,像数据库组成的强同步,对我们后续技术架构演进和业务的改进都有极大的影响,这个时候大家要对数据库有一个全局的认识。年Oracle数据库用得非常多。我当时不是做数据库相关的,但是为了把Oracle数据库研究透,去学了非常多Oracle数据库相关的内容。了解里面的逻辑,知道它的开发态、运行态、管理态等。知识都是有延续的,后来到了阿里,可能花很短的几个小时就能把现在阿里的数据库吃透。技术的广度非常依赖于积累。你一定要带着问题去想,这个时候你才有记忆力,有了积累,慢慢的你技术的广度就会越来越深。你要了解数据库,你必须对下层的网络了解,所以我们要对网络、CDN有更进一步的认识。年,我大概花了两年的时间学习网络,对交换机、路由器、骨干网、城域网,运营商怎么建网,自建的IDC怎么建网有了比较全面的了解,包括每天跟网络怎么交互,为什么重传高?为什么延时高,TCP/IP第4层的下面IP第3层是怎么操作的,IP下面的MAC层是怎么操作的,大家都要深入了解一下。这些积累最能体现出价值的就是在救火的时候。我去救火时根本不会用现在那些平台化的工具,直接上手用TCP代码抓原始发文,马上能分析出很多问题。这就是平时的积累,慢慢的你就会对全局有认知。年整个核心系统上云的时候,同样跟技术的广度有关系,我们上云发生了什么变化?整个底座到云上去了,计算、存储、网络全到云上去了,那要了解云啊。在年的时候,我基本把阿里云的云产品都了解了一遍,这时就会对阿里云的网络、技术有本质的了解。架构师一定要有技术的广度。大家一定要学会积累,积累到一定程度以后,你会做到无师自通。比如你了解网络、数据库,然后你又了解了磁盘30%,当这些知识逐渐成体系了,你是有能力去消化和打通不同技术点背后的相关性,对于你的个人能力的提升和认知层面的提升有巨大的帮助。第三点是持续的学习。每时每刻都在发生技术的升级和变革,只有持续不断的学习,才能对老的架构有新的认识,对于老的问题产生新的解法。要了解业界最近在发生什么变化,这个领域最关键的项目和人在做什么,学习他们的技术,学习他们的论文。我以前每天大概2到3个小时是用来学习,这几个小时的学习时间是我最放松的时间,不用去想太多事。学习也不是说去瞎学,一定要有体系化的。首先跟你工作相关的,要体系化的去学习,从最下到最上体系化去学习,学习完了以后你会有新的不一样的认识。把你的想法可以向你的团队说出来,向你的主管说出来。还有就是要去看论文。跟数据相关的,OLTP和OLAP都有非常好的论文。看了论文以后再看其他人对论文的理解。一定要去看一些比较好的东西,跟工作相关的都可以去看,每天去学习。每天花2到3个小时去学习,三年以后你就知道自己跟别人完全不一样。有人说过:在一个行业你能付出1万个小时,你会跟别人形成本质的区别。但是在我们这个领域,个小时就形成差别。第四点是业务理解。这个一定要到实践中去,不是业务离不开架构,而是架构离不开业务,业务、架构、技术要三位一体才能达到最佳的效果。我们平时学习、实践的过程就在磨刀,但你不能说你天天在磨刀,总得要用这个刀。这就是跟业务结合起来,用不一样的思路解决实际的业务问题,会带来更低的成本、更高的效率。最后是结果。要将技术的先进性转化为业务的先进性,忘掉屁股。这个“忘掉屁股”就是你做很多事情不是你一个人能搞定的,复杂、越大的事情是要协同更多的人。如果你就是为了你自己,比如说KPI去做事,我告诉你,这个事情做一次两次可以,但后面就没人跟你配合。你一定要忘掉屁股,才能慢慢的把这个事情做成,真正做到你想要的结果。遇山开道、遇水架桥,这讲的是决心。很多时候问题确实很难解决,也需要协调更多的人。很多人可能会放弃。我们最近在做架构的升级,用国产化芯片,从底到上全链路的。如果有一方配合不到位,这事情就很难推进了。从4月份一直到7月底被阻碍了两次,第三次如果再没办法开展下去,这个事情就彻底的结束了。我们当时把整个团队召集到一起,互相打气:一定要干成。遇山开道、遇水架桥,有什么问题抛出来,大家一起来解决,要有决心,更要果断。-EOF-想要加入中生代架构群的小伙伴,请添加群合伙人大白的