快取預熱解決方案(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把字型覆蓋了。結果看了半天也沒發現。於是,只百度一夥了,結果還真