基於 SpringCloud 微服務架構的廣告系統(第三部分:索引構建與檢索、binlog更新、Kafka投遞)

目錄

六、search模塊(廣告索引)

構建索引示意圖(例子)

加載全量索引示意圖

binlog構建增量索引

預定義json模板及解析 示意圖

binlog解析及Kafka投遞 示意圖

廣告檢索服務

媒體方請求、檢索服務響應的結構圖

檢索服務示意圖

再次回顧整個編碼實現


第一部分:eureka、zuul、通用模塊(不講代碼實現,下載代碼自己看。)

第二部分:廣告投放、微服務調用與斷路器(不講代碼實現,下載代碼自己看。)

源碼 : github https://github.com/yingyingqiqi/luoweiying-ad-spring-cloud/tree/master

這不是一個完整的廣告系統,主要涉及兩方面  廣告檢索 、廣告投放 ,這兩個方面我感覺是最重要的,但是也使用Kafka的消息傳遞,爲剩下的曝光見監測、 報表 、扣費 這三個部分留下了接口。

第三部分:

  1. 介紹廣告檢索系統的搭建,我們通過構建索引來爲廣告檢索服務;
  2. 使用MySql的Master-Slave協議,通過Slave監聽Binlog日誌實現數據複製,達到數據一致性的目的;
  3. Kafka投遞解析後的binlog日誌,方便後續統計業務等,並維持索引(增量索引)。
  4. 檢索廣告的索引,實現條件匹配,並返回響應;

廣告系統架構圖

簡略的廣告系統架構圖

六、search模塊(廣告索引)

構建索引示意圖(例子)

爲什麼不用關係數據庫查詢進行檢索,索引是爲廣告檢索服務的,向數據庫查詢太慢;用redis緩存也不夠快,最快的方法用JVM的內存,這纔是最快的。

加載全量索引示意圖

通過加載廣告投放系統導出的索引表,adxxxtable作爲媒介,經過adLevelDataHandler處理 ,轉換成AdXXXObject索引表,存入AdxxxIndex的一對多map中,再統一通過DataTable存取。

爲什麼要導出廣告投放系統的索引表,直接通過jdbc獲取數據庫的信息不好嗎??這裏爲了sponsor廣告系統解耦,整個檢索服務不對數據庫進行操作。

binlog構建增量索引

Binlog 是 MySQL Server 維護的一種二進制日誌, 主要是用來記錄對 MySQL 數據更新或潛在發生更新的 SQL 語句, 並以
"事務"的形式保存在磁盤中( 文件)

對於Binlog日誌的解析過於複雜,以及Binlog日誌沒有列名等信息(有序號),太複雜,那就分層處理:

  1. mysql-binlog-connector-java ( 監聽解析 Binlog 的開源工具)
  2. 使用json文件預先定義模板,內容爲要解析Binlog的列,沒有定義的不處理。
  3. Binlog 日誌Event對象解析 BinlogRowData對象, 再借助json模板文件轉換成MySqlRowData對象。
  4. 第三次藉助通用模板AdxxxTable,向索引更新方法投遞出去

預定義json模板及解析 示意圖

binlog解析及Kafka投遞 示意圖

廣告檢索服務

我們前面做的增量索引+全量索引 ,爲了保存索引與數據庫中存儲的數據一致性,都是爲了檢索服務的高效、準確的執行檢索,

媒體方請求信息,檢索服務響應信息,根據多個索引去篩選匹配廣告信息。

媒體方請求、檢索服務響應的結構圖

檢索服務示意圖

再次回顧整個編碼實現

 

到目前未知,整個基於springCloud微服務架構的廣告系統一小部分完成,整個系統中,最重要的是:

檢索服務、全量索引、增量索引裏面很複雜,很容易繞暈,爲了維護索引,在裏面使用了binlog日誌保存一致性;

爲了方便投遞增量數據,使用了Kafka;

爲了微服務正常運行,使用ribbon、feign通訊,eureka註冊,zuul網關,hystrix短路器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章