成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

智能投放系統(tǒng)之場景分析最佳實踐

開發(fā) 開發(fā)工具
后臺服務(wù)層重點在于提供數(shù)據(jù),保證服務(wù)的可用性。但是在組裝過程中遇到以上痛點,導致出現(xiàn)請求響應(yīng)時間長,用戶體驗差等問題。規(guī)避此類問題的主要方法是將服務(wù)調(diào)用數(shù)據(jù)提前組合計算好進行存儲,即數(shù)據(jù)預(yù)計算。

 背景

新美大平臺作為業(yè)內(nèi)最大的O2O的平臺,以短信/push作為運營手段觸達用戶的量級巨大,每日數(shù)以千萬計。

美團點評線上存在超過千萬的POI,覆蓋超過2000城市、2.5萬個后臺商圈。在海量數(shù)據(jù)存在的前提下,實時投放的用戶在場景的選擇上存在一些困難,所以我們提供對場景的顆粒化查詢和智能建議,為用戶解決三大難題:

  • 我要投放的區(qū)域在哪,實時和歷史的客流量是什么樣的?
  • 在我希望投放的區(qū)域歷史和現(xiàn)在都發(fā)生過什么活動,效果是什么樣的?
  • 這個區(qū)域是不是適合我投放,系統(tǒng)建議我投放哪里?

如圖1所示,整個產(chǎn)品致力于解決以上三大問題,能夠為運營在活動投放前期,提供有效的參考決策依據(jù)。

圖1 場景查詢器模塊效果圖

挑戰(zhàn)

  • 場景查詢器需要展示的數(shù)據(jù)分為多種,所以數(shù)據(jù)過濾和組裝的時間,嚴重依賴于基礎(chǔ)數(shù)據(jù)量。但是隨著維度的下鉆,基礎(chǔ)數(shù)據(jù)量巨大,所以導致實時計算數(shù)據(jù)的響應(yīng)時間無法忍受。
  • 數(shù)據(jù)來源均是RPC服務(wù),需要調(diào)用的服務(wù)多種多樣,每一項服務(wù)的響應(yīng)時間都會影響最終的結(jié)果返回,難以提供前端接口的響應(yīng)時間。
  • 需要組裝的數(shù)據(jù)各種各樣,沒有統(tǒng)一的數(shù)據(jù)模型,造成代碼耦合度高,后期難以維護針對上面的挑戰(zhàn),我們給出如下的解決方案。

總體方案

圖2 場景查詢器體系架構(gòu)

如圖2所示,我們的總體架構(gòu)是分層設(shè)計的,最底層都是各類服務(wù),再上層是預(yù)計算層和數(shù)據(jù)層,預(yù)計算層的作用很明顯,是連接服務(wù)和數(shù)據(jù)的核心層,通過拉取后臺服務(wù)的各類數(shù)據(jù)然后預(yù)計算形成數(shù)據(jù)層。再往上是中臺服務(wù)層,包含有核心功能是服務(wù)熔斷降級,以及通用服務(wù),為具體業(yè)務(wù)邏輯提供統(tǒng)一的服務(wù),最上層便是具體的業(yè)務(wù)邏輯了,對應(yīng)具體場景和需求。

后臺服務(wù)層

該層均是Thrift的RPC服務(wù),提供各種投放的反饋數(shù)據(jù)。

數(shù)據(jù)組裝

后臺服務(wù)層數(shù)據(jù)特點是數(shù)據(jù)分散,結(jié)果多樣。數(shù)據(jù)組裝是對多個服務(wù)調(diào)用返回的結(jié)果,進行過濾組合。

圖3 后臺服務(wù)結(jié)果數(shù)據(jù)組裝樣例

如圖3所示,服務(wù)1、2、3分別用黃色、藍色、棕色表示,A 、B、C均是調(diào)用對應(yīng)服務(wù)返回的數(shù)據(jù),并且A、B的數(shù)據(jù)格式是列表,C是單個數(shù)據(jù)。最后一個虛線框,代表數(shù)據(jù)組裝算法,A和B的列表取交集,結(jié)果是長度為2的列表,然后再依次調(diào)用服務(wù)3,單個獲取數(shù)據(jù)C。

