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.

Image of evolution of collections.

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 zwracania bool wartości i zamiast parametrów wychodzących. ConditionalValue<T> jest jak Nullable<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.

Następne kroki