运营质量的好坏关系着用户的体验。在日常的业务运营过程中,商品无货、页面或券过期、商铺下架、视频无法播放等问题都严重影响用户体验。如果仅凭运营的人工监控和维护来保证服务质量,不仅效率低,而且效果也不佳。业务的需求是驱使技术革新的原动力。818 前夕,面向苏宁易购线上运营质量保障的先知平台正式上线。

\\

先知平台的设计理念基于“As was foreseen”,正如预想的那样,线上运营过程的服务质量是完全可控制的。先知运营保障体系包括线上故障发现、应急响应、故障定位、快速恢复,形成完整闭环,能自动化帮助运营修复线上问题。

\\

下面就来看一看先知平台背后的技术实现细节。

\\

\\

图 1. 基于先知的运营保障体系

\\

基于 Selenium ChomeDriver 的性能监控

\\

先知平台最基本的功能是模拟用户(带有真实用户会话信息)来对页面进行扫描(爬虫),在浏览和购物的过程中发现潜在的运营问题。我们将问题分为三类:业务、功能和性能。业务类问题包括商品无货、页面或券过期、商铺下架等;功能类问题包括数据埋点缺失、风控失效、推荐降级等用户无法直观感受,但会产生严重后果的问题;性能类问题包括页面 yslow 评分、状态码错误、接口响应超时等问题。

\\

技术上,我们基于 Selenium ChomeDriver 实现对页面的扫描,它提供了一套用于 Web 应用程序的自动化爬虫工具。这里有几个技术实现细节值得分享:

\\

  1. ChomeDriver 使用的是 Headless 模式。Headless Chrome 是 Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行你的程序。相比于 UI 操作,Headless 模式大幅提高了我们的扫描效率和性能。\\t
  2. 实现了针对页面性能数据的采集。一般的爬虫主要是针对功能逻辑的验证,很少覆盖页面和接口的加载性能。我们参考谷歌的 Chrome DevTools Protocol,开启 ChromeDriver 的 PERFORMANCE 日志,可以收集到页面交互过程中的页面(Page)性能和网络(Network)性能数据。\\t
  3. 启用 ChromeDriverService。这完全是出于提高测试性能的考虑。我们知道每次创建一个 ChromeDriver,完成测试以后再释放掉这个对象,等下次来了一个新的测试,仍要再新建一个对象,如此反复。这相当于每次都打开浏览器,再关闭浏览器,再打开浏览器。这种实现方式并不利于高并发大规模的使用。我们希望如 Java 的池化设计思想一样,初始化生成多个持久化的浏览器对象,后面每次测试都用这些浏览器对象进行,这样会极大提升测试性能,避免了往复创建和关闭 Chrome 进程的过程。因此引入 ChromeDriverService,ChromeDriverService 是一个管理 ChromeDriver server 的的持久化实例。\

下面是一个简单 demo:

\\

\// 设置 Chromedriver 路径\System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY,\                    System.getProperty(\"user.dir\") + \"/drivers/chromedriver\");\// 启用 ChromeDrvierService 持有浏览器进程\ChromeDriverService chromeDriverService = new ChromeDriverService.Builder()\                    .withVerbose(true)\                    .usingAnyFreePort()\                    .build();\// 启用 Headless 模式\ChromeOptions options = new ChromeOptions();\options.addArguments(\"--headless\");\\// 开启 PERFORMANCE 日志采集\DesiredCapabilities cap = DesiredCapabilities.chrome();\LoggingPreferences logPrefs = new LoggingPreferences();\logPrefs.enable(LogType.PERFORMANCE, Level.ALL);\cap.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);\cap.setCapability(ChromeOptions.CAPABILITY, options);\\driver = new ChromeDriver(chromeDriverService, cap);

\\

动态编译引擎 DynamicEngine 实时加载监控脚本

\\

在监控的过程中,不同的业务需要关注的指标往往不同,且随着促销活动的进行不断变化。比如,之前我们没有对商品售罄状态的监控,运营有这样诉求时,要求我们必须马上能在生产环境实现对商品状态的监控。为了做到监控脚本的热拔插,我们自己实现了动态脚本编译引擎 DynamicEngine,能够实时在生产环境增加监控模板,面对需求变化具备灵活的可扩展性。

\\