數(shù)據(jù)組裝痛點

  • 過程繁瑣,如取交集,單個組裝等等,組裝時間受數(shù)據(jù)量影響較大。
  • 組裝過程中,混合著大量的服務(wù)調(diào)用,組裝時間受服務(wù)響應(yīng)時間影響較大。

后臺服務(wù)層重點在于提供數(shù)據(jù),保證服務(wù)的可用性。但是在組裝過程中遇到以上痛點,導致出現(xiàn)請求響應(yīng)時間長,用戶體驗差等問題。規(guī)避此類問題的主要方法是將服務(wù)調(diào)用數(shù)據(jù)提前組合計算好進行存儲,即數(shù)據(jù)預(yù)計算。

預(yù)計算層

主要作用在于提前計算數(shù)據(jù),快速響應(yīng)請求,構(gòu)建過程依次為數(shù)據(jù)建模、構(gòu)建計算模式。該層主要包含以下核心功能。

  • 構(gòu)建通用的數(shù)據(jù)模型,使上層控制和處理,更加高效。
  • 保證計算速度的同時,計算大量基礎(chǔ)數(shù)據(jù)。
  • 為了保證數(shù)據(jù)的實時性,實現(xiàn)高密度并行計算。

數(shù)據(jù)模型

圖4 預(yù)計算數(shù)據(jù)模型

在場景查詢器中,為前端提供的數(shù)據(jù)普遍都是上下級數(shù)據(jù),比如頁面要展示全國匯總數(shù)據(jù),同時會級聯(lián)展示下屬各省數(shù)據(jù),如果展示省級匯總數(shù)據(jù),那么同時級聯(lián)展示下屬各地級市數(shù)據(jù)。通過分析業(yè)務(wù)需求,發(fā)現(xiàn)需要的數(shù)據(jù),大多是分上下級的這種級聯(lián)數(shù)據(jù)。經(jīng)過抽象,數(shù)據(jù)模型設(shè)計為樹形結(jié)構(gòu),如圖4,左側(cè)為概念模型,樹的高度只有兩層,根節(jié)點為匯總數(shù)據(jù),葉子節(jié)點為地理等級維度下鉆的數(shù)據(jù);右側(cè)為實際使用的模型,因為底層維度的基數(shù)比較大,不利于下級數(shù)據(jù)的遍歷、篩選和分頁,所以實際使用中,下級節(jié)點數(shù)據(jù)以一個列表存儲。節(jié)點可以存儲若干指標,具體類型根據(jù)地理維度而定。該模型的特點如下:首先支持地理維度繼續(xù)下鉆,其次在后臺服務(wù)支持的情況下,可以對歷史數(shù)據(jù)做預(yù)計算。

數(shù)據(jù)存儲和獲取

有了數(shù)據(jù)模型,需要確定一個高效的數(shù)據(jù)存儲和數(shù)據(jù)定位的方式,因為結(jié)果數(shù)據(jù)大多是非半結(jié)構(gòu)化數(shù)據(jù),而且低維度的的數(shù)據(jù)量數(shù)據(jù)量較大,所以采用NoSQL來存儲數(shù)據(jù)。

圖5 數(shù)據(jù)存儲和提取方式示意圖

如圖5所示,ID表示地理維度值,level表示地理維度等級,數(shù)據(jù)節(jié)點(包含根和葉子節(jié)點)以ID+level為Key,轉(zhuǎn)化為樹形JSON格式數(shù)據(jù)存儲,通過ID+level可以唯一獲取到一個數(shù)據(jù),在數(shù)據(jù)量不大的情況下,還可以通過級聯(lián)獲取下級模型,即圖中虛線代表級聯(lián)獲取下級數(shù)據(jù)。

計算模式

在構(gòu)建的數(shù)據(jù)模型基礎(chǔ)上,該層最核心便是預(yù)計算模式,從業(yè)務(wù)需求出發(fā),數(shù)據(jù)需要在地理等級這個維度不斷下鉆,從全國開始,一直下鉆到POI級別,每個級別單獨分層計算,然后存儲計算結(jié)果。

圖6 預(yù)計算模式示意圖

如圖6所示,每一個矩形代表一級維度的計算,從左到右依次進行維度下鉆,從全國的數(shù)據(jù)依次計算到商圈,計算分層每層單獨計算。

實現(xiàn)方式

圖7 層序計算示意圖

如圖7所示,是計算模式的兩種實現(xiàn)方式,上半部分是串行層序計算,下半部分是并行層序計算。每部分從上到下分不同顏色區(qū)分不同的計算層次。每個矩形對應(yīng)一個具體ID的計算,t代表計算時間,這里假設(shè)所有計算單元的計算時間都相同,方便對比計算時間。

1)串行層序計算

如圖7,普通的串行計算,使用單線程計算,從上到下一層一層計算,這類計算的的痛點有兩處,第一,是時間復雜度的,每個計算單元的計算時間都會累計,如計算第一層的時間為3t,第二層為4t,第三層為6*t,總計耗時13t。第二,是空間復雜度的,因為數(shù)據(jù)均是調(diào)用后臺服務(wù)獲取,計算一層的同時,需要把下級的數(shù)據(jù)都存儲起來,在計算下層時候,再遍歷數(shù)據(jù)計算。

2)并行層序計算

依賴于Apache Storm計算框架,將數(shù)據(jù)抽象成為流,然后通過不同的Bolt,分別計算不同維度的數(shù)據(jù)。每一級Bolt首先處理數(shù)據(jù),然后將下級數(shù)據(jù)流入下一級Bolt。同時隨著維度的下鉆,計算的數(shù)據(jù)量變得越來越大,通過增加Bolt的并發(fā)度,加速計算。在預(yù)計算的過程中,主要利用了Storm高速數(shù)據(jù)分發(fā)和高密度并行計算的特性,規(guī)避了串行計算的痛點,首先時間復雜度大幅度降低,如圖7所示,因為可以并行計算,所以每一層的時間只花費t,那么總耗時為3*t,當然這樣估算是不準確的,因為沒必要在一層所有數(shù)據(jù)都計算完,才發(fā)射數(shù)據(jù),可以在每一個計算單元運行完畢,就發(fā)射數(shù)據(jù)。這樣就可以形成上下級數(shù)據(jù)計算流水線,進一步壓縮計算時間。其次,空間復雜度大幅度降低,在Storm中,不需要保存下級數(shù)據(jù),因為數(shù)據(jù)是不斷流動的,計算完畢就會被發(fā)射到下級Bolt。為此,本文采用Storm做預(yù)計算。計算拓撲結(jié)構(gòu)如圖8。

圖8 Storm計算拓撲示意圖

如圖8所示,數(shù)據(jù)源頭(ChinaSpout)只有一個,該Spout內(nèi)首先計算全國到省的數(shù)據(jù),包括全國匯總數(shù)據(jù)以及省一級的數(shù)據(jù),然后立刻將所有省級數(shù)據(jù)流入下層的ProvinceBolt,這一層應(yīng)該考慮增加并發(fā)度,因為省到市一級的數(shù)據(jù)量級開始擴大,設(shè)置并發(fā)度為40,在計算完省到市級數(shù)據(jù)之后,數(shù)據(jù)開始流入CityBolt,這一層到市級數(shù)據(jù),并發(fā)度可以再擴大,目前配置為300,計算完畢之后,數(shù)據(jù)流入最后一層BareaBolt,計算商圈到POI級別的數(shù)據(jù)。各級Bolt預(yù)計算產(chǎn)生的結(jié)果數(shù)據(jù),都會存入數(shù)據(jù)層。存儲時遇到一個問題,在計算商圈到POI級別的數(shù)據(jù)時候,發(fā)現(xiàn)POI的量級比較大,不能直接存儲。為了不影響數(shù)據(jù)模型的通用性,我們隊POI級別的做了壓縮,然后再做存儲。為了保障數(shù)據(jù)的實時性,數(shù)據(jù)源會周期性產(chǎn)生數(shù)據(jù)流,更新預(yù)計算數(shù)據(jù),其實這是Storm一類計算模式-----DRPC,數(shù)據(jù)源頭就是發(fā)射的參數(shù),Storm的各級Bolt承擔運算。

該層解決的最大問題,是計算速度慢的問題,通過高密度的并發(fā)計算,降低重復數(shù)據(jù)過濾,大量數(shù)據(jù)組合,以及批量數(shù)據(jù)獲取慢對響應(yīng)時間的影響。

數(shù)據(jù)層

預(yù)計算之后的數(shù)據(jù)需要存儲,供業(yè)務(wù)邏輯使用,存儲選型需要滿足以下幾點:

  • 預(yù)計算產(chǎn)生的數(shù)據(jù)模型是樹形結(jié)構(gòu),所以不適合關(guān)系型數(shù)據(jù)庫
  • 數(shù)據(jù)具有時效性,數(shù)據(jù)過期會帶來臟數(shù)據(jù)
  • 高密度并行計算,寫入并發(fā)量大,需要保證寫入速度
  • 實現(xiàn)災(zāi)備,存儲不可用時候,需要服務(wù)降級

為了滿足以上幾點要求,選用美團點評內(nèi)部研發(fā)的公共KV存儲組件Squirrel和Tair分別來做存儲和災(zāi)備。其中,Squirrel是基于Redis Cluster的純內(nèi)存存儲,squirrel 屬于KV存儲,具有寫入、查詢速度快,并發(fā)度高,支持數(shù)據(jù)豐富,時效好的特點。而Tair支持持久化,性價比更高,適合用來做災(zāi)備,當Squirrel不可用時,使用Tair提供服務(wù)。

熔斷層

預(yù)計算過程中,為了實現(xiàn)災(zāi)備,還需要使用熔斷技術(shù)實現(xiàn)服務(wù)降級。熔斷雖然在上層控制,嚴格來說應(yīng)該屬于數(shù)據(jù)層。

圖9 服務(wù)熔斷、降級工作原理

熔斷技術(shù)選用公共組件Rhino(美團點評自研的穩(wěn)定性保障平臺,比Hystrix更加輕量、易用及可控,提供故障模擬、降級演練、服務(wù)熔斷、服務(wù)限流等功能),主要作用是:

a. 保護服務(wù),防止服務(wù)雪崩

b. 及時熔斷,保障服務(wù)穩(wěn)定

c. 提供多種降級策略,靈活適配服務(wù)場景

如圖9所示,虛線框,代表Rhino控制的區(qū)域,request1到來的時候,squirrel沒有問題,正常提供服務(wù)。request2 到來的時候,訪問squirrel發(fā)生異常(超時、異常等),請求被切換到tair。在squirrel恢復的過程中,Rhino會心跳請求squirrel,驗證服務(wù)可用性。request3請到來squirrel此刻已經(jīng)恢復正常,由于Rhino會周期檢測,所以請求再次被切換到squirrel上恢復正常。

中臺服務(wù)層

數(shù)據(jù)準備好之后,還不能被業(yè)務(wù)邏輯直接使用,需要提供統(tǒng)一的服務(wù),應(yīng)對多變的業(yè)務(wù)邏輯。該層主要解決如下問題:

  • 數(shù)據(jù)模型修改對業(yè)務(wù)邏輯有影響,數(shù)據(jù)服務(wù)需對上層具體業(yè)務(wù)邏輯透明
  • 業(yè)務(wù)邏輯對數(shù)據(jù)有部分通用操作,需要抽象通用操作,防止數(shù)據(jù)業(yè)務(wù)緊耦合
  • 存儲不可用的時候,需要服務(wù)熔斷和降級,降低對業(yè)務(wù)邏輯的影響
  • 服務(wù)擴展增強能力,不能影響正常業(yè)務(wù)邏輯

該層對外提供RPC服務(wù),直接處理數(shù)據(jù)模型,提供數(shù)據(jù)分頁、數(shù)據(jù)壓縮、數(shù)據(jù)解壓、數(shù)據(jù)篩選、數(shù)據(jù)批量提取以及數(shù)據(jù)原子提取 等功能,基本覆蓋了大部分對數(shù)據(jù)的操作,使得業(yè)務(wù)邏輯更加簡單。提取數(shù)據(jù)的時候,加入Rhino實現(xiàn)服務(wù)熔斷和降級,為業(yè)務(wù)邏輯層提供穩(wěn)定可靠的服務(wù)。因為該層直接操作模型數(shù)據(jù),所以即使數(shù)據(jù)模型有改動,也不會對業(yè)務(wù)邏輯造成影響,大大降低數(shù)據(jù)和業(yè)務(wù)的耦合。另外該層支持服務(wù)橫向擴展,在消費者大量增加的情況下,仍然能保證服務(wù)可靠運轉(zhuǎn)。

通過一系列的抽象和分層,最終業(yè)務(wù)邏輯直接使用簡單的服務(wù)接口就可以實現(xiàn),客戶端的響應(yīng)從最開始的十幾秒,提升到1秒以內(nèi),并且數(shù)據(jù)和代碼之間的耦合大幅度降低,對于后面的業(yè)務(wù)變化,只需要修改數(shù)據(jù)模型,增量提供若干中臺服務(wù)接口,即可滿足需求,大大降低了開發(fā)難度。

作者簡介

張騰,美團點評系統(tǒng)開發(fā)工程師,2016年畢業(yè)于西安電子科技大學,同年加入招銀網(wǎng)絡(luò)科技,從事系統(tǒng)開發(fā)以及數(shù)據(jù)開發(fā)工作。2017年加入美團點評數(shù)據(jù)中心,長期從事BI工具開發(fā)工作。

【本文為51CTO專欄機構(gòu)“美團點評技術(shù)團隊”的原創(chuàng)稿件,轉(zhuǎn)載請通過微信公眾號聯(lián)系機構(gòu)獲取授權(quán)】

戳這里,看該作者更多好文

 

責任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2017-12-14 15:01:20

智能分析實踐

2014-09-29 09:48:54

MySQLMySQL實踐

2023-05-15 08:24:46

2024-08-29 09:32:36

2021-10-12 10:43:38

區(qū)塊鏈技術(shù)智能

2009-06-22 14:48:21

DRY架構(gòu)設(shè)計

2024-01-05 07:44:22

人工智能用戶隱私AI

2024-01-15 07:36:46

AI系統(tǒng)監(jiān)控系統(tǒng)

2017-10-13 18:33:57

靜態(tài)代碼分析SCAIDS

2014-02-26 11:01:28

日志優(yōu)化系統(tǒng)日志

2013-09-03 09:37:50

2024-12-24 13:30:00

2023-07-21 01:12:30

Reactfalse?變量

2011-08-18 11:05:21

jQuery

2011-07-26 09:31:39

Windows Ser

2011-02-21 10:31:24

2010-09-25 10:47:40

Linux文件系統(tǒng)Tripwire

2012-01-09 11:35:01

WebApp最佳實踐策略

2011-12-21 13:35:39

JavaJFreeChart

2014-08-19 10:06:53

IAP
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 俺去俺来也www色官网cms | 成人一区二区视频 | 欧美日韩在线成人 | 国产成人免费视频网站高清观看视频 | 在线91| 国产激情视频在线观看 | 国产精品久久久久久久久久不蜜臀 | 精品国产一级 | 毛片视频网站 | 久久精品亚洲欧美日韩精品中文字幕 | 国产精品视频久久久 | 久久大 | 亚洲香蕉在线视频 | 中文字幕 欧美 日韩 | 一区二区三区四区在线 | 欧美色综合一区二区三区 | 久草视频观看 | 国产美女一区二区三区 | 久草在线青青草 | 国产精品不卡一区 | 午夜成人免费视频 | 中文字幕亚洲国产 | 精品国产乱码久久久久久闺蜜 | 亚洲视频一区在线 | 四虎影院免费在线 | 亚州成人 | 91福利网| 在线免费观看a级片 | 国内精品伊人久久久久网站 | 久操伊人 | 日韩一区二区三区精品 | 久久久国产一区二区 | 久久久高清 | 99亚洲| 久久av网 | 精品免费国产一区二区三区四区介绍 | 在线日韩 | 欧美一区二区三区在线播放 | 中文字幕久久精品 | 国产美女免费视频 | 国产成人久久av免费高清密臂 |