【51CTO.com原创稿件】在WOT2016移动互联网技术峰会上,猪八戒网研发总监易兵基于猪八戒网八月八免单日的IT架构,同与会者交流了他在性能优化方面的心得体会。
首先他介绍了猪八戒网八月八免单日,这是中国服务领域第一个真正属于创业者的节日,也是十年来规模最大的创业免单活动。1万家企业、1万家服务商,在这一天成交15万单,成交额近10亿,这在服务垂直领域,甚至B2B领域都算得上规模空前了。
在八月八免单日这样大规模活动背景下,现有架构会承担到哪些挑战?面对这些挑战会采取怎样的技术原则进行应对?在这些原则下采取了哪些技术实践?易兵通过五个方面来谈如何进行性能优化。
技术架构现状很骨感
猪八戒网通过前面十年的沉淀,形成第一代技术架构,看起来比较骨感:从下往上第一层MySQL,MC、redis,在服务端是异构结构,不是纯粹的JAVA/PHP,是异构,基于JAVA做了部分SOA服务化。在后端基础上封装出对外移动API、PC API,包括承接波端,总体瞄准语音+波端结构。横向的是运维,目前能够实现像弹性扩容,在时效性方面有提升空间。
在这个现有基础上承接大型活动,面临的挑战主要包括两方面:业务和技术。
业务的挑战是具有非标、个性定制化特点,无法像糖果网女装或3C产品那样,各个参数都按照标准化生产。传统电商中下单意味着成交,而服务垂直行业非常不一样,下单仅仅是开始,背后会有太多线下交流。此外,购买频次较低,客户大多属于理性消费,无法像消费品一样频繁购买,红包这类促销手段影响力有限。
技术方面最直接的挑战是流量暴增,PC端暴增12倍,移动端涨到30倍,还包括技术领域非常感兴趣的免单券秒杀。秒杀会有防刷以及弹性容量模型,如何保证六个九极致业务高可用,在全天保障业务百分之百可用?
此外,用户体验方面也有挑战,从端到端进来,包括从无线网络进来,到JS站、到核心骨干网,到企业端JSLB,LB接到服务端,用户达到的响应速度要极力保障。此外还有主页面的容错等等
“一句话,这个挑战是猪八戒网有史以来所面临的最大一次挑战,完全从一个内部挑战变成外部和行业挑战。”易兵总结道。
5大原则应对挑战
既然挑战这么大,那么该如何应对呢?易兵归纳出5大原则,正是用这5条技术原则,帮助猪八戒网完美应对诸多挑战。
用户体验至上,动静分离原则。把用户最终拿到的响应链、落地链做动态内容和静态内容分离,能够静态化的内容尽量静态化,使得用户的一次访问、一次落地不需要经过服务后台。这些静态页面包括HTML、JS,都会上CDN,一方面给用户快速体验,另外一方面能够同时缓解分流主站带看压力。动态内容是采取多级CACHE,是热数据概念,多级CACHE从前端浏览器到WEB后端,像PHP WEB后端,以及到JAVA SOA服务后台CACHE,这是动静分离的原则,给用户快速响应。
隔离部署原则。如此大型的活动面临着30倍流量的暴增,如何确保不因为本次一天的活动影响主站业务?易兵团队采取独立运营的部署,将活动关键业务路径、关键业务逻辑采取独立运营部署,整个链路从前端到WEB后端、到服务后台,到PHP WEB后端和SOA JAVA后台,都是采取独立部署的隔离和把主站性能隔离开来。
主业务全链路99.9999%极致高可用原则。从前端、NGINX接入层、后端、SOA核心服务进行全链路性能优化。在整个活动过程中清理了所有慢SQL,所有时耗超过2秒,返回的结果集超过100都需要记录,最终优化效果很理想,从500多秒SQL优化到500多毫秒。此外还包括对执行计划的优化,对于索引的优化,使得查询能够命中索引。从业务场景、业务设计需要能够规避产生900甚至1000以上结果集。
旁路服务可降级的柔性服务原则。八八免单节活动是猪八戒网第一次为Dubbo RTC引擎扩展保护,使得全链路具备了柔性服务能力。在88节当天SOA抢眼单,过高的DPS是2K,在当天秒杀卖出流量最高峰时超过2K,复发到过载保护,只发生了653次过载,这就是过载保护体现了具备全链路柔性服务能力。另外在当天会产生很多日志,很多服务缺乏规范会打出很多日志,会超出ELK处理能力,旁路服务属于关键电路以外的旁路服务可以降级,这是柔性降级的概念。
封网后稳定性第一的工程原则。易兵表示,免单节也在像阿里淘宝学习,包括在工程的运作,像淘宝组成指挥部,也算是落实了封网后稳定性第一的要求。需求变更、问题修复都是受到严格的控制,都需要经过严密评审,目标只有一个是收敛变更。
88节整体技术方案
易兵表示,从这个层次结构可以看出整个架构分为数据层、服务层、后端以及多端。端口包括App、触屏、PC,在秒杀活动中,全天有15万单,1000万服务商、500万雇主上线参与活动,这其中一定有大量请求是无效请求,猪八戒网会根据用户token、频率、验证码、IP、Reforer,把70%以上的无效请求过滤掉,进行到Web后端。本次活动有全链路落地过载保护,Web后端这部分是组合了RateLimiter,会对整个超出服务后端、服务节点过高高容量部分限掉,比如后端过高容量只能承载2K DPS,超过部分会被过载组件限流掉。
在核心服务层包括免单券服务和库存服务,库存服务是准确秒杀的核心,如何保证库存数据强力提醒,这个数据不仅仅是SKU和技术性那么简单,还要包括用户,比如这个企业能够拿抢免单最多两单,用户维度和SKU两个维度综合的,就涉及到redis的失误。同样核心服务也是做了限流、过载保护,超出部分也会被限掉。
抢免单秒杀技术方案
易兵表示,这个方案的要点,首先是独立部署。在预处理部分,要考虑用户指标是否已达上限、用户是否有分享、分享之后的上限是否已经达到,以及SKU库存控制。如果整个work pool存在没有做仓配隔离,那就意味着当有慢任务,慢查询、慢性网络操作时,会导致拖死work pool。猪八戒网本次做了仓配隔离,启动一个独立线程池来处理秒杀。
其次像核心服务设计,从多端,App、触屏、PC进来的各种客户端,要使用发放服务、使用服务、查询服务以及转正服务,免单券服务组合过载限流的组件,SKU服务、库存服务都是进行全链路的过载限流,超出过高容量部分全部会被限掉。热数据部分会落到redis,采取主备高可用方案,mysql也是一个高可用的主备方案。
未来技术架构2.0
易兵表示,猪八戒网现在也在思索如何更好地推进第二代技术架构,像Docker、微服务技术这样的技术热点都会采用。
他认为容器化是近年来非常大的技术创新和技术突破点,它重新定义了整个研发流程,可以把整个开发环境标准化,无论是PHP还是JAVA。在测试部分、开发环境、测试环境、预发布环境、线上环境,都可以通过容器化进行重构,拉通到部署、发布,包括监控、服务治理。
易兵所言的服务治理包括服务发现、服务注册、建章检查、负载运衡等,这些都是标准服务治理内涵。在基于Docker二代技术架构体系下,服务发现有两个核心的指标:第一个是发现的时效性;第二个是能不能放ADC,只能支持一个ADC,还是基于多个,能够跨层如跨ADC结构。
此外猪八戒网还将标准化完备的中间件基础设施,纳入到绿色平台,拉通开发到PaaS服务治理。“我们会基于容器化的思路来构建整套中间件基础设施,同时也会在这个过程中重新定义研发的事。”易兵表示。
在基础设施上会找出各种丰富的业务,包括全站统一账号体系,像交易平台、钱包、广告平台的推荐和匹配。像配置中心,目前采取集中式配置,是通过一种端主动去拉取的方式。运维平台在Iaas基于OpenSteck,Test自己来打造。
本文由易兵于2016年8月,在WOT2016移动互联网技术峰会性能专场《八八节背后的技术实践&思考》主题演讲整理而成。WOT2016大数据峰会将于2016年11月25-26日在北京粤财JW万豪酒店召开,届时,数十位大数据领域一线专家、数据技术先行者将齐聚现场,在围绕机器学习、实时计算、系统架构、NoSQL技术实践等前沿技术话题展开深度交流和沟通探讨的同时,分享大数据领域最新实践和最热门的行业应用。了解WOT2016大数据技术峰会更多信息,请登陆大会官网:http://wot.51cto.com/2016bigdata/
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】