要实现 DynamicEngine,基于 JavaCompiler 读取源码,编译诊断,输出 class。JavaClassObject 负责文件抽象,代表源代码或者编译后的 class。ClassFileManager 管理 JavaClassObject,负责 JavaClassObject 的创建和保存位置,根据 Java ClassLoader 的双亲委托模式,我们需要实现自己的 DynamicClassLoader,DynamicClassLoader 继承自 URLClassLoader,将生成的 class 动态加载到 JVM。

\\

\\

图 2. DynamicEngine 类依赖图

\\

Quartz 实现定时任务调度

\\

定时任务的实现基于 Java Quartz,Quartz 是目前最为成熟, 使用最广泛的 Java 任务调度框架。Quartz 运行时由 QuartzSchedulerThread 类作为主体,循环执行调度流程。JobStore 作为中间层,按照 quartz 的并发策略执行数据库操作,完成主要的调度逻辑。JobRunShellFactory 负责实例化 JobDetail 对象,将其放入线程池运行。LockHandler 负责获取 LOCKS 表中的数据库锁。

\\

\\

图 3. Java Quartz 任务调度交互图

\\

先知的监控模式包括主动监控、被动监控和漫游监控三种。主动监控是运营在后台直接配置的监控任务。被动监控是与业务系统打通,提供公共接入 API,运营页面或者事件生成时自动构建监控任务。漫游监控的设计初衷借鉴了 Chaos Monkey 的思想,运营很难知道下一个出问题的是哪一个活动页面,既然如此,我们建立了从流量入口页开始的漫游任务,会不断爬取链接建立任务来发现问题。不同的监控模式的集群是隔离的,避免任务占用资源互相影响。

\\

\\

图 4. 先知平台的任务调度

\\

先知智能运营的场景应用

\\

前面我们所阐述的监控扫描、脚本执行和定时任务调度方案,虽然能帮助运营发现线上问题,但解决问题仍需要运营的人工干预。在某些情况下,运营并不能及时完成页面的修复和维护,需要自动化的运营方案。所以,先知不仅仅是一个针对运营的监控告警平台,它还能自动化修复线上问题。

\\

智能运营的设计思想是,先知与推荐系统、泰坦系统(运营内容管理平台)打通。如下图所示,我们以促销商品售罄问题为例,当先知发现这个问题后,先判断这个商品坑位是否允许降级,如果允许,则调用推荐系统,根据用户信息推荐出与此款商品偏好类似的替代商品。在通知泰坦系统,将替代商品维护到这个坑位。这样既保证了线上热点坑位始终有货可卖,又满足了用户的购物偏好,保证了用户体验。

\\

\\

图 5. 先知智能运营的场景应用

\\

总结

\\

目前,先知承担了苏宁易购所有线上运营页面和活动的服务保障工作,日监控任务 10 万余个,发现并解决问题 6400 余个,帮助运营迅速定位线上问题,平均缩短解决问题时间 30 分钟,显著提高了易购的线上服务质量。未来,苏宁易购将致力于把先知打造成为开放的一站式线上服务质量保障平台,大规模监控任务并发执行、海量数据分析、智慧运营服务化都将成为苏宁易购新的技术研究和攻关课题。

\\

作者简介

\\

朱羿全,南京航空航天大学硕士研究生毕业,苏宁易购消费者研发中心高级技术经理,主要负责易购各系统架构优化与大促保障工作。先后参与了易购整站 Https 改造、苏宁拼购架构改造、先知业务监控平台建设等工作。专注于打造高可靠、高性能、高并发服务系统的技术研究。

