作者简介:从磊,白山云科技合伙人、工程副总裁,2016年加入白山,负责云链系统的设计与建设;2006年至2015年,2009年就职于新浪,带领团队从事云相关领域的技术研发工作。中国第一家公有云PaaS平台SAE创始人;工信部可信云服务认证评委。1“双十一”的压力不知道从什么时候开始的。“双十一”成了“购物节”。这种全民狂欢的购物,对金融业来说是一个巨大的挑战。巨大的压力。据悉,2015年天猫交易量峰值达到每秒14万笔,而2009年为每秒400笔。用户的每笔交易背后有很多操作:首先,用户浏览多个商品触发一次购物行为;三、实际交易前,需确保库存、发货、商家优惠政策等信息;订单生成后,执行支付接口要求高度的一致性和可靠性;支付完成后,需要回调多个逻辑,包括积分计算、折扣返利、物流配送等。由此可见,每秒14万笔的交易峰值并非易事,不仅对于金融机构,也适合有丰富的高并发处理经验的互联网公司。更为紧迫的是,随着物联网设备的进一步普及,“双十一”带来的压力会越来越大。据某电商平台预测,2016年“双十一”高峰压力将增加5倍。在可预见的未来,交易达到每秒100万笔交易是完全有可能的!2解决方案本人曾参与开发过一个交易量为每秒10万笔的系统。这里有一些关于如何处理超高并发的建议。其实,没有万能药,无论是“秒杀”还是“双十一”。一个真正能够抵抗超高并发的金融系统,必须是系统中各个组件的优化。只有让每个组件充分发挥潜能,将系统充分解耦,才能做出可靠的平台。应对超高并发,最重要的两个技术就是“缓存-Cache”和“异步-队列”。3Cache——Cache这里的Cache不是传统意义上的Redis/Memcache等系统Cache组件,而是从用户端到***数据层的所有链路的Cache。对于高并发场景,第一准则是对用户行为的方方面面添加合理的缓存。业务层次图如下:如图所示,用户访问/交易行为的起点是浏览器。首先在浏览器端进行合理的缓存设置,即对里面的页面进行合理的过期规则,配合CDN端,让部分元素响应直接在浏览器缓存端返回,有效降低业务访问压力;其次,虚线所示的是业务端,主要由两部分组成,一是计算资源,运行业务代码;另一个是数据库,负责存储业务数据。业务层输出的内容分为动态+静态两部分。对于动态性居多的电商金融业务,基于静态内容的CDN加速没有特殊效果,但需要在数据接口上进行接口加速(ADN,APIDeliveryNetwork)。接口加速需要注意的是,接口加缓存不能影响服务本身。我们建议在所有读取类型的数据接口上添加Cache,将缓存时间设置为毫秒级别,并针对不同的接口指定不同的缓存策略,有效提升缓存效率。据实测,加入ADNCache后,访问速度可提升60%,后端实际负载可降低2-3倍。4Asynchronization-queueAsynchronization-queue就是把request/transaction通过队列放到后台,从同步阻塞方式变成异步非阻塞方式。比如抢购发生时,用户同时调用支付接口。同步阻塞模式下,用户数为支付接口的并发数。当用户过多时,支付数据库压力过大,严重时可能导致数据库服务宕机。采用异步模式后,抢购时,用户请求进入队列处理,队列的并发能力与数据库的并发能力相匹配。用户请求按顺序处理,有效保护数据后台。队列不仅仅保护后端数据库。秒杀场景下,当很多用户抢购商品时,可以先将抢购请求放入队列,然后进入后台筛选流程(如按重量排序、按优先级排序等),最后调用实际下单接口。队列可以根据产品需求选择两种不同的模式:一种是全异步模式,即进入队列后立即返回成功,并通过回调将结果通知给调用者;另一种是半异步模式,即进入队列后,调用者挂掉,真正执行结束后,返回成功或失败的结果。5小结应对“双十一”的高并发,主要使用缓存+队列异步。缓存的重点在每一个环节,尤其是传统上容易忽略的数据接口。必须进行合理的缓存。对于高并发请求,需要异步非阻塞处理,防止“泛滥”现象,保证业务稳定有序运行。——————————————————————————————————————————————————————————————————————————————————————
