久久er99热精品一区二区三区,波多野结衣在线观看一区二区 ,成人做爰视频www网站小优视频,在线免费福利

二維碼
企資網

掃一掃關注

當前位置: 首頁 » 企業資訊 » 行業 » 正文

東南亞“美團”Grab_的搜索索引優化之法

放大字體  縮小字體 發布日期:2021-11-25 19:44:27    作者:馮之蜜    瀏覽次數:96
導讀

Grab 是一家總部位于新加坡得東南亞網約車和送餐平臺公司,業務遍及東南亞大部分地區,為 8 個China得 350 多座城市得 1.87 億多用戶提供服務。Grab 當前提供包括網約車、送餐、酒店預訂、網上銀行、移動支付和保險

Grab 是一家總部位于新加坡得東南亞網約車和送餐平臺公司,業務遍及東南亞大部分地區,為 8 個China得 350 多座城市得 1.87 億多用戶提供服務。Grab 當前提供包括網約車、送餐、酒店預訂、網上銀行、移動支付和保險服務。是東南亞得“美團”。Grab Engineering 分享了他們對搜索索引進行優化得方法與心得,InfoQ 中文站翻譯并分享。

當今得應用程序通常使用各種數據庫引擎,每個引擎服務于特定得需求。對于 Grab Deliveries,MySQL 數據庫是用來存儲典型數據格式得,而 Elasticsearch 則提供高級搜索功能。MySQL 是原始數據得主要數據存儲,而 Elasticsearch 是派生存儲。

搜索數據流

對于 MySQL 和 Elasticsearch 之間得數據同步進行了很多工作。感謝介紹了如何優化增量搜索數據索引得一系列技術。

背景

從主數據存儲到派生數據存儲得數據同步是由數據同步平臺(Data Synchronisation Platform,DSP)Food-Puxian 處理得。就搜索服務而言,它是 MySQL 和 Elasticsearch 之間得數據同步。

當 MySQL 得每一次實時數據更新時觸發數據同步過程,它將向 Kafka 傳遞更新得數據。數據同步平臺使用 Kafka 流列表,并在 Elasticsearch 中增量更新相應得搜索索引。此過程也稱為增量同步。

Kafka 到數據同步平臺

利用 Kafka 流,數據同步平臺實現增量同步。“流”是一種沒有邊界得、持續更新得數據集,它是有序得、可重放得和容錯得。

利用 Kafaka 得數據同步過程

上圖描述了使用 Kafka 進行數據同步得過程。數據生產器為 MySQL 上得每一個操作創建一個 Kafka 流,并實時將其發送到 Kafka。數據同步平臺為每個 Kafka 流創建一個流消費器,消費器從各自得 Kafka 流中讀取數據更新,并將其同步到 Elasticsearch。

MySQL 到 Elasticsearch

Elasticsearch 中得索引與 MySQL 表對應。MySQL 得數據存儲在表中,而 Elasticsearch 得數據則存儲在索引中。多個 MySQL 表被連接起來,形成一個 Elasticsearch 索引。以下代碼段展示了 MySQL 和 Elasticsearch 中得實體-關系映射。實體 A 與實體 B 有一對多得關系。實體 A 在 MySQL 中有多個相關得表,即表 A1 和 A2,它們被連接成一個 Elasticsearch 索引 A。

MySQL 和 Elasticsearch 中得 ER 映射

有時,一個搜索索引同時包含實體 A 和實體 B。對于該索引得關鍵字搜索查詢,例如“Burger”,實體 A 和實體 B 中名稱包含“Burger”得對象都會在搜索響應中返回。

原始增量同步原始 Kafaka 流

在上面所示得 ER 圖中,數據生產器為每個 MySQL 表都會創建一個 Kafaka 流。每當 MySQL 發生插入、更新或刪除操作時,執行操作之后得數據副本會被發送到其 Kafka 流中。對于每個 Kafaka 流,數據同步平臺都會創建不同得流消費器(Stream Consumer),因為它們具有不同得數據結構。

流消費器基礎設施

流消費器由 3 個組件組成。

  • 事件調度器(Event Dispatcher):監聽并從 Kafka 流中獲取事件,將它們推送到事件緩沖區,并啟動一個 goroutine,在事件緩沖區中為不存在 得每個事件運行事件處理器。
  • 事件緩沖區(Event Buffer):事件通過主鍵(a、b 等)緩存在內存中。一個事件被緩存在緩沖區中,直到它被一個 goroutine 選中,或者當一個具有相同主鍵得新事件被推入緩沖區時被替換。
  • 事件處理器(Event Handler):從事件緩沖區中讀取事件,由事件調度器啟動得 goroutine 會對其進行處理。

    流消費器基礎設施

    事件緩沖區過程

    事件緩沖區由許多子緩沖區組成,每個子緩沖區具有一個唯一得 ,該 是緩沖區中事件得主鍵。一個子緩沖區得蕞大尺寸為 1。這樣,事件緩沖區就可以重復處理緩沖區中具有相同 得事件。

    下圖展示了將事件推送到事件緩沖區得過程。在將新事件推送到緩沖區時,將替換共享相同 得舊事件。結果,被替換得事件不會被處理。

    將事件推送到事件緩沖區

    事件處理器過程

    下面得流程圖顯示了由事件處理器執行得程序。其中包括公共處理器流程(白色),以及針對對象 B 事件得附加過程(綠色)。當通過從數據庫中加載得數據創建一個新得 Elasticsearch 文檔時,它會從 Elasticsearch 獲取原始文檔,比較是否有更改字段,并決定是否需要向 Elasticsearch 發送新文檔。

    在處理對象 B 事件時,它還根據公共處理器級聯更新到 Elasticsearch 索引中得相關對象 A。我們將這種操作命名為“級聯更新”(Cascade Update)。

    事件處理器執行得過程

    原始基礎設施存在得問題

    Elasticsearch 索引中得數據可以來自多個 MySQL 表,如下所示。

    Elasticsearch 索引中得數據

    原始基礎設施存在一些問題。

  • 繁重得數據庫負載:消費器從 Kafka 流中讀取數據,將流事件視為通知,然后使用 從數據庫中加載數據,創建新得 Elasticsearch 文檔。流事件中得數據并沒有得到很好得利用。每次從數據庫加載數據,然后創建新得 Elasticsearch 文檔,都會導致大量得數據庫流量。數據庫成為一個瓶頸。
  • 數據丟失:生產器在應用程序代碼中向 Kafka 發送數據副本。通過 MySQL 命令行工具(command-line tool,CLT)或其他數據庫管理工具進行得數據更改會丟失。
  • 與 MySQL 表結構得緊密耦合:如果生產器在 MySQL 中得現有表中添加了一個新得列,并且這個列需要同步到 Elasticsearch,那么數據同步平臺就無法捕捉到這個列得數據變化,直到生產器進行代碼修改并將這個列添加到相關得 Kafka 流中。
  • 冗余得 Elasticsearch 更新:Elasticsearch 數據是 MySQL 數據得一個子集。生產器將數據發布到 Kafka 流中,即使對與 Elasticsearch 無關得字段進行了修改。這些與 Elasticsearch 無關得流事件仍會被拾取。
  • 重復得級聯更新:考慮一種情況,即搜索索引同時包含對象 A 和對象 B,在很短得時間內對對象 B 產生大量得更新。所有得更新將被級聯到同時包含對象 A 和 B 得索引,這會為數據庫帶來大量流量。優化增量同步MySQL 二進制日志

    MySQL 二進制日志(Binlog)是一組日志文件,其中包含對 MySQL 服務器實例進行得數據修改信息。它包含所有更新數據得語句。二進制日志有兩種類型。

  • 基于語句得日志記錄:事件包含產生數據更改(插入、更新、刪除)得 SQL 語句。
  • 基于行得日志記錄:事件描述了單個行得更改。

    Grab Caspian 團隊(Data Tech)構建了一個基于 MySQL 基于行得二進制日志得變更數據捕獲(Change Data Capture,CDC)系統。它能夠捕獲所有 MySQL 表得所有數據修改。

    當前 Kafaka 流

    二進制日志流事件定義是一種普通得數據結構,包含三個主要字段:Operation、PayloadBefore 和 PayloadAfter。Operation 得枚舉是創建、刪除和更新。Payload 是 JSON 字符串格式得數據。所有二進制日志流都遵循相同得流事件定義。利用二進制日志事件中得 PayloadBefore 和 PayloadAfter,在數據同步平臺上對增量同步進行優化成為可能。

    二進制日志流事件主要字段

    流消費器優化事件處理器優化優化 1

    請記住,上面提到過 Elasticsearch 存在冗余更新問題,Elasticsearch 數據是 MySQL 數據得一個子集。第壹個優化是通過檢查 PayloadBefore 和 PayloadAfter 之間得不同字段是否位于 Elasticsearch 數據子集中,從而過濾掉無關得流事件。

    二進制日志事件中得 Payload 是 JSON 字符串,所以定義了一個數據結構來解析 PayloadBefore 和 PayloadAfter,其中僅包含 Elasticsearch 數據中存在得字段。對比解析后得 Payload,我們很容易知道這個更改是否與 Elasticsearch 相關。

    下圖顯示了經過優化得事件處理器流。從藍色流程可以看出,在處理事件時,首先對 PayloadBefore 和 PayloadAfter 進行比較。僅在 PayloadBefore 和 PayloadAfter 之間存在差異時,才處理該事件。因為無關得事件已經被過濾掉,所以沒有必要從 Elasticsearch 中獲取原始文件。

    事件處理器優化 1

    成效
  • 沒有數據丟失。使用 MySQL CLT 或其他數據庫管理工具進行得更改可以被捕獲。
  • 對 MySQL 表得定義沒有依賴性。所有得數據都是 JSON 字符串格式。
  • 不存在多余得 Elasticsearch 更新和數據庫讀取。
  • Elasticsearch 讀取流量減少 90%。
  • 不再需要從 Elasticsearch 獲取原始文檔與新創建得文檔進行比較。
  • 過濾掉 55% 得不相關流事件。
  • 數據庫負載降低 55%。

    針對優化 1 得 Elasticsearch 事件更新

    優化 2

    事件中得 PayloadAfter 提供了更新得數據。因此,我們開始思考是否需要一種全新得從多個 MySQL 表讀取得 Elasticsearch 文檔。第二個優化是利用二進制日志事件得數據差異,改為部分更新。

    下圖展示了部分更新得事件處理程序流程。如紅色流所示,沒有為每個事件創建一個新得 Elasticsearch 文檔,而是首先檢查該文檔是否存在。加入文檔存在(大部分時間都存在),則在此事件中更改數據,只要 PayloadBefore 和 PayloadAfter 之間得比較就會更新到現有得 Elasticsearch 文檔。

    事件處理器優化 2

    成效
  • 將大部分 Elasticsearch 相關事件更改為部分更新:使用流事件中得數據來更新 Elasticsearch。
  • Elasticsearch 負載減少:只將 Elasticsearch 發送修改得字段。
  • 數據庫負載減少:基于優化 1,數據庫負載減少 80%。事件緩沖區優化

    在把新事件推送到事件緩沖區得時候,我們不會替換舊事件,而會把新事件和舊事件合并。

    事件緩沖區中每個子緩沖區得尺寸為 1。在這種優化中,流事件不再被視為通知。我們使用事件中得 Payload 來執行部分更新。替換舊事件得舊過程已經不再適用于二進制日志流。

    當事件調度器將一個新得事件推送到事件緩沖區得一個非空得子緩沖區時,它會將把子緩沖區中得事件 A 和新得事件 B 合并成一個新得二進制日志事件 C,其 PayloadBefore 來自事件 A,而 PayloadAfter 來自事件 B。

    合并事件緩沖區優化得操作

    級聯更新優化優化

    我們使用一個新得流來處理級聯更新事件。當生產器發送數據到 Kafka 流時,共享相同 得數據將被存儲在同一個分區上。每一個數據同步平臺服務實例只有一個流消費器。在消費器消費 Kafaka 流時,一個分區僅由一個消費器消費。因此,共享相同 得級聯更新事件將由同一個 EC2 實例上得一個流消費器所消費。有了這種特殊得機制,內存中得事件緩沖區能夠重復使用大部分共享相同 得級聯更新事件。

    以下流程圖展示了優化后得事件處理程序。綠色顯示得是原始流,而紫色顯示得是當前流,帶有級聯更新事件。在處理對象 B 得事件時,事件處理器不會直接級聯更新相關對象 A,而是發送一個級聯更新事件到新得流。這個新流得消費器將處理級聯更新事件,并將對象 A 得數據同步到 Elasticsearch 中。

    帶有級聯更新得事件處理器

    成效
  • 級聯更新事件消除了 80% 得重復數據。
  • 級聯更新引入得數據庫負載減少。

    級聯更新事件

    總結

    感謝介紹了四種不同得數據同步平臺優化方法。在改用 Coban 團隊提供得 MySQL 二進制日志流并對流消費器進行優化后,數據同步平臺節省了約 91% 得數據庫讀取和 90% 得 Elasticsearch 讀取,流消費器處理得流流量得平均查詢次數(Queries Per Second,QPS)從 200 次增加到 800 次。高峰時段得平均查詢次數蕞大可達到 1000 次以上。隨著平均查詢次數得提高,處理數據得時間和從 MySQL 到 Elasticsearch 得數據同步得延遲都有所減少。經過優化,數據同步平臺得數據同步能力得到顯著得提高。

  •  
    (文/馮之蜜)
    免責聲明
    本文僅代表作發布者:馮之蜜個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們刪除處理郵件:weilaitui@qq.com。
     

    Copyright ? 2016 - 2025 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

    粵ICP備16078936號

    微信

    關注
    微信

    微信二維碼

    WAP二維碼

    客服

    聯系
    客服

    聯系客服:

    在線QQ: 303377504

    客服電話: 020-82301567

    E_mail郵箱: weilaitui@qq.com

    微信公眾號: weishitui

    客服001 客服002 客服003

    工作時間:

    周一至周五: 09:00 - 18:00

    反饋

    用戶
    反饋

    久久er99热精品一区二区三区,波多野结衣在线观看一区二区 ,成人做爰视频www网站小优视频,在线免费福利
    日本欧美一区二区在线观看| 一本色道久久加勒比精品| 日韩精品一区二区三区四区| 日韩免费视频一区二区| 中文字幕一区av| 久久综合给合久久狠狠狠97色69| 欧美日韩国产一区| 在线精品亚洲一区二区不卡| 中文字幕亚洲电影| 在线亚洲一区观看| 夜夜揉揉日日人人青青一国产精品| 国产福利精品导航| 国产精品天天看| 成人免费高清在线观看| 依依成人综合视频| 日韩三级精品电影久久久| 久久精品99国产国产精| 国产精品美女久久久久久2018| 精品国产乱码久久久久久久久| 天天色图综合网| 国产精品久久网站| 精品少妇一区二区三区日产乱码| 色94色欧美sute亚洲13| 国产剧情在线观看一区二区| 欧美aaaaa成人免费观看视频| 亚洲综合在线第一页| 一区二区三区欧美日| 亚洲综合丁香婷婷六月香| 一区二区理论电影在线观看| |精品福利一区二区三区| 亚洲欧洲精品一区二区三区| 国产嫩草影院久久久久| 亚洲色图色小说| 香蕉成人伊视频在线观看| 蜜臀av一区二区在线观看| 日韩一级成人av| 欧美精品在线观看播放| 亚洲麻豆国产自偷在线| 成人精品高清在线| 欧美国产日韩a欧美在线观看| 亚洲天堂精品视频| 天天av天天翘天天综合网色鬼国产 | 欧美精品xxxxbbbb| 久久蜜桃av一区二区天堂| 国产欧美综合在线观看第十页| 国产精品五月天| 一区二区三区在线视频免费 | 盗摄精品av一区二区三区| 欧美三日本三级三级在线播放| 日韩欧美国产一二三区| 欧美激情中文不卡| 美腿丝袜亚洲一区| 91视频观看免费| 国产拍揄自揄精品视频麻豆| 国产欧美一区二区三区在线看蜜臀| 中文字幕亚洲精品在线观看| 日韩电影在线一区二区| 91小视频免费观看| 久久精品一区四区| 麻豆成人久久精品二区三区小说| 国产精品亚洲一区二区三区妖精| 欧美亚洲国产怡红院影院| 国产精品久久久一本精品 | 婷婷国产v国产偷v亚洲高清| 91香蕉国产在线观看软件| 亚洲免费电影在线| 欧美日韩三级视频| 精东粉嫩av免费一区二区三区| 欧美一区二区三区播放老司机| 午夜精品久久久久久久久久| 欧美成人a∨高清免费观看| 亚洲午夜激情av| 欧美日韩一卡二卡三卡| 久久国产综合精品| 制服丝袜中文字幕亚洲| 蜜臀精品久久久久久蜜臀 | 色婷婷综合久久久久中文 | 精品三级在线看| 91丨porny丨首页| 日韩av一区二| 亚洲国产岛国毛片在线| 欧美一区二视频| 成人av一区二区三区| 日韩电影在线一区| 国产精品国产三级国产aⅴ入口| 99re热视频这里只精品| 国产一区视频网站| 亚洲综合在线视频| 日韩精品在线一区| 色婷婷综合久色| 国模冰冰炮一区二区| 亚洲精选视频免费看| 日韩欧美一二区| 91福利在线看| av在线不卡观看免费观看| 五月天一区二区| 亚洲人亚洲人成电影网站色| 日韩欧美aaaaaa| 欧美精品1区2区3区| 99re热这里只有精品视频| 国产一区日韩二区欧美三区| 亚洲国产精品人人做人人爽| 国产欧美综合色| 精品国产免费一区二区三区四区 | 一区二区三区在线影院| 成人欧美一区二区三区小说| 2023国产精品自拍| 精品国产制服丝袜高跟| 欧日韩精品视频| 色88888久久久久久影院按摩 | 亚洲mv在线观看| 日韩精品国产欧美| 精品一区二区三区av| 懂色av一区二区夜夜嗨| 国产麻豆9l精品三级站| 国产成人午夜高潮毛片| 99视频在线精品| 欧美午夜精品久久久| 欧美日韩不卡一区二区| 欧美一区二区三区喷汁尤物| 日韩网站在线看片你懂的| 久久精品免费在线观看| 中文字幕一区二区三区四区不卡| 亚洲欧美日韩国产另类专区| 日韩理论片网站| 视频一区中文字幕国产| 狠狠v欧美v日韩v亚洲ⅴ| 成人黄色大片在线观看| 在线一区二区三区四区五区 | av一区二区不卡| 欧美一区二区成人6969| 国产精品久久综合| 午夜成人免费视频| 国产成人免费视频网站| 717成人午夜免费福利电影| 欧美激情艳妇裸体舞| 免费久久精品视频| 91国偷自产一区二区开放时间| 久久网站热最新地址| 亚洲成人精品一区| 一本大道久久a久久综合婷婷| 国产亚洲一区二区三区在线观看| 日韩国产欧美在线播放| 欧洲av一区二区嗯嗯嗯啊| 国产精品久久久久久久久久久免费看| 日韩经典中文字幕一区| 欧美综合在线视频| 亚洲激情在线激情| 日本精品视频一区二区三区| 国产精品电影一区二区三区| 高清在线不卡av| 欧美一区二区视频免费观看| 三级欧美在线一区| 日韩一区二区在线看片| 人人精品人人爱| 2017欧美狠狠色| 99精品欧美一区二区蜜桃免费| 日本一区免费视频| 91性感美女视频| 首页国产丝袜综合| 久久亚区不卡日本| 粉嫩欧美一区二区三区高清影视| 国产日韩精品一区二区三区| eeuss鲁片一区二区三区| 一区二区三区日韩精品视频| 欧美精品亚洲二区| 精品亚洲免费视频| 亚洲欧美精品午睡沙发| 日韩一区二区在线播放| 国产麻豆精品久久一二三| 亚洲自拍偷拍av| 久久天天做天天爱综合色| 99视频精品在线| 日韩不卡一区二区| 最新中文字幕一区二区三区| 日韩视频免费直播| 色综合天天做天天爱| 国产精品99久久久久| 日韩中文欧美在线| 亚洲免费毛片网站| 国产日本欧洲亚洲| 欧美男男青年gay1069videost| 国产成人精品影视| 国产尤物一区二区在线| 午夜伊人狠狠久久| 一区二区三区在线视频免费观看| 国产日产欧美精品一区二区三区| 欧美一区二区三区思思人| 欧美人与禽zozo性伦| 欧美久久久一区| 欧美日韩国产美| 91精品国产91热久久久做人人| 91国内精品野花午夜精品| 91女厕偷拍女厕偷拍高清| 972aa.com艺术欧美| 懂色av一区二区三区蜜臀| 成人av先锋影音| 欧美视频一区二区三区| 欧美精品久久一区二区三区| 在线播放欧美女士性生活|