看苏宁易购的运营保障体系如何hold住818大促
運(yùn)營(yíng)質(zhì)量的好壞關(guān)系著用戶(hù)的體驗(yàn)。在日常的業(yè)務(wù)運(yùn)營(yíng)過(guò)程中,商品無(wú)貨、頁(yè)面或券過(guò)期、商鋪下架、視頻無(wú)法播放等問(wèn)題都嚴(yán)重影響用戶(hù)體驗(yàn)。如果僅憑運(yùn)營(yíng)的人工監(jiān)控和維護(hù)來(lái)保證服務(wù)質(zhì)量,不僅效率低,而且效果也不佳。業(yè)務(wù)的需求是驅(qū)使技術(shù)革新的原動(dòng)力。818 前夕,面向蘇寧易購(gòu)線(xiàn)上運(yùn)營(yíng)質(zhì)量保障的先知平臺(tái)正式上線(xiàn)。
\\先知平臺(tái)的設(shè)計(jì)理念基于“As was foreseen”,正如預(yù)想的那樣,線(xiàn)上運(yùn)營(yíng)過(guò)程的服務(wù)質(zhì)量是完全可控制的。先知運(yùn)營(yíng)保障體系包括線(xiàn)上故障發(fā)現(xiàn)、應(yīng)急響應(yīng)、故障定位、快速恢復(fù),形成完整閉環(huán),能自動(dòng)化幫助運(yùn)營(yíng)修復(fù)線(xiàn)上問(wèn)題。
\\下面就來(lái)看一看先知平臺(tái)背后的技術(shù)實(shí)現(xiàn)細(xì)節(jié)。
\\\\圖 1. 基于先知的運(yùn)營(yíng)保障體系
\\基于 Selenium ChomeDriver 的性能監(jiān)控
\\先知平臺(tái)最基本的功能是模擬用戶(hù)(帶有真實(shí)用戶(hù)會(huì)話(huà)信息)來(lái)對(duì)頁(yè)面進(jìn)行掃描(爬蟲(chóng)),在瀏覽和購(gòu)物的過(guò)程中發(fā)現(xiàn)潛在的運(yùn)營(yíng)問(wèn)題。我們將問(wèn)題分為三類(lèi):業(yè)務(wù)、功能和性能。業(yè)務(wù)類(lèi)問(wèn)題包括商品無(wú)貨、頁(yè)面或券過(guò)期、商鋪下架等;功能類(lèi)問(wèn)題包括數(shù)據(jù)埋點(diǎn)缺失、風(fēng)控失效、推薦降級(jí)等用戶(hù)無(wú)法直觀感受,但會(huì)產(chǎn)生嚴(yán)重后果的問(wèn)題;性能類(lèi)問(wèn)題包括頁(yè)面 yslow 評(píng)分、狀態(tài)碼錯(cuò)誤、接口響應(yīng)超時(shí)等問(wèn)題。
\\技術(shù)上,我們基于 Selenium ChomeDriver 實(shí)現(xiàn)對(duì)頁(yè)面的掃描,它提供了一套用于 Web 應(yīng)用程序的自動(dòng)化爬蟲(chóng)工具。這里有幾個(gè)技術(shù)實(shí)現(xiàn)細(xì)節(jié)值得分享:
\\下面是一個(gè)簡(jiǎn)單 demo:
\\\// 設(shè)置 Chromedriver 路徑\System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY,\ ? ? ? ? ? ? ? ? ? ?System.getProperty(\"user.dir\") + \"/drivers/chromedriver\");\// 啟用 ChromeDrvierService 持有瀏覽器進(jìn)程\ChromeDriverService chromeDriverService = new ChromeDriverService.Builder()\ ? ? ? ? ? ? ? ? ? ?.withVerbose(true)\ ? ? ? ? ? ? ? ? ? ?.usingAnyFreePort()\ ? ? ? ? ? ? ? ? ? ?.build();\// 啟用 Headless 模式\ChromeOptions options = new ChromeOptions();\options.addArguments(\"--headless\");\\// 開(kāi)啟 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);\\動(dòng)態(tài)編譯引擎 DynamicEngine 實(shí)時(shí)加載監(jiān)控腳本
\\在監(jiān)控的過(guò)程中,不同的業(yè)務(wù)需要關(guān)注的指標(biāo)往往不同,且隨著促銷(xiāo)活動(dòng)的進(jìn)行不斷變化。比如,之前我們沒(méi)有對(duì)商品售罄狀態(tài)的監(jiān)控,運(yùn)營(yíng)有這樣訴求時(shí),要求我們必須馬上能在生產(chǎn)環(huán)境實(shí)現(xiàn)對(duì)商品狀態(tài)的監(jiān)控。為了做到監(jiān)控腳本的熱拔插,我們自己實(shí)現(xiàn)了動(dòng)態(tài)腳本編譯引擎 DynamicEngine,能夠?qū)崟r(shí)在生產(chǎn)環(huán)境增加監(jiān)控模板,面對(duì)需求變化具備靈活的可擴(kuò)展性。
\\要實(shí)現(xiàn) DynamicEngine,基于 JavaCompiler 讀取源碼,編譯診斷,輸出 class。JavaClassObject 負(fù)責(zé)文件抽象,代表源代碼或者編譯后的 class。ClassFileManager 管理 JavaClassObject,負(fù)責(zé) JavaClassObject 的創(chuàng)建和保存位置,根據(jù) Java ClassLoader 的雙親委托模式,我們需要實(shí)現(xiàn)自己的 DynamicClassLoader,DynamicClassLoader 繼承自 URLClassLoader,將生成的 class 動(dòng)態(tài)加載到 JVM。
\\\\圖 2. DynamicEngine 類(lèi)依賴(lài)圖
\\Quartz 實(shí)現(xiàn)定時(shí)任務(wù)調(diào)度
\\定時(shí)任務(wù)的實(shí)現(xiàn)基于 Java Quartz,Quartz 是目前最為成熟, 使用最廣泛的 Java 任務(wù)調(diào)度框架。Quartz 運(yùn)行時(shí)由 QuartzSchedulerThread 類(lèi)作為主體,循環(huán)執(zhí)行調(diào)度流程。JobStore 作為中間層,按照 quartz 的并發(fā)策略執(zhí)行數(shù)據(jù)庫(kù)操作,完成主要的調(diào)度邏輯。JobRunShellFactory 負(fù)責(zé)實(shí)例化 JobDetail 對(duì)象,將其放入線(xiàn)程池運(yùn)行。LockHandler 負(fù)責(zé)獲取 LOCKS 表中的數(shù)據(jù)庫(kù)鎖。
\\\\圖 3. Java Quartz 任務(wù)調(diào)度交互圖
\\先知的監(jiān)控模式包括主動(dòng)監(jiān)控、被動(dòng)監(jiān)控和漫游監(jiān)控三種。主動(dòng)監(jiān)控是運(yùn)營(yíng)在后臺(tái)直接配置的監(jiān)控任務(wù)。被動(dòng)監(jiān)控是與業(yè)務(wù)系統(tǒng)打通,提供公共接入 API,運(yùn)營(yíng)頁(yè)面或者事件生成時(shí)自動(dòng)構(gòu)建監(jiān)控任務(wù)。漫游監(jiān)控的設(shè)計(jì)初衷借鑒了 Chaos Monkey 的思想,運(yùn)營(yíng)很難知道下一個(gè)出問(wèn)題的是哪一個(gè)活動(dòng)頁(yè)面,既然如此,我們建立了從流量入口頁(yè)開(kāi)始的漫游任務(wù),會(huì)不斷爬取鏈接建立任務(wù)來(lái)發(fā)現(xiàn)問(wèn)題。不同的監(jiān)控模式的集群是隔離的,避免任務(wù)占用資源互相影響。
\\\\圖 4. 先知平臺(tái)的任務(wù)調(diào)度
\\先知智能運(yùn)營(yíng)的場(chǎng)景應(yīng)用
\\前面我們所闡述的監(jiān)控掃描、腳本執(zhí)行和定時(shí)任務(wù)調(diào)度方案,雖然能幫助運(yùn)營(yíng)發(fā)現(xiàn)線(xiàn)上問(wèn)題,但解決問(wèn)題仍需要運(yùn)營(yíng)的人工干預(yù)。在某些情況下,運(yùn)營(yíng)并不能及時(shí)完成頁(yè)面的修復(fù)和維護(hù),需要自動(dòng)化的運(yùn)營(yíng)方案。所以,先知不僅僅是一個(gè)針對(duì)運(yùn)營(yíng)的監(jiān)控告警平臺(tái),它還能自動(dòng)化修復(fù)線(xiàn)上問(wèn)題。
\\智能運(yùn)營(yíng)的設(shè)計(jì)思想是,先知與推薦系統(tǒng)、泰坦系統(tǒng)(運(yùn)營(yíng)內(nèi)容管理平臺(tái))打通。如下圖所示,我們以促銷(xiāo)商品售罄問(wèn)題為例,當(dāng)先知發(fā)現(xiàn)這個(gè)問(wèn)題后,先判斷這個(gè)商品坑位是否允許降級(jí),如果允許,則調(diào)用推薦系統(tǒng),根據(jù)用戶(hù)信息推薦出與此款商品偏好類(lèi)似的替代商品。在通知泰坦系統(tǒng),將替代商品維護(hù)到這個(gè)坑位。這樣既保證了線(xiàn)上熱點(diǎn)坑位始終有貨可賣(mài),又滿(mǎn)足了用戶(hù)的購(gòu)物偏好,保證了用戶(hù)體驗(yàn)。
\\\\圖 5. 先知智能運(yùn)營(yíng)的場(chǎng)景應(yīng)用
\\總結(jié)? ??
\\目前,先知承擔(dān)了蘇寧易購(gòu)所有線(xiàn)上運(yùn)營(yíng)頁(yè)面和活動(dòng)的服務(wù)保障工作,日監(jiān)控任務(wù) 10 萬(wàn)余個(gè),發(fā)現(xiàn)并解決問(wèn)題 6400 余個(gè),幫助運(yùn)營(yíng)迅速定位線(xiàn)上問(wèn)題,平均縮短解決問(wèn)題時(shí)間 30 分鐘,顯著提高了易購(gòu)的線(xiàn)上服務(wù)質(zhì)量。未來(lái),蘇寧易購(gòu)將致力于把先知打造成為開(kāi)放的一站式線(xiàn)上服務(wù)質(zhì)量保障平臺(tái),大規(guī)模監(jiān)控任務(wù)并發(fā)執(zhí)行、海量數(shù)據(jù)分析、智慧運(yùn)營(yíng)服務(wù)化都將成為蘇寧易購(gòu)新的技術(shù)研究和攻關(guān)課題。
\\作者簡(jiǎn)介
\\朱羿全,南京航空航天大學(xué)碩士研究生畢業(yè),蘇寧易購(gòu)消費(fèi)者研發(fā)中心高級(jí)技術(shù)經(jīng)理,主要負(fù)責(zé)易購(gòu)各系統(tǒng)架構(gòu)優(yōu)化與大促保障工作。先后參與了易購(gòu)整站 Https 改造、蘇寧拼購(gòu)架構(gòu)改造、先知業(yè)務(wù)監(jiān)控平臺(tái)建設(shè)等工作。專(zhuān)注于打造高可靠、高性能、高并發(fā)服務(wù)系統(tǒng)的技術(shù)研究。
總結(jié)
以上是生活随笔為你收集整理的看苏宁易购的运营保障体系如何hold住818大促的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: foreman源NO_PUBKEY 6F
- 下一篇: 利用HttpClient 获取网页数据j