之前在百技有听过伏威的课程,当时印象很深刻是他的笑声,那是相当的impressive。从他的身上,感觉到管理与技术很好的融合。听了infoq上的访谈,对淘宝的系统,以及认识上果然比我们要深刻的多啊。以下是我听完后的大概记录。讲的还是蛮不错的。对双十一,淘宝的应对措施做了阐述,对于我们以后遇到这种高访问量的情况,很有指导意义。
其实到现在为止距离淘宝双十一事件已经过去蛮多天了,但在整个技术圈里 面大家还是津津乐道。我这次在采访之前在和一些网友做沟通的时候,他们也提出了非常多非常有意思的问题,包括一些高并发的,一些压力测试的等等,那我希望 也代表这些网友和你做一个交流。那第一个问题就是,在那么大的访问量,淘宝的技术团队是如何做到一个高并发处理的?
答:CDN ,将资源放在离用户最近的位置。 Node balance 如何去做均衡处理。对用户的登陆状态的记录,因为每次处理请求的机器可能不同。
应用集群与后端的服务集群之间如何均衡处理访问请求。
核心服务与数据库,分布式缓存等
做到水平扩容,可以通过加机器的方式进行扩展。
从前台到后端,每一个地方都有优化的地方。
一个比较具体的问题就是像高并发访问页面数据,如果说实时更新的话,它应该是如何去做到实时的同步?
答:大部分系统存储的源和访问的源是相同的。
不过做了读写分离,存储的源与访问的源是不同的,存在一个数据集群同步的操作,有一个时间延迟,当然对前端用户而言,是感觉不到的。数据库层面的读写分离,一个可以用由应用去做,写两份数据,或者通过消息做异步的复制。另外可以通过数据库日志进行分析,发现变更的数据,就将其同步到另外一个数据集群里。
那我们来谈一谈就是一些关于压力集成测试的问题,很多网友他想了解一下在淘宝双十一事件之前,淘宝的整个技术支撑团队,有没有对网站做一些比较大的压力集成测试?
答:没有。因为很难。由于淘宝的系统耦合性很低,无法做到完全复制一个淘宝,模拟出大量的用户请求进行模拟测试。思路是对每个系统独立性能测试,对核心系统寻找性能的短板,发现短板进行解决。性能测试团队建立了性能测试模型,可以做到压测出数据库的与 JVM 的问题。当然这种压测需要设备,成本,人力投入还是蛮大的。硬件要是一样的,系统部署也要是一样的。还有一个模式,是在交易非高峰期,进行引流量到某台机器,进行压测,这样可以最接近访问实际情况,但在这么做有一定的风险,很有可能导致某些用户访问出现问题,所以不要追求数据的极限,觉得可以接受,就可以了。
经过这个压力测试,包括对数据库,对 JVM ,包括对操作系统,可能都会它们的缺陷给找出来, 那么你们会针对这些缺陷会调整它们的系统参数吗?
这些参数会进行调整。参数调整与性能压测会持续的循环。不会再双十一那天进行参数的调优,这说明平时的工作没有做好,这个一定是之前的工作就要做到位的。
其实在双十一事件之前,你们也做了很多的预案,当然对访问量也做了一些 预估,有些人就想了解一下,如何对访问量做预估,能够让它的准确性更高。因为你准确性更高的话,这样你才能准备更多的机器包括一些存储设备来应付这样的情况?
答:当天的流量很难预估的,很难预估到会员的购物热情。我们可以做到是,根据历史数据,知道系统的压力和配比情况,系统压力增长 50% 的话,需要预留的机器,当压力增长 100% ,又需要预留多少机器。这个是可以提前有所准备的。
那么大的访问量有运用到一些像虚拟化技术或者云计算技术这样的一些技术 吗?
所有的应用都是运行在虚拟机上,就是在实体机会被分割成 3 到 4 台虚拟机,在这个上面部署应用。云的方面,随时划分机器,动态分配资源,目前还做不到,目前是通过加机器做到水平扩容,这也是努力的方向 .
那面对这么高的访问量,淘宝技术团队是怎么来监控各个关键点压力的?就是如果说某一个节点上 出现压力或者故障,如何去比较平滑的去切换处理?
答:
1, 淘宝有一个监控中心 , 对系统的流量 , 访问情况 , 压力 , 进行监控 . 会设置预警点。
2, 每个系统的支撑团队要有自己系统的监控机制,做到心中有数,允许团队自己构建监控机制。
3, 当系统发生风险的时候,要及时反馈,汇报给 leader ,配合进行改造。
4, 水平的且流量还是会做的,当时工作在平时,最好有所准备。
5, 服务降级。
我听过一些传言说,如果说这个交易再持续那么几分钟,那整个的系统可能就会出现问题,有没有 这么回事?
时间不是问题,当支撑过去的时候, 3 分钟, 3 小时, 3 天时没有差别的。真正会有影响的是流量如何再增长 10% 或者 20% ,就有可能挂掉,淘宝的周边系统,比如银行,支付宝,旺旺,会可能出现问题。不过双 11 庆幸的是流量在预留的范围内撑住了。明年就可能会做 4 倍, 5 倍的考虑。
整个实践来讲还是比较平滑的。那我们想了解一下,作为整个淘宝研发团队 的负责人之一,在未来淘宝在做一些技术改造的时候,它应该沿着一种什么样的方向去走,有没有什么样的一种思路?
答:1,希望保持交易的稳定,可水平扩容。提供额外的服务,支持业务多样化。
2,这些核心系统可以做剥离,做到可插拔。当然这个是与 SOA 的可插拔有区别的。
3,单打独斗的时代结束了,技术需要做到更全面的评估,看到更广的范围。比如 UIC 对后台的存储, DBA 的合作,网络的合作。之前有过 R EVIEW,UIC 应用服务器与缓存服务器之间的路由遇到瓶颈了,所以对网络拓扑都要考虑。不同的团队有不同的方向,但是在整体上做到。
那总结一下就是核心系统要比较精巧,外围系统可以稍微复杂一点。但是另外就是非常讲究一个 整体性的一个往前推进。