Wprowadzenie do niezawodnych kolekcji w usługach stanowych usługi Azure Service Fabric
Kolekcje Reliable Collections umożliwiają pisanie aplikacji w chmurze o wysokiej dostępności, skalowalności i małych opóźnieniach, tak jakby tworzysz pojedyncze aplikacje komputerowe. Klasy w przestrzeni nazw Microsoft.ServiceFabric.Data.Collections udostępniają zestaw kolekcji, które automatycznie zapewniają wysoką dostępność stanu. Deweloperzy muszą programować tylko do interfejsów API niezawodnej kolekcji i umożliwić usłudze Reliable Collections zarządzanie replikowanym i lokalnym stanem.
Kluczową różnicą między kolekcjami Reliable Collections i innymi technologiami wysokiej dostępności (takimi jak Redis, Azure Table Service i Azure Queue Service) jest to, że stan jest przechowywany lokalnie w wystąpieniu usługi, a jednocześnie zapewnia wysoką dostępność. To oznacza, że:
- Wszystkie operacje odczytu są lokalne, co powoduje małe opóźnienia i odczyty o wysokiej przepływności.
- Wszystkie operacje zapisu powodują minimalną liczbę operacji we/wy sieci, co powoduje małe opóźnienia i zapisy o wysokiej przepływności.
Klasy Reliable Collections można traktować jako naturalną ewolucję klas System.Collections : nowy zestaw kolekcji przeznaczonych dla aplikacji w chmurze i wielu komputerach bez zwiększania złożoności dla dewelopera. W związku z tym kolekcje Reliable Collections to:
- Replikowane: zmiany stanu są replikowane w celu zapewnienia wysokiej dostępności.
- Asynchroniczne: interfejsy API są asynchroniczne, aby upewnić się, że wątki nie są blokowane podczas naliczania operacji we/wy.
- Transakcyjne: interfejsy API wykorzystują abstrakcję transakcji, dzięki czemu można łatwo zarządzać wieloma kolekcjami Reliable Collections w usłudze.
- Utrwalone lub nietrwałe: dane mogą być utrwalane na dysku w celu zapewnienia trwałości w przypadku awarii na dużą skalę (na przykład awarii zasilania centrum danych). Niektóre kolekcje Reliable Collections obsługują również tryb nietrwały (z zastrzeżeniami), w którym wszystkie dane są przechowywane w pamięci, takie jak replikowana pamięć podręczna w pamięci.
Niezawodne kolekcje zapewniają wysoką spójność z pudełka, aby ułatwić wnioskowanie o stanie aplikacji. Silna spójność jest osiągana przez zapewnienie, że zatwierdzenia transakcji zakończą się dopiero po zalogowaniu całej transakcji na kworum większości replik, w tym podstawowej. Aby osiągnąć słabszą spójność, aplikacje mogą potwierdzić powrót do klienta/obiektu żądającego przed zwróceniem asynchronicznego zatwierdzenia.
Interfejsy API Reliable Collections to ewolucja współbieżnych interfejsów API kolekcji (znajdujących się w przestrzeni nazw System.Collections.Concurrent ):
- Asynchroniczne: zwraca zadanie, ponieważ w przeciwieństwie do współbieżnych kolekcji operacje są replikowane i utrwalane.
- Brak parametrów: używa
ConditionalValue<T>
metody do zwracaniabool
wartości i zamiast parametrów wychodzących.ConditionalValue<T>
jest jakNullable<T>
, ale nie wymaga T być strukturą. - Transakcje: używa obiektu transakcji, aby umożliwić użytkownikowi grupowanie akcji na wielu niezawodnych kolekcjach w transakcji.
Obecnie microsoft.ServiceFabric.Data.Collections zawiera trzy kolekcje:
- Reliable Dictionary: reprezentuje replikowany, transakcyjny i asynchroniczny zbiór par klucz/wartość. Podobnie jak ConcurrentDictionary, zarówno klucz, jak i wartość mogą być dowolnego typu.
- Niezawodna kolejka: reprezentuje zreplikowany, transakcyjny i asynchroniczny kolejkę typu pierwszy na początku (FIFO). Podobnie jak w przypadku funkcji ConcurrentQueue, wartość może być dowolnego typu.
- Niezawodna kolejka współbieżna: reprezentuje replikowaną, transakcyjną i asynchroniczną kolejkę porządkowania w celu zapewnienia wysokiej przepływności. Podobnie jak w przypadku trybu ConcurrentQueue, wartość może być dowolnego typu.