2012-07-21 47 views
0

我的問題是關於在Amazon EC2上跨多個服務器快速訪問的聚合數據。在ASP.NET應用程序中,我可能會將該數據存儲在Application [「somevar」]變量中,以便所有用戶都可以快速訪問它(在內存中)。跨服務器每個用戶或全局(針對所有用戶)的內存數據(作爲變量)

當我想要收集彙總數據並且其值在所有服務器上相等時,問題就開始了。如果我選擇部署兩臺服務器,用戶可能每次都將數據傳輸到不同的服務器(服務器位於負載均衡器或ElasticBean下),並且如果我計算用戶請求該頁面的次數,則每臺服務器的應用VAR將有不同的值

例如:

服務器1:

應用[ 「計數器1」] = 120

服務器2:

應用[ 「計數器1」] = 130

我想要的是一個在所有服務器上都相同的變量。我想要類似於應用程序的變量中的數據的原因是我希望內存中的數據能夠快速訪問,那麼我可能會將這些數據寫入數據庫。

我想知道的是我該如何做到這一點。我雖然關於使用Amazon ElasticCache,所以即使我在負載平衡器下有10個服務器,我也可以通過API訪問ElasticCache變量,並且無論從哪個服務器訪問memcache變量,它都會獲取/設置相同的變量,因此我可以實現保持跨服務器全局變量的目標。

我想知道這是否是一種好的做法,以及哪裏有更好的方法來實現此功能。

我正在ASP.NET C#和MySQL中開發我的應用程序。還要考慮到一些彙總數據應寫入數據庫,並且我這樣做是爲了防止同時進行大量寫入,並且在數據達到20次寫入後寫入數據,然後將數據寫入數據庫。

回答

1

只是爲了澄清一些事情。首先,請確保我們瞭解如何使用ElasticCache。 ElasticCache API不會在緩存集羣上提供任何CRUD操作,但Amazon的API嚴格用於管理服務器和配置。您將需要使用.NET的memcached庫來連接到羣集。使用像memcached這樣的緩存對於你來說是第一個問題是一個很好的解決方案。它將輕鬆快速地將簡單的應用程序變量存儲在分佈式環境中。即使使用較小的應用程序,使用緩存通常也是一種很好的做法

我不確定你有多少用戶或者你期望擁有多少用戶,但是在我的多年編程中學到的一件事是通過優化通常是一個糟糕的主意。過度優化是指您在真正需要之前開始優化代碼。以您提出的優化爲例。我們知道在數據庫上寫1會比寫20次快,當然一般來說。但是,除非數據庫是應用程序中實現此功能的瓶頸,否則不會帶來直接的好處,因此會引入大量的複雜性。如果一個memcached集羣服務器發生崩潰,那麼等待寫入數據庫的數據將丟失。如果你真的有很多用戶,那麼你必須開始考慮併發性並鎖定memcached項目。

不知道更多關於您的應用程序,我不能提出任何真正的建議,除非說,在花費時間增加應用程序的複雜性之前,確保您的優化是必需的。

相關問題