2016-07-29 59 views
5

Mój system wykorzystuje mikroprocesor do przetwarzania elementu i planuję utworzyć Stateful MicroService, która przechowuje najnowszy stan elementu. W tej usłudze planuję przechowywać stan wszystkich elementów w niezawodny słowniku, a ilekroć dostęp do elementu jest dostępny, zaktualizuj pole Last access dla elementu.Niezawodne zbieranie danych w pamięci podręcznej w usłudze Fabric

Moim wymaganiem jest to, że chcę tylko przechowywać ostatnio używane elementy w niezawodnej kolekcji i trzeba przenieść pozycje, które nie są dostępne przez długi czas, do zewnętrznego magazynu, takiego jak niebieskie przechowywanie tabel, , a pamięć zewnętrzna i Wiarygodne gromadzenie musi być zsynchronizowane.

Oznacza to, że wszystkie przedmioty powinny znajdować się w magazynie zewnętrznym, a ostatnio używane w niezawodnej kolekcji.

Ma to na celu zmniejszenie obciążenia w niezawodnej kolekcji.

Podobnie jak niezawodna kolekcja działa jak pamięć podręczna.

Czy najlepszą praktyką jest wdrożenie mojego rozwiązania, jak wspomniano powyżej? Czy dobrą praktyką jest wyliczenie ReliableCollection?

Odpowiedz

3

Jeśli Reliable Dictionary ma pełnić funkcję pamięci podręcznej, to nie widzę sensu odciążania nieużywanych elementów do magazynu Azure. Jeśli jest to pamięć podręczna, spodziewałbym się, że nieużywane elementy zostaną wyczyszczone, a rozmówca musiałby powrócić do źródła prawdy o wszystkim, co wygasło z pamięci podręcznej. Ale brzmi to tak, jakbyś chciał, aby Reliable Dictionary było aktualnym źródłem prawdy. Myślę więc, że najpierw musisz zdecydować, czy faktycznie budujesz pamięć podręczną, czy źródło magazynu danych prawdy, który może usuwać dane z pamięci. Brzmi bardziej jak ten drugi.

W obu przypadkach można to zrobić zgodnie z opisem, ale konsekwentne synchronizowanie nie będzie łatwe, ponieważ transakcja nie jest dokonywana w niezawodny słowniku i magazynie zewnętrznym.

Wyliczanie kolekcji jest w porządku, ale jest to kosztowna operacja, więc nie zaleca się jej wykonywania na dużych ilościach danych w gorącej ścieżce, takiej jak ścieżka żądania użytkownika. Można to zrobić okresowo w zaplanowany sposób.

Czy musisz odładować dane do pamięci zewnętrznej? Czy możesz odładować na dysk lokalny? Wiarygodne kolekcje wkrótce automatycznie przeładują stan na dysk.

+0

Po prostu potrzebuję odciążyć dane z kolekcji Reliable. Jeśli będzie dostępne rozładowanie na dysk lokalny, byłoby świetnie ... dzięki. –

+2

Trwa to. W najnowszej wersji (5.1) dane zawsze znajdują się w pamięci i na dysku. W przyszłej wersji tylko gorące dane będą w pamięci, a wszystkie dane będą nadal na dysku. –

+0

Nie mogę się już doczekać - czy będzie jakiś sposób sprawdzenia, ile jest w pamięci? –

0

Używałbym aktora. Daj każdemu z przedmiotów swój własny aktor i przechowuj tam państwo. Kiedy aktor jest zbierany śmieci, można zapisać stan gdzie indziej, lub po prostu zrobić to na zegarze aktor.

Dzięki temu nie trzeba będzie replikować wielu kodów aktora, aby zarządzać wieloma instancjami.

CAVEAT

Ma to sens, jeśli ogólny projekt sensu. Zgodnie z poniższym komentarzem Vaclava, aktorzy nie są dobrzy dla pamięci podręcznej ogólnego przeznaczenia ze względu na model z pojedynczym gwintem dla aktorów. Ale jeśli twój projekt ma aktora reprezentującego pojedynczy byt, a buforowanie jest powiązane z tym bytem (takim jak użytkownik), wtedy traktowanie aktora jako pamięci podręcznej może działać dobrze.

+3

Aktorzy zwykle nie są dobrym pomysłem dla pamięci podręcznych, ponieważ każda instancja aktora wymusza dostęp z jednym wątkiem. Oznacza to, że wiele czytników nie może jednocześnie uzyskać dostępu do tych samych danych, co powoduje niską przepustowość. –

+0

Świetna uwaga: domyślam się, że użytkownik pamięci podręcznej jest podzielony na partycje w taki sam sposób, jak aktorzy są podzieleni na partycje. –

+2

Tak, to może działać w wyspecjalizowanych przypadkach, w których nie masz równoczesnych odczytów, tak jakby każda instancja aktora reprezentowała jednego użytkownika, gdzie klienci i instancje aktorów są mapowane 1: 1. Ale jako pamięć podręczna ogólnego przeznaczenia nie jest to dobry pomysł. –