Spędzam wieczory oceniając usługę Azure Service Fabric jako zamiennik dla naszego obecnego stosu WebApps/CloudServices i nie mam pewności, jak decydować, kiedy usługi/aktorzy z państwem powinni być pełnoprawnymi aktorami oraz kiedy powinni być bezpaństwowymi aktorami z zewnętrznie utrwalonym stanem (Azure SQL, Azure Storage i DocumentDB). Wiem, że jest to całkiem nowy produkt (przynajmniej dla ogółu społeczeństwa), więc prawdopodobnie nie ma jeszcze wielu dobrych praktyk w tym zakresie, ale przeczytałem większość z documentation udostępnionych przez Microsoft bez znalezienia konkretnego odpowiedź na to.Zrozumienie, kiedy należy korzystać z usług stanowych i kiedy polegać na zewnętrznej trwałości w usłudze Azure Service Fabric
Obecna domena problemu, do której się zbliżam, to nasz magazyn zdarzeń; części naszych aplikacji bazują na źródłach zdarzeń i CQRS, a ja oceniam, jak przenieść ten sklep z wydarzeniami na platformę Service Fabric. Magazyn zdarzeń będzie zawierał wiele danych szeregów czasowych, a ponieważ jest to nasze jedyne źródło prawdy dla danych tam przechowywanych, musi być spójny, replikowany i przechowywany w pewnej formie trwałego przechowywania.
Jednym ze sposobów, który rozważałem, aby to zrobić, jest użycie stateful "EventStream"; każda instancja agregująca wykorzystująca źródło zdarzeń przechowuje swoje zdarzenia w odizolowanym strumieniu. Oznacza to, że aktywny aktor może śledzić wszystkie zdarzenia dla własnego strumienia, a ja spełniłbym moje wymagania dotyczące przechowywania danych (transakcyjne, replikowane i trwałe). Jednak niektóre strumienie mogą rosnąć bardzo duże (setki tysięcy, jeśli nie miliony zdarzeń), i to jest, gdzie zaczynam być niepewny. Posiadanie aktora z dużą ilością państwa będzie, jak sądzę, wpływać na wydajność systemu, gdy te duże modele danych będą wymagały serializowania lub deserializacji z dysku.
Inną opcją jest uniemożliwienie tym aktorom bezpaństwowości i sprawienie, by po prostu odczytali swoje dane z zewnętrznej pamięci masowej, takiej jak Azure SQL - lub po prostu skorzystali z usług bezpaństwowych zamiast aktorów.
Zasadniczo, kiedy jest stan dla aktora/usługi "za dużo" i należy zacząć rozważać inne sposoby postępowania z państwem?
Ponadto, ta sekcja w dokumentacji Service Fabric Actors design pattern: Some anti-patterns zostawić mnie trochę zaskoczony:
Treat Azure Usługa Fabric Actors jako systemu transakcyjnego. Azure Service Fabric Actors nie jest systemem opartym na zatwierdzaniu dwufazowym, oferującym ACID. Jeśli nie zastosujemy opcjonalnej trwałości, a maszyna, w której aktor działa na matrycach, jej aktualny stan będzie z nią związany. Aktor będzie bardzo szybko pojawiał się w innym węźle, ale jeśli nie zaimplementujemy trwałości podkładu, stan zniknie. Jednak między wykorzystaniem prób, podwójnym filtrowaniem i/lub idempotencjalnym projektem można osiągnąć wysoki poziom niezawodności i spójności.
Co oznacza "jeśli nie wdrożymy opcjonalnego utrzymania" tutaj? Miałem wrażenie, że tak długo, jak twoja transakcja modyfikująca stan się powiedzie, twoje dane przetrwały do trwałego przechowywania i replikowane do co najmniej części replik. W tym punkcie zastanawiam się, czy zdarzają się sytuacje, w których stan moich aktorów/służb ulegnie zagubieniu, i jeśli jest to coś, co muszę poradzić sobie. Wrażenie, jakie dostałem od modelu stanowego w innych częściach dokumentacji wydaje się przeciwdziałać temu stwierdzeniu.
masz aktualizację do tego, ja znajduję się w bardzo podobnej sytuacji zastanawiać, co skończyło się robi. Twoje zdrowie. – user299709
@Trond Nordheim Czy zdecydowałeś się na rozwiązanie wykorzystujące SF? Mam podobny wymóg i byłbym zainteresowany usłyszeć, co zdecydowałeś. – Oliver
Mamy do czynienia z tą samą ścieżką i mamy te same wątpliwości, przetestowaliśmy wiele narzędzi do pozyskiwania zdarzeń .NET (mementoFX, ncqrs, etc ...), ale nie jesteśmy z nich super zadowoleni (może to nasza wina), ale jesteśmy wciąż szukają jakiejś alternatywy. – MonDeveloper