晨风 2016-04-19
2016阿里技术论坛于4月15日在清华大学举办,主旨是阐述阿里对世界创新做出的贡献。阿里巴巴集团技术委员会主席王坚,阿里巴巴集团首席技术官(CTO)张建锋(花名:行癫),阿里巴巴集团首席风险官(CRO)刘振飞(花名:振飞),蚂蚁金服首席技术官(CTO)程立(花名:鲁肃)以及来自阿里巴巴集团各部门多位技术大咖齐聚一堂,与莘莘学子分享阿里的技术梦想。
在下午的《电商技术:零到三万亿,从未停止的技术创新》分论坛上,阿里巴巴研究员蒋江伟(花名:小邪)发表了题为《零点之战,双十一背后的分布式技术》的演讲。
以下为演讲实录:
我的分享有两个部分,一是阿里技术部的发展过程,二是跟“双十一”技术相关的情况。
2008年,当时淘宝跟淘宝商城的体系是分开的,包括商品、交易、营销以及店铺等。那时候我们在维护一个庞大的系统,代码以及各种各样的问题严重制约了整个技术的发展。在这个背景情况下,我们做了分布式化的改造。
这对于技术有非常明显的帮助。举个例子,我们数据库,小到做变更,大到数据库重新选型,都可以做到比较透明。如果没有抽离出共享服务层,那这个事情的变更是难以想象的,现在我们在基础技术上去做大量的创新工作,但是上层的业务系统根本不需要去修改任何的代码。所以一个是技术上面的创新,一个是业务上面效率带来了非常正向的变化。
整个架构就变化了。原来是一个应用,它从应用到数据做完之后就变成这样了(如图),这个只是0.1版本,是用来教学用的。但是到现在已经没有办法学了,已经超过几千个系统,已经画不下的这么一个场景。
那么做一个比较大的分布式的架构需要哪些技术?第一个阿里巴巴,还要下APS,还要下筛选,还有服务框架,还有做数据的治理,另外还有我们的应用软件,还有我们的开发框架,最下面可能就是一个存储,非常重要的就是存储,很多的数据都是加入到了缓和里面。比如现在访问淘宝,经常被访问的会员的数据和商品的数据都是放在缓存的。还有文件系统,这些图片存在在系统里面,这个规模也是非常大,在全国也是非常大的一个文件系统。还有阿里的关系数据库,我们通过TDDL对数据做了分库分表,还有我们利用消息中间件解决异步流程,解决数据最终一致性的问题。通过这7个中间件的产品,构成了整个阿里技术体系的分布式架构。使得我们的工程师在开发我们系统的时候,开发一个单机版的程序一样简单。
刚才讲到的是分布式技术上的呈现,其实使用了分布式技术之后,直接带来的影响就是让我们整个扩展性得到了非常大的提升,同时,从原来的商用的体系里面变成了分布式体系之后,成本下降也非常明显。
哪些技术在“双十一”诞生的?“双十一”它是一个对于工程师来说,就像是面临高考,在座的可能就考过一次高考,我们工程师每年都要做高考,考砸了跟各位是一样的,都是非常严重。
总共7年的“双十一”下来,没有出过大的问题。差不多2年的时间整个技术体系有一些沉淀。2009年—2010年,还是懵懵懂懂的过程,基本没有出现什么问题,工程师都没有特别的感知。
但是也有一些小问题,我了解到当时最大的问题就是图片,图片由于CDN的容量到了,我们做了一件事情就是把淘宝上部分商品的最后一些图片不做显示。第二个事情,因为刚才前面讲到2008年中后期做了改造之后,整个系统全部分布式之后,系统的规模速度增加,一个是系统的数量增加,导致了整个系统的逻辑,或者说整个依赖关系已经没法用工程师的视角归置和梳理出来, 做了一个工具用来治理系统之间依赖的关系,流量,强弱。
2011年、2012年的时候192亿、370几亿,这个时候对整个交易系统的挑战非常大了。所以主要是做了整个扩容,整个容量扩大的非常快。在这之前,我们讲“双十一”最大的挑战有两个。第一个是怎么评估容量,系统能支撑多少容量,这个容量的评估那时候开始做了。第二个,一代治理,容量规划,就是说做了这些事情,其实表现得并不好,在2011年、2012年的时候前面30分钟还是出现了不少问题,突然间购物车商品被删除掉了,或者说下单的时候红包没有用,各种各样的问题。出现这些问题之后,引进了下一代技术,比如说我们做了自动化数据订正系统。
2013年、2014年有了一个先进的技术,刚才我们在视频有提到,在“双十一”之前都是在做这个事情,它是一个容量规划的新的高度。原来我们在之前做容量评估的时候,我们评估每个系统的容量怎么评估呢?通过引流,当前用户,我们把用户的流量集中在一个上面,看一下应用,当你流量不断上涨的时候你的表现情况是什么样的,我们的CPU,还有我们的内存等等。当它出现拐点的时候,我们把这些值给记录下来,这样的话就知道系统的容量。这种办法非常准确,但是有一个问题,因为你系统的量非常大,即使参与整个“双十一”的系统,我预估,因为我搞不清楚到底有多少,预估有几百个系统,直接参与“双十一”交易,就是航天飞机的零件,如果一个零件发生问题,整个就会毁掉。
在“双十一”之前我们做了这么一个事情,它是按照正完全真实的场景,全部动用现在的服务器,然后去模拟“双十一”当天可能会产生的用户行为,系统、服务器,还有真实的逻辑去做压测。与原来的压测方式相比它有几个比较好的地方,第一个原来的方式是真实的流量,但是实际情况是促销的时候,“双十一”大促的时候,它的流量跟平时的模型是不一样的,平时的路径我们是通过搜索或者翻页,“双十一”肯定不是这样的,“双十一”肯定就是所有的东西都加到购物车里面了,这个时候我很少再去做搜索或者再去下单,甚至有一些借助浏览器工具怎么样更快的抢到一些东西,模型是不一样的,但是我们需要模拟出当时的场景。总结一下我们需要这样一个技术:第一是做了一些根据业务场景做模拟的能力,第二个它能够产生巨大的流量,这个巨大的流量能够把我们整个集群,超过几十万台的流量全部压满,然后我们给那个服务器加上新的服务器,然后我们再来做,把所有服务器的流量拉平。
还有一个事情我们做了BCP防资损对账,这个产品做完之,如果出现问题会被秒级发现。刚开始做BCP的时候,我自己觉得意义不是非常大,因为我觉得如果是所有的代码是工程师写的,我认为只要经过测试上线的系统,逻辑肯定是不会出问题。感觉意义不是非常大,但是没有拒绝做这件事情。 后来做出来之后发现这个事情还是非常有意义,原因是什么?我们系统出现异常的流程会导致我们的数据出现异常。比如说我讲“双十一”的时候,突然因为我的优惠券没有使用,这时候就会发现,所以在2013年2014年的时候,整个交易额到了570几亿,但是整个表现已经非常好了,就是这个表现跟我们行业内的其他公司不一样,无论从数据上,体验流畅上面都要远远超于同行。
2015年的时候,我们达到了912亿的交易额,整个体验也是非常不错,但是我们遇到了新的挑战,为了支撑这912亿之后我们大量的计算,但是过了这一天之后,本来非常繁忙的变成非常空闲,这个成本浪费是非常大的。不过不用担心,因为利用阿里云计算,所以可以非常好的解决弹性的问题。
后面介绍一个整个阿里的文化。我们是开源项目最多的,比如说2015年开源了65个项目,还有高含量的项目18个,还有一些在国内都是非常知名的一些开源项目,这些项目都是由阿里巴巴的工程师,可能是在工作中的一些沉淀,或者说业余的时间来贡献力量。在阿里直接参与开源操作有300多人,这是开源的文化。