0

我的情況:,裏面我的字典可靠一個調用服務織物可靠的字典有多個按鍵

  • 狀態服務。
  • 無狀態WebAPI充當端點,以便我的其他Web應用程序可以與我的有狀態服務進行通信。
  • 我的其他Web應用程序每頁加載超過5000次的無狀態WebAPI,以便從我的可靠字典中獲取數據。我知道我知道......我是繼承這個遺留代碼的幸運人物。

問題:

每個呼叫的時延大約是100個millseconds(我在本地調試,如果有什麼差別),但是乘上5000,我們現在正在談論分鐘。

而不是傳遞密鑰來呼叫我的可靠詞典超過5000次......我可以只用一個鍵就可以打電話給Service Fabric嗎?

+0

可能重複[什麼是最好的方式來搜索IReliableDictionary?](http://stackoverflow.com/questions/36877614/what-would-be-the-best-way-to-search-an- ireliabledictionary) – LoekD

回答

0

您可以在IReliableDictionary https://gist.github.com/aelij/987d974c811865029564f1bbeffb6b47上使用Eli Arbel的擴展。類似於

 ` var data= await YouReliableDictionary; 
     var values= (await data.CreateLinqAsyncEnumerable(txn)) 
      .Where(x => youMultipleKeys.Contains(x.Key)) 
      .Select(x=>x.Value) 
+0

我有點生疏與我的LINQ。這不僅僅是返回一個值嗎?我想以某種方式傳遞一個鍵列表並返回一個列表/字典值。 – Jacky

+0

這正是選擇正在做的事情。它會返回與Where條件相匹配的值IEnumerable(或在這種情況下爲IAsyncEnumerable) – grokk

0

這將是值得分析等待時間來查看時間花在哪裏。浮現在腦海中的兩個可能的罪魁禍首是

  1. 無狀態前端之間的通信有狀態後端
  2. 可靠的字典做磁盤IO到頁面中值是,其中調出服務於讀取。

由於您在本地運行,我假設第一個問題還沒有解決。但是,將讀取調用批量處理後端服務將是減少服務之間往返次數的好主意。您也可以考慮擁有一個不需要來自權威商店的讀取緩存。既然你控制了溝通,這完全是你的力量。

如果第二個是當前的瓶頸,Reliable Dictionary不公開一種機制來批量多次讀取以減少當前磁盤IO的數量。如果您願意爲較低延遲讀取增加內存使用量,那麼您可以使用Reliable Dictionary Notifications構建您希望從中讀取低延遲讀取的Reliable Dictionary的內存緩存。

+0

對不起 - 我還是這個新手。頁面輸入和頁面輸出是什麼意思?我見過一些其他人使用這個術語,但我無法在網上找到定義。 – Jacky

+0

可靠的字典保持所有的可見狀態保持在磁盤上。它還保留部分狀態在內存中以便快速訪問。當Reliable Dictionary需要狀態的一部分時,它不具有內存,它通過從磁盤讀取它將其加載到內存中。換句話說,將它放入頁面。當內存中的狀態變得太大時,它將刪除內存中的一些內存。換句話說就是把它展開。這是OS術語的重用:[Paging](https://en.wikipedia.org/wiki/Paging)。 –