1. 程式人生 > >快取預熱解決方案(11)

快取預熱解決方案(11)

一、基於nginx+lua完成商品詳情頁訪問流量實時上報kafka的開發

在nginx這一層,接收到訪問請求的時候,就把請求的流量上報傳送給kafka

這樣的話,storm才能去消費kafka中的實時的訪問日誌,然後去進行快取熱資料的統計

用得技術方案非常簡單,從lua指令碼直接建立一個kafka producer,傳送資料到kafka

wget https://github.com/doujiang24/lua-resty-kafka/archive/master.zip

yum install -y unzip

unzip lua-resty-kafka-master.zip

cp -rf /usr/local/lua-resty-kafka-master/lib/resty /usr/hello/lualib

nginx -s reload

local cjson = require("cjson"
) local producer = require("resty.kafka.producer") local broker_list = { { host = "192.168.31.187", port = 9092 }, { host = "192.168.31.19", port = 9092 }, { host = "192.168.31.227", port = 9092 } } local log_json = {} log_json["headers"] = ngx.req.get_headers() log_json["uri_args"
] = ngx.req.get_uri_args() log_json["body"] = ngx.req.read_body() log_json["http_version"] = ngx.req.http_version() log_json["method"] =ngx.req.get_method() log_json["raw_reader"] = ngx.req.raw_header() log_json["body_data"] = ngx.req.get_body_data() local message = cjson.encode(log_json);
local productId = ngx.req.get_uri_args()["productId"] local async_producer = producer:new(broker_list, { producer_type = "async" }) local ok, err = async_producer:send("access-log", productId, message) if not ok then ngx.log(ngx.ERR, "kafka send err:", err) return end

兩臺機器上都這樣做,才能統一上報流量到kafka

bin/kafka-topics.sh --zookeeper 192.168.31.187:2181,192.168.31.19:2181,192.168.31.227:2181 --topic access-log --replication-factor 1 --partitions 1 --create

bin/kafka-console-consumer.sh --zookeeper 192.168.31.187:2181,192.168.31.19:2181,192.168.31.227:2181 --topic access-log --from-beginning

(1)kafka在187上的節點死掉了,可能是虛擬機器的問題,殺掉程序,重新啟動一下

nohup bin/kafka-server-start.sh config/server.properties &

(2)需要在nginx.conf中,http部分,加入resolver 8.8.8.8;

(3)需要在kafka中加入advertised.host.name = 192.168.31.187,重啟三個kafka程序

(4)需要啟動eshop-cache快取服務,因為nginx中的本地快取可能不在了

二、基於storm+kafka完成商品訪問次數實時統計拓撲的開發

maven構建出的一些問題,直接從maven中央倉庫可能下載不到jar包,自己去百度一下jar,下載下來

根據錯誤提示,拷貝到maven本地倉庫對應的目錄中去,然後手工安裝一下

1、kafka consumer spout

單獨的執行緒消費,寫入佇列

nextTuple,每次都是判斷佇列有沒有資料,有的話再去獲取併發射出去,不能阻塞

2、日誌解析bolt

3、商品訪問次數統計bolt

基於LRUMap完成統計

三、基於storm完成LRUMap中topn熱門商品列表的演算法講解與編寫

topn list生成演算法講解
這裡寫圖片描述
1、storm task啟動的時候,基於分散式鎖將自己的taskid累加到一個znode中

2、開啟一個單獨的後臺執行緒,每隔1分鐘算出top3熱門商品list

3、每個storm task將自己統計出的熱資料list寫入自己對應的znode中

4、task初始化

5、熱門商品list儲存

四、基於雙重zookeeper分散式鎖完成分散式並行快取預熱的程式碼開發

1、服務啟動的時候,進行快取預熱

2、從zk中讀取taskid列表

3、依次遍歷每個taskid,嘗試獲取分散式鎖,如果獲取不到,快速報錯,不要等待,因為說明已經有其他服務例項在預熱了

4、直接嘗試獲取下一個taskid的分散式鎖

5、即使獲取到了分散式鎖,也要檢查一下這個taskid的預熱狀態,如果已經被預熱過了,就不再預熱了

6、執行預熱操作,遍歷productid列表,查詢資料,然後寫ehcache和redis

相關推薦

快取預熱解決方案11

一、基於nginx+lua完成商品詳情頁訪問流量實時上報kafka的開發 在nginx這一層,接收到訪問請求的時候,就把請求的流量上報傳送給kafka 這樣的話,storm才能去消費kafka中的實時的訪問日誌,然後去進行快取熱資料的統計 用得技術方案非常

安裝Loadrunner 11.0時,彈出缺少2.8 sp1組件--解決方案win7

pos OS node 運行 分享 mac 進入 sta load 這是因為註冊表缺少FullInstallVer和Version,歸根到底是madc安裝的的問題 以下是解決方法: 1.運行regedit,打開註冊表,進入HKEY_LOCAL_MACHINE\SOFTWAR

有贊透明多級快取解決方案TMC

#一、引子 ##1-1. TMC 是什麼 TMC ,即“透明多級快取( Transparent Multilevel Cache )”,是有贊 PaaS 團隊給公司內應用提供的整體快取解決方案。 TMC 在通用“分散式快取解決方案(如 CodisProxy + Redis ,如有贊自研分散式快取系統 za

分散式快取重建併發衝突問題以及zookeeper分散式鎖解決方案7

