簡體   English   中英

在高流量 Web 開發中設計全局動作計數器

[英]Designing a global action counter in high traffic web development

我們有一個 web 應用程序,可以滿足數百個同時登錄的用戶(在任何給定時間大約有 10K-30K 用戶)。 該應用程序收集分析,特別是針對每秒可能發生幾次的某些用戶操作。

到目前為止,我們的應用程序設計已經非常解耦(很多 memcache/redis 具有延遲的 DB 寫入)並且我們很好地避免了鎖以確保沒有任何東西是“集中的”。

管理層最終決定構建一個實時分析面板,將這些操作匯總到全局計數器中(低至 1 秒的粒度)。 擁有這些“全局”計數器的最佳方法是什么? 我們可以增加一些內存緩存鍵,但我們有一個內存緩存集群 (EC2),因此遍歷所有內存緩存以計算鍵會延遲此指標。 DB 是不可能的,因為我們在這方面遇到了很多瓶頸,因此所有 DB 寫入都通過消息隊列 (beanstalkd) 延遲

任何提示將不勝感激。

這似乎適合具有定期聚合的操作的 NoSQL 轉儲。 在 EC2 上,您就可以訪問所需的工具。

您可以通過設置一個輔助網絡服務器來記錄所有操作,將所有操作注入到單獨的數據庫服務器中,從而完全避免使用現有的網絡服務器基礎設施。 或者,如果不合適,共享網絡服務器但仍卸載到單獨的 NoSQL 服務器。

然后,如果“實時”可以延遲一小段時間(幾秒或幾分鍾),您可以擁有一個清掃器功能,將 NoSQL 表聚合為更適合分析系統的格式,並注入您的“實時”數據庫並清除已處理的 NoSQL 數據。

或者,您可以直接從 NoSQL 獲取統計信息嗎?

NoSQL 可能與使用 Memcached 一樣快(各種基准報告會報告各種結果,具體取決於報告的編寫者),但是當您需要聚合時,它肯定會更快地將數據拉到一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM