Dużo sam kodowałem, miałem trochę doświadczenia z równoległymi modelami programowania: aktorzy, pamięć transakcyjna oprogramowania, przepływ danych.
Kiedy próbuję zastosować te architektury w prawdziwym życiu - do aplikacji sieciowej o dużym obciążeniu - żaden model nie obsługuje trwałości i trwałości danych. Rzeczywiste zadania wymagają zapisania danych na końcu. Oznacza to, że nadal muszę używać DB i pułapek synchronizacji DB, możliwych skalowalności szyjek butelek itp.
Czy ktoś zna dobry przykład architektury (src, tekst, diagram lub plany), która korzysta z Akka Actors lub pamięci transakcji oprogramowania i implementuje trwałość na końcu?
Każdy dobry przykład / pomysł na pamięć transakcyjną, aktorów, przepływ danych, przestrzenie krotkowe w rzeczywistych aplikacjach jest mile widziany.
Odpowiedzi:
Modele aktora / STM i trwałość bazy danych są nieco ortogonalne - możesz łatwo mieć jeden bez drugiego, i myślę, że istnieje niebezpieczeństwo pomylenia tych dwóch.
Osiągnięcie trwałości (D w ACID) jest niezwykle złożone w otoczeniu transakcyjnym, a zwłaszcza w środowisku rozproszonym, w którym aktorzy / procesy są koordynowani przez przekazywanie wiadomości. Wpadasz na drażliwe problemy, takie jak problem generałów bizantyjskich .
W rezultacie myślę, że zawsze będzie pewien stopień dostosowania rozwiązania, aby spełnić określone wymagania dotyczące trwałości. Nie ma rozwiązań „jednego rozmiaru dla wszystkich”.
Warto zobaczyć (perspektywa Clojure):
źródło
Model aktora działa całkiem dobrze z segregacją odpowiedzialności za polecenia / zapytania (CQRS) , ponieważ komunikaty dla aktorów wykonujących manipulację danymi mogą być używane jako odpowiedniki „polecenia”.
Co to ma wspólnego z twoim problemem uporczywości? Cóż, pracujesz na pamięci i zapisujesz wszystkie polecenia w dzienniku, co jest tańszą operacją, ponieważ jest to tylko append, i od czasu do czasu zrzuć migawki, aby w razie potrzeby skrócić czas potrzebny na ponowne załadowanie bazy danych (a także umożliwić odzyskać miejsce używane przez dziennik).
To dość powszechna technika. Poszukaj inspiracji w VoltDB i Redis.
źródło
Rich Hickey ma zupełnie nowe dziecko o nazwie Datomic. To nowe podejście do trwałości, oddzielania pamięci, zarządzania transakcjami i zapytań. Opiera się na niezmiennych zapisach i używa języka zapytań o nazwie Datalog (udostępnia funkcje Prologowi). Głównym celem było umożliwienie łatwej dystrybucji i wdrażania w chmurze. Opiera się na pamięci masowej jako usłudze (a więc nie jednej konkretnej implementacji, ale luźno sprzężonej za pośrednictwem interfejsu API over-the-wire).
W Clojure mamy STM, który daje nam ACI, brak D. Datomic dodaje D.
źródło