2010-09-13 64 views
2

一個月前,我嘗試使用F#代理處理和記錄Twitter StreamingAPI數據here。作爲一個小練習,我試圖將代碼轉移到Windows Azure。Twitter使用Windows Azure和F流式API記錄和處理#

到目前爲止,我有兩個作用:

  • 一名工人角色(出版者)是把消息(消息是鳴叫的JSON)到隊列。

  • 從隊列中讀取消息的一個工作角色(處理器)解碼json並將數據轉儲到雲表中。

這會導致很多問題:

  • 是否還好想作爲代理輔助角色?
  • 實際上,消息可能大於8 KB,因此我需要使用blob存儲並將消息作爲參考傳遞給blob(或者有其他方法嗎?),這會影響性能嗎?
  • 如果需要,我可以增加處理器輔助角色的實例數量,並且這個隊列會更快地被處理嗎?

對不起,衝擊所有這些問題,希望你不要介意,

非常感謝!

+0

郵件是否一成不變? – ChaosPandion 2010-09-13 18:21:18

+0

@ChaosPandion感謝您的幫助。是的,消息是不可變的:它只是包含推文上的json信息的字符串。你知道通過引用blob傳遞大量消息的好參考嗎?謝謝! – jlezard 2010-09-13 19:04:19

+0

我不確定你的意思。通常BLOB的意思是「二進制大對象」,通常在引用數據庫時提到。 – ChaosPandion 2010-09-13 19:14:14

回答

1
是否還好想作爲代理輔助角色?

是的,當然。

實際上,消息可能大於8 KB,因此我需要使用blob存儲並將消息作爲blob的引用(或者有其他方式?),這會影響性能嗎?

是的,使用你正在談論的技術(將JSON保存爲blob存儲,名稱爲「JSONMessage-1」,然後將消息發送到包含「JSONMessage-1」內容的隊列)似乎是在Azure中傳遞大於8KB的郵件的標準方式。由於您對Azure存儲進行了4次調用,而不是2次(1次獲取隊列消息,1次獲取blob內容,1次從隊列中刪除,1次刪除blob),速度會更慢。它會明顯變慢嗎?可能不會。 如果相當數量的消息將要超過8KB時Base64編碼的小(這是在StorageClient庫中的疑難雜症),那麼你可以把一些邏輯來確定如何將其發送。

它是正確的說,如果需要,我可以提高處理器的輔助角色的實例的數量,以及隊列會奇蹟般地被處理得更快?

只要你寫你的Worker角色以便它自成一和實例不以對方的方式獲得,那麼,增加的實例計數將通過投放增加。 如果您的角色主要是讀取和寫入存儲,您可能會首先通過多線程處理worker角色,然後再增加實例數量,從而節省成本。

0

可以將工作角色 作爲代理嗎?

這是想到它的最佳方式。想象一下麥當勞的工人。每個工人都有特定的任務,他們通過消息(口語)相互溝通。

在實踐中,消息可以是更大 大於8 KB所以我將需要使用 斑點存儲並傳遞作爲信息的 參考斑點(或是否有 另一種方式?),將那影響 的表現?

只要消息是不可變的,這是做到這一點的最佳方式。字符串可能非常大,因此分配給堆。由於它們是不可改變的,因此通過引用不是問題。

它是正確的說,如果需要的話我可以 增加處理器輔助角色的實例 的數量和 隊列將神奇地處理 更快?

你需要看看你的過程在做什麼,並決定它是IO綁定還是CPU綁定。通常情況下,IO綁定進程將通過添加更多代理來提高性能。如果您正在爲代理使用ThreadPool,那麼即使CPU限制進程,工作也會很平衡,但是您會達到一個限制。這就是說不要怕你的架構和每個運行的結果MEASURE。這是平衡要使用的代理數量的最佳方法。