双11后续报道:“中国规模”负载背后的技术支撑

从应用层面上讲,天猫和淘宝的应用都构建于自主研发的服务化架构以及MVC框架和Spring之上。这是由分布式文件系统、分布式缓存、消息中间件和CDN网络带宽支持的。核心数据库可以通过自主研发的数据访问中间件访问,底层数据库的水平拆分和数据搬运对应用是完全透明的。

基于这种水平扩容架构,面对促销活动引起的流量压力,天猫和淘宝的系统可以灵活地添加机器来应对。

    前期我们花了很多时间进行容量计算,对于网站所有应用之间的依赖关系、流量分配比例和应用内部的调用链路做了深入的分析,通过在线的压力测试对各个应用单机的QPS进行准确评估,从而达到对网站目前集群处理能力的客观判断。这个过程操作起来实际上是非常有挑战的,因为天猫和淘宝本质上不是一个耦合性很弱的系统,通过单一系统的压测不能很好地反映系统的瓶颈。同时,我们也不可能完全照搬线上的环境和配置一套完整的压力测试环境。所以会更多地依赖线上的压力测试,真实地反映系统的短板。

    最后,则是根据网站的自然增长趋势和双11的历史数据,评估当天有可能达到的业务指标,再从这些业务指标对各个系统扩容目标进行准确地计算。

    当然,仅仅依靠水平扩容方式,对于大促高峰过后的机器利用率是存在弊端的,同时也会大量依赖运维人员的灵活调配能力。因此,今年我们在以聚石塔为代表的一些应用中也尝试了大量的弹性计算框架,在塔中很多商家的不同应用共用一个集群的系统资源。双11当天弹性升级带宽、VM和存储资源。同时,我们的很多内部应用也采用了这样的机制。这也是今年在双11准备过程中我们在技术上的一个突破。


在双11大促的准备过程中,淘宝和天猫的团队对系统进行了针对性的优化,包括SQL和缓存命中率的优化、数据库连接和应用服务器参数的调整、JVM参数的配置、代码的复审和梳理等等。此外,大量固态硬盘(SSD)的使用也提高了数据库存储的整体性能。

为了在负载超过预期时关闭非核心操作,团队也准备了业务降级和限流预案。


所谓业务降级,就是牺牲非核心的业务功能,保证核心功能的稳定运行。简单来说,要实现优雅的业务降级,需要将功能实现拆分到相对独立的不同代码单元,分优先级进行隔离。在后台通过开关控制,降级部分非主流程的业务功能,减轻系统依赖和性能损耗,从而提升集群的整体吞吐率。

当出现了降级还无法缓解的大流量时,就要通过限流的方式来应付。首先从最前端的Web应用进行排队,控制流入应用的流量,也就是通过Web服务器的定制模块来实现QPS限流功能。根据被保护的Web服务器所能承受的最大压力做强制的QPS流控,超出QPS上限的用户进入排队等待页面。另外,为了避免前端某个Web应用出现大规模流量激增时造成后端服务无法承载的雪崩效应,后端的服务会针对低优先级的业务进行限流,以确保不同来源的业务压力不会压垮后端服务,保障核心业务的访问。

针对2012年的双11,天猫和淘宝总共准备了400多个系统降级预案。 为了保证所有降级和限流预案的准确执行,我们在前期做过了大量的预案演习,所有的应急预案虽然原则上我们一个都不希望使用,但是必须确保每个预案执行的准确性和便捷性

猜你喜欢

转载自san-yun.iteye.com/blog/1767265