分散式重建快取的併發衝突問題 重建快取:比如我們這裡,資料在所有的快取中都不存在了(LRU演算法弄掉了),就需要重新查詢資料寫入快取,重建快取 分散式的重建快取,在不同的機器上,不同的服務例項中,去做上面的事情,就會出現多個機器分散式重建去讀取相同的資料,然

C#進階系列——WebApi 異常處理解決方案

機制 輸出 ges 如果 但是 rom lba slist 解決 出處:http://www.cnblogs.com/landeanfen/p/5363846.html 閱讀目錄 一、使用異常篩選器捕獲所有異常 二、HttpResponseException自

Uber使用Swift重寫APP的踩坑經歷及解決方案轉載

result 框架 退出 帶來 hole 懶漢 將在 例子 穩定 本文出自Uber移動架構和框架組負責人托馬斯·阿特曼於2016年在灣區Swift峰會上的演講,分享了使用Swfit重寫Uber的好與壞。以下為譯文: 我是托馬斯·阿特曼,目前是Uber移動架構和框架組負責人。

如何設計成功而有價值的數據可視化解決方案

同時 right 讀者 有助於 動效 講解 思考 bsp jpg 上篇關於如何設計成功而有價值的數據可視化解決方案,我們已經就規劃方案的思路這一大版塊展開了詳細的講解,本篇繼續幹貨放送,分享下方案的可視化展示該如何進行設計?僅僅只需要好看就可以了嗎?如果不是又該註意些什麽?

HTTP 錯誤 500.21 - Internal Server Error 解決方案

san 原因 cal 方案 發生 err 檢查 net tle 不久前重新安裝了Windows7,在安裝了VS2010 開發平臺之後,將網站發布到IIS,訪問發生如下錯誤: HTTP 錯誤 500.21 - Internal Server Error處理程序“NickLee

msdia80.dll文件出現在磁盤根目錄下的解決方案

磁盤 har mic http comm 管理員 ges sdi AMF 情況描述: 當安裝某些軟件後,磁盤根目錄中多出了msdia80.dll文件,該文件顯示為2006年12月1日,884KB。 原因:  當使用64位操作系統時,在電腦上安裝 Micro

Android 6.0 - 動態權限管理的解決方案

long div span 添加 包含 detail 工具類 putextra ref 轉自:http://www.cnblogs.com/dubo-/p/6018262.html Android 6.0 - 動態權限管理的解決方案 轉載請標註 Android 6.

rem手機端頁面自適應完美解決方案最新

有效 load rem tex width meta sel setattr name <!DOCTYPE html> <html> <head> <meta charset="UTF-8">

前端常見跨域解決方案

-type crm api war str bsp 斷開 jquery 數據塊 什麽是跨域? 跨域是指一個域下的文檔或腳本試圖去請求另一個域下的資源,這裏跨域是廣義的。 廣義的跨域: 1.) 資源跳轉: A鏈接、重定向、表單提交 2.) 資源嵌入: <link

查漏補缺:socket編程:TCP粘包問題和常用解決方案

原因 image 延遲確認 大小 style bsp 緩沖 ket 導致   1、TCP粘包問題的產生(發送端)   由於TCP協議是基於字節流並且無邊界的傳輸協議,因此很容易產生粘包問題。TCP的粘包可能發生在發送端,也可能發生在接收端。發送端的粘包是TCP協議本身引起的

「mysql優化專題」高可用性、負載均衡的mysql集群解決方案12

格式 return 建議 處理方式 sage 主機 等待 status 深度 一、為什麽需要mysql集群? 一個龐大的分布式系統的性能瓶頸中,最脆弱的就是連接。連接有兩個,一個是客戶端與後端的連接,另一個是後端與數據庫的連接。簡單如圖下兩個藍色框框(其實,這張圖是我在悟空

【Visual Studio】MFC does not support WINVER less than 0x0501 解決方案

.net style win blog 文件 ros family sim tar 原文轉自 http://blog.csdn.net/ygzhong000/article/details/41750841 解決方案:在stdafx.h頭文件中添加以下行。 #def

大數據常見錯誤解決方案轉載

nvi clu linux腳本 /etc/ var fin remove -c 技術 1、用./bin/spark-shell啟動spark時遇到異常:java.net.BindException: Can‘t assign requested address

分布式系統事務一致性解決方案

跨庫 sources body 情況下 jpg 分庫 ability 開源 數據 本文首發於InfoQ,版權所有,請勿轉載!!!http://www.infoq.com/cn/articles/solution-of-distributed-system-transacti

等保具體解決方案三級

三級等保具體解決方案等保具體解決方案(三級)

Hive中文註釋亂碼解決方案2

seq cut exit sdn 都在 更多 net hdp 通過反射 本文來自網易雲社區作者:王潘安執行階段launchTask 回到Driver類的runInternal方法,看以下執行過程。在runInternal方法中,執行過程調用了execute方法。exe

針對谷歌瀏覽器以及谷歌核心的瀏覽器預設最小字型12px的正確解決方案實用

原文出處:https://blog.csdn.net/qq_27682041/article/details/72850719 谷歌瀏覽器中font-size小於12px時,字型就不會再縮小了。當時我的第一反應就是會不會是其他css把字型覆蓋了。結果看了半天也沒發現。於是,只百度一夥了,結果還真