滴滴首席架构师:大流量来了架构怎么办
李令辉:滴滴出行首席架构师,常年混迹在互联网行业,擅长高性能高并发高可用的架构设计工作。
以下内容根据李令辉在TOP100Summit全球软件案例研究峰会的采访整理而成。
大流量冲击下滴滴架构的转变
滴滴是互联网中发展速度最快的,从刀耕火种到坦克大炮可能也就是两年多时间。微信红包这些补贴大战开始时,滴滴真正走上极快增长的轨道。
在补贴大战之前,滴滴还曾在新浪的SE上部署过,那时就是很简单的客户端,通过CS模式跟服务端发生交互,服务端就是PhP的进程,这是早期滴滴的架构。
到了补贴大战的时候,每个层面都被击垮,数据库被击溃,PHP被打满;这些解决了之后,又发现接入层LVS业务被打烂。再后来我们发现机器是平静的,我们上下机器的速度跟不上业务增长的速度,这时候我们嵌入了腾讯云机房。
滴滴的第一个架构改变是嵌入了一个真正的云机房。它的好处第一是扩容速度不依赖机器的速度,第二是对恶意流量防范等问题都有现成的方案。
第二步,服务的人群增多,业务越来越复杂,虽然看起来还是一个APP,但为了满足不同人群而设置的一些小的细节,使代码不可避免的变得越来越庞大复杂。在解决这些问题的时候,我们的思路是让新的业务在它真正起量之前先独立跑,等它跑到足够大,技术成为瓶颈的时候再着手解决这个问题。如果对每个业务都这么做成本是蛮高的,我们有八到十个产品线,所以这是一个研发团队的效率和稳定性的问题。
当一个业务足够大的时候怎么办呢?我们常用的方法是先评估它的流量,根据流量对最核心的组件进行扩容,扩容不下去的做改写、重写,把大服务拆成小服务、微服务,然后对每个服务单独做可用性、稳定性测试和保障。
我们现在处于第三到第四个阶段,在向自动化部署以及微服务化前进。
移动互联网架构的3个关键点
移动互联网其实是把线下资源和线上打通,它和传统互联网的区别在于:它不是类似传统互联网的简单量大的服务,而是量小但很精致的服务。
移动互联网架构怎么应对需求变化进行业务迭代,是移动互联网公司面临的挑战。因为它有线下部分,而人在使用的时候会有一些很奇葩但又客观存在的需求。美团当年经历过,其他的互联网公司比如饿了么、滴滴等也在经历这个事情。
管理线下团队需要用流程自动化的手段以提高效率,因为情况每天都在演进。在这个时代,不能简简单单追求稳定性、流量和效率。
同时兼顾迭代效率、需求变化速度和稳定性。稳定性在哪里都很重要,如果不稳定,用户打开APP就挂了,那他就不会再给机会。而流量在一开始应该不是一个问题,后来即便成问题也不会像BAT那么大,毕竟就算全国人一起订餐也没有多少,但全国人一起访问网页、使用QQ就是很大的事了。
所以这个时代的流量一定会比那个时代小一点,毕竟手机流量也不像PC流量那么便宜,这从某种意义上说带来了好处:单位后面流量蕴含的价值更高。
优秀架构师要具备的4种能力
在我看来,成为一个首席架构师或总架构师运气多于实力,这取决于加入一个企业的时机,以及在里面起到的作用。
首先架构师是程序员,但他不全是程序员。因为他是对结果负责的,这种负责不仅指对产品负责——架构师是一个管理者,负责的是整个流程。
架构师需要经验,需要见识过很多事情,拆解过很多业务,面临过很多挑战——克服了也好,被克服了也好,总之经历过这个世界上很多不愉快的事。
架构师的决策其实是权衡的过程,绝非仅仅计算机的权衡和时间空间这么简单,而是要在研发效率、工程质量、迭代速度还有稳定性上权衡,这直接决定了选择什么样的团队和架构。所以要因地制宜,多方权衡,全力保证最主要的,尽量保证次要的,保证不好也要做些牺牲。
架构师一定要是个很好的程序员,最好不只限于一个体系。有些架构师就会JAVA,这是不够的。不妨用武林高手来比喻优秀的架构师,他可能没有武器,但是遇到问题的时候能够因地制宜,该用锤子找锤子敲两下,该用镐头就找镐头刨,选择适合的工具,以此降低成本,提高稳定性。
第一、优秀的架构师应同时具备大多数领域有所涉猎的广度和一两个领域能够解决问题的深度——广度决定了架构师的视野,丰富选择,深度则保障其解决问题的能力。
可能最初业务拆分很简单,但流量大到一定程度,就必须要解决技术难题,架构师至少要有能力了解这个难题如何解决,就算目前无法解决,也要知道怎样通过学习让自己渐渐具备解决它的能力。
第二、光有技术背景不足以成为一个优秀的架构师,还需要卓越的沟通和表达能力。架构师如果单打独斗就和程序员没有区别了,他应该懂协作,如何理解别人所言,如何清晰地表达自己。
第三、可能是大局观。要看得清形势,就算不了解某些事情,也要看业界同行是怎么做的,跟着大方向走不会犯太大的错误,就怕闭门造车,出门又不能合辙——这不仅不智,而且非常危险。
第四、要敢于下注,要坚信自己的选择。简单的例子是真理大多数是掌握在少数人手里的,如果大家都懂这个道理,那为什么架构师一枝独秀,名利双收。
这包括挑战一些既成的观念和错误的想法。挑战可能有很多方法,最重要的却是决心:我常说如果架构师不能敢为天下先,领先于别人做事,那是不称职的,充其量是鹦鹉学舌。
鹦鹉学舌也不是不可以,只是要明白为什么这么学,不一定要发明什么,而是要懂得做这件事的前提,懂得筹划全局,懂得参照上的取舍。
要对做的事负责,争取资源去推动这件事,用足够的决心和表达能力说服老板和团队成员一起做这件事。