看苏宁易购的运营保障体系如何hold住818大促相关推荐

  1. 从六一宝宝节“共情消费”看苏宁易购“专注好服务”理念

    5月26日,苏宁易购举行"六一宝宝节"启动大会,并邀请了包括傅首尔和老刘.大王和她男朋友吕鹏兴.陈铭.颜如晶.刘擎等人参会,为观众们带来了一场精彩的辩论赛.会上,苏宁易购首次提出了 ...

  2. 从2019年报看苏宁易购的全品类+全场景零售融合变革

    4月17日,苏宁易购发布2019年年度报告.报告显示,苏宁易购2019年全年营业收入2692.29亿元,归母净利润98.43亿元,交出了全场景零售布局完成后的首份答卷. 从年报看,疫情之下的苏宁易购全 ...

  3. 从两则新闻看苏宁易购的架构设计

    苏宁易购与网宿科技达成合作,技术优势或成电子商务竞争关键 日前,苏宁电器正式对外发布2011年3季度季报,其旗下的电子商务平台苏宁易购业绩斐然,仅2011年前三季度就实现营业额近41亿元,紧随淘宝商城 ...

  4. 止血、回血 苏宁易购正在复苏路上

    扛住二三季度的至暗时刻,苏宁易购正在稳住其基本盘面. 在10月29日苏宁易购披露的2021年前三季度业绩报告中,公司前三季度营收达到1155.74亿元.虽然财务数据上公司仍处于"三十年发展历 ...

  5. 破解智慧零售密码 苏宁易购818引爆全民消费狂欢

    对于零售行业来说,2019年上半年的种种迹象都显示,整体市场环境并不让人乐观. 根据国家统计局数据,2019年1-6月,全国实现社会消费品零售总额19.5万亿元,同比增长8.4%,增速同比回落1个百分 ...

  6. 苏宁易购818“悟空榜”战况激烈,“反馈经济”时代即将来临

    "我们的行为.位置,甚至身体生理数据等每一点变化都成为了可被记录和分析的数据.以此为基础,"反馈经济"(feedback economy)等新经济.新商业模式也正在开始形 ...

  7. 合纵连横、多线发力,苏宁易购稳步向好

    仅一个月时间内就敲定了与30家大企业近300亿元的战略合作.而且还携手美团开始在即时零售业务板块发力--曾经陷入困境的苏宁易购,近期却以稳定增长的核心业务.以及效率极高的升级转型,成为人们关注的企业. ...

  8. 苏宁易购财报看点:加码线上业务布局,注册会员增至6.23亿人

    近日,苏宁易购(SZ:002024)发布2020年第三季度报告.财报显示,2020年前三季度,苏宁易购实现营业收入1808.62亿元,比2019年同期下降10.02%:归属于上市公司股东的净利润5.4 ...

  9. 看不懂!苏宁控股“卖身”淘宝,“盲盒第一股”市值破千亿,超过苏宁易购

    2020真的发生太多大事了,哪怕就是最后一个月,陆续发生的事件也让人难以置信. 这两天又发生两件大事: 12月10日,苏宁控股集团三大股东将手中所有股权出质给淘宝: 12月11日,"盲盒第一 ...

最新文章

  1. LeetCode 406. 根据身高重建队列
  2. New Phytologist:王建军等综述全球变化下的山地微生物组和生态系统功能
  3. 干货|知道Excel这9个小技巧,不做二傻子!
  4. Select 子句后的别名,在where条件中不能使用
  5. 036_PageHeader页头
  6. 网络协议栈11:Connect函数分解之TCP层
  7. ADO.Net之SqlConnection、 Sqlcommand的应用(读书笔记1)
  8. webpack中library和libraryTarget详解
  9. 安装keepalived执行make报错的解决方法
  10. 刚接手的项目代码 怎么看_你们刚开始是怎么看英文文献的?
  11. Android :安卓学习笔记之 Handler机制 的简单理解和使用
  12. dnspod.cn 动态域名客户端
  13. 3dmax 2014加载panda3d插件失败
  14. java计算机毕业设计H5乡镇疫情防控系统源码+mysql数据库+系统+lw文档+部署
  15. feature map理解
  16. Spring Data JDBC、引用和聚合
  17. DSP28335笔记 ———— 中断系统 之 外部中断
  18. EXCEL生成正态分布随机数据
  19. 60种数据可视化图表总结
  20. 设计FMEA步骤三:功能分析

热门文章

  1. Linux Shell编程之一循环结构
  2. 《Angular从零到一》导读
  3. 第十二节 VMware View 6.0 菜鸟入门 部署和安装2008 R2 RDS服务
  4. android之Fragment(官网资料翻译)三
  5. linux png pdf,将多页PDF转换为PNG并返回(Linux)
  6. Pod详解-资源配额
  7. zookeeper的设计猜想-leader选举
  8. mybatis-逻辑翻页
  9. MyBatis 实际使用案例-核心配置解读
  10. 基于SpringJDBC 实现关键功能-QueryRuleSqlBulider