去哪兒酒店實(shí)時(shí)搜索技術(shù)分享_第1頁
去哪兒酒店實(shí)時(shí)搜索技術(shù)分享_第2頁
去哪兒酒店實(shí)時(shí)搜索技術(shù)分享_第3頁
去哪兒酒店實(shí)時(shí)搜索技術(shù)分享_第4頁
去哪兒酒店實(shí)時(shí)搜索技術(shù)分享_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

阿里技術(shù)沙龍 去哪兒酒店搜索分享 關(guān)于去哪兒酒店搜索 定位 垂直搜索平臺(tái) 目標(biāo) Smart Your Hotel Reservation 目前規(guī)模 搜索 210家酒店預(yù)訂站點(diǎn) 支持全球 22699個(gè)城市 覆蓋 368892家酒店 主要議題 系統(tǒng)的核心功能 酒店信息的搜索 酒店報(bào)價(jià)和房態(tài)的實(shí)時(shí)準(zhǔn)確 高可用性 系統(tǒng)設(shè)計(jì)上的考慮 圍繞著核心功能目標(biāo)我們做了些什么 整體結(jié)構(gòu)服務(wù)化拆分 實(shí)時(shí)抓取 系統(tǒng)結(jié)構(gòu)總覽 整體結(jié)構(gòu)服務(wù)化拆分 現(xiàn)有主要服務(wù) 頁面展現(xiàn)功能服務(wù) 關(guān)鍵詞搜索服務(wù) rank計(jì)算服務(wù) 報(bào)價(jià)服務(wù) 報(bào)價(jià)抓取和調(diào)度服務(wù) 拆分原則 功能模塊相對(duì)獨(dú)立 功能內(nèi)聚 目的 降低維護(hù)成本 提高系統(tǒng)整體可用性 故障隔離 服務(wù)降級(jí) 實(shí)時(shí)抓取 實(shí)時(shí)抓取的需求 酒店的價(jià)格和房態(tài) , 尤其是房態(tài)變化快 價(jià)格和房態(tài)的準(zhǔn)確性是保證用戶的搜索體驗(yàn)的前提條件 實(shí)時(shí)抓取的難點(diǎn) 保證用戶請(qǐng)求的響應(yīng)效率 保證用戶看到最新的價(jià)格和房態(tài) 降低對(duì)目標(biāo)網(wǎng)站的抓取量 實(shí)時(shí)抓取 實(shí)時(shí)抓取核心服務(wù)組件 報(bào)價(jià)服務(wù) 抓取服務(wù) 消息中間件 分布式存儲(chǔ) 實(shí)時(shí)抓取 當(dāng)前規(guī)模 報(bào)價(jià)服務(wù)每秒請(qǐng)求量峰值近 1500qps 報(bào)價(jià)服務(wù)平均請(qǐng)求響應(yīng)時(shí)間 2.7ms 報(bào)價(jià)抓取服務(wù)平均每秒處理完成 2500個(gè)抓取請(qǐng)求 報(bào)價(jià)服務(wù)平均 20分鐘一次 full gc 報(bào)價(jià)服務(wù)平均 10s一次 young gc 報(bào)價(jià)服務(wù) 15分鐘負(fù)載峰值 3-3.5,平均 1.2-1.5 實(shí)時(shí)抓取 我們?nèi)绾巫龅降?服務(wù)拆分 異步化 緩存設(shè)計(jì) 降低抓取量 實(shí)時(shí)抓取 -服務(wù)拆分 服務(wù)拆分 報(bào)價(jià)服務(wù)和抓取服務(wù)分拆 功能側(cè)重點(diǎn)不同 報(bào)價(jià)服務(wù) 緩存 +計(jì)算系統(tǒng) 對(duì)外接口響應(yīng)時(shí)間是關(guān)鍵 抓取服務(wù) 定向抓取 整體吞吐量和獲取率是關(guān)鍵 典型的生產(chǎn)者消費(fèi)者場(chǎng)景 異步通訊 實(shí)時(shí)抓取 -異步化 異步化 消息中間件 線程池隔離 前端 js動(dòng)態(tài)請(qǐng)求 實(shí)時(shí)抓取 -消息中間件 消息中間件 用于報(bào)價(jià)服務(wù)和抓取服務(wù)之間的通訊 方案選擇 activemq 配置考量 不需要持久化 過期消息可以丟棄 直接丟棄 提高吞吐量 async send & async ack 接收到消息后異步處理 需要 failover client端連接串配置成 failover協(xié)議 實(shí)時(shí)抓取 -消息中間件 實(shí)時(shí)抓取 -線程池隔離 線程池隔離 目的 獨(dú)立任務(wù)串行執(zhí)行轉(zhuǎn)并行執(zhí)行,提高性能 最大限度降低外部資源依賴失效的影響 使得整體吞吐量和響應(yīng)時(shí)間可控 避免資源爭(zhēng)用 關(guān)注點(diǎn) 線程池容量合理設(shè)置 任務(wù)超時(shí)設(shè)置 利用監(jiān)控,持續(xù)運(yùn)維 實(shí)時(shí)抓取 -線程池隔離 應(yīng)用場(chǎng)景一 背景 用戶提交一個(gè)酒店搜索,搜索列表頁在得到符合條件的酒店列表后,需要遠(yuǎn)程調(diào)用報(bào)價(jià)服務(wù)的接口獲取酒店報(bào)價(jià) 報(bào)價(jià)服務(wù)的任何問題都不能影響到搜索結(jié)果列表頁的展示 如果結(jié)果列表酒店數(shù)量太多,報(bào)價(jià)服務(wù)串行獲取報(bào)價(jià)效率較低,調(diào)用方等待時(shí)間較長(zhǎng) 實(shí)時(shí)抓取 -線程池隔離 應(yīng)用場(chǎng)景一 解決方案 單獨(dú)創(chuàng)建一個(gè)線程池來處理對(duì)報(bào)價(jià)服務(wù)的調(diào)用 對(duì)于超過一定閾值的酒店數(shù)的報(bào)價(jià)查詢請(qǐng)求,拆成多個(gè)任務(wù)執(zhí)行 設(shè)計(jì)考量 線程池參數(shù)選擇 任務(wù)超時(shí)設(shè)置 經(jīng)驗(yàn)值,我們一般是選擇被調(diào)用方響應(yīng)時(shí)間 *10 超時(shí)后處理 任務(wù)需要能夠響應(yīng)中斷 超時(shí)后要回收資源 超時(shí)后需要將調(diào)用條件記錄到日志中,供線下分析 實(shí)時(shí)抓取 -線程池隔離 應(yīng)用場(chǎng)景一 設(shè)計(jì)考量 線程池參數(shù)選擇 corePoolSize 該請(qǐng)求 qps歷史峰值 *增長(zhǎng)系數(shù) *調(diào)用外部接口任務(wù)超時(shí)時(shí)間( s) queue LinkedBlockingQueue,無界隊(duì)列,資源不可控,不考慮 ArrayBlockingQueue,線下任務(wù),只考慮吞吐量而不關(guān)注響應(yīng)時(shí)間時(shí)使用 SynchronousQueue, Direct handoff,有任務(wù)立即嘗試開線程執(zhí)行,在關(guān)注響應(yīng)時(shí)間時(shí)選擇 maxPoolSize max(該請(qǐng)求 qps歷史峰值 *增長(zhǎng)系數(shù) , corePoolSize) rejection policy 直接丟棄 記錄監(jiān)控 實(shí)時(shí)抓取 -線程池隔離 應(yīng)用場(chǎng)景二 背景 報(bào)價(jià)抓取服務(wù)從消息隊(duì)列中接收到消息執(zhí)行抓取 各個(gè)目標(biāo)網(wǎng)站的響應(yīng)時(shí)間,所能承受的抓取量以及并發(fā)度不一 實(shí)時(shí)抓取 -線程池隔離 應(yīng)用場(chǎng)景二 解決方案 異步處理消息,提高消息接收速度,提高消息隊(duì)列吞吐量 各個(gè)目標(biāo)網(wǎng)站的抓取走各自獨(dú)立的線程池,防止對(duì)某一個(gè)網(wǎng)站的抓取出現(xiàn)問題影響到對(duì)別的網(wǎng)站的抓取請(qǐng)求 設(shè)計(jì)考量 線程池的容量設(shè)置 對(duì)方網(wǎng)站所能承受的并發(fā)量 單次抓取請(qǐng)求的響應(yīng)時(shí)間 吞吐量?jī)?yōu)先,使用有界隊(duì)列來盡量避免請(qǐng)求丟棄 實(shí)時(shí)調(diào)整線程池容量設(shè)置 對(duì)每一個(gè)目標(biāo)網(wǎng)站的抓取任務(wù)線程池做監(jiān)控 實(shí)時(shí)抓取 -前端 js動(dòng)態(tài)請(qǐng)求 目的 將最新報(bào)價(jià)及時(shí)展現(xiàn)給用戶 設(shè)計(jì)考量 前端 javascript在有限的時(shí)間范圍內(nèi)按照一定時(shí)間間隔 poll報(bào)價(jià)服務(wù)接口 poll的間隔根據(jù)以下因素動(dòng)態(tài)改變 發(fā)送的報(bào)價(jià)抓取請(qǐng)求回?cái)?shù)比例 隨時(shí)間衰減 報(bào)價(jià)服務(wù)接口連續(xù)返回相同結(jié)果集的次數(shù) 實(shí)施抓取 -緩存設(shè)計(jì) 目的 提高整體性能 減少外部資源依賴,提高可用性 緩存分類 基礎(chǔ)信息緩存 緩存所有常用信息字段 全量緩存 系統(tǒng)啟動(dòng)時(shí)加載 lazy initialization is evil here 增量更新 報(bào)價(jià)緩存 進(jìn)程內(nèi)緩存 LRU 減小并發(fā)鎖顆粒度 分布式緩存 memcached 實(shí)施抓取 -緩存設(shè)計(jì) 幾點(diǎn)體會(huì) 內(nèi)存緩存 關(guān)注單個(gè)緩存對(duì)象的大小 要正確的使用數(shù)據(jù)類型 值域固定的字符串對(duì)象常量化 Sern() 自定義 String Pool 要監(jiān)控緩存命中率 要估算總的內(nèi)存開銷 緩存池要有容量上限 對(duì)于 LRU緩存,不同業(yè)務(wù)數(shù)據(jù)盡量不要共用同一 LRU隊(duì)列 memcached 需要關(guān)注 memcached的內(nèi)存分配機(jī)制 memcached的操作也是外部資源訪問,要有超時(shí)設(shè)置 關(guān)鍵業(yè)務(wù)數(shù)據(jù)最好獨(dú)占一組 memcached,防止類似大小的不同業(yè)務(wù)數(shù)據(jù)緩存爭(zhēng)用同一 slab,導(dǎo)致 eviction 監(jiān)控 實(shí)時(shí)抓取 -降低抓取量 目的 降低目標(biāo)網(wǎng)站的負(fù)載 手段 為每個(gè)目標(biāo)網(wǎng)站設(shè)置 cachetime 依據(jù)當(dāng)前抓取量監(jiān)控 依據(jù)目標(biāo)網(wǎng)站房態(tài)房?jī)r(jià)變化頻率監(jiān)控 人工配置 +動(dòng)態(tài)調(diào)整 定時(shí)線下全量抓取配合線上用戶觸發(fā)抓取 與合作客戶配合進(jìn)行變價(jià)推送 運(yùn)維和監(jiān)控 “ Life is like a box of chocolate, and you will never know what you are gonna get” -THIS SHOULD NOT HAPPEN TO ONLINE SYSTEM 運(yùn)維和監(jiān)控 意義 好的系統(tǒng)是運(yùn)維出來的 及時(shí)發(fā)現(xiàn)問題 掌握系統(tǒng)運(yùn)行狀況 找出系統(tǒng)優(yōu)化方向 掌握業(yè)務(wù)數(shù)據(jù) 為技術(shù)決策提供依據(jù) 分類 實(shí)時(shí)監(jiān)控和運(yùn)維腳本 監(jiān)控系

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論