Budowanie odpornej na błędy miękkiej aplikacji internetowej w czasie rzeczywistym z Erlang / OTP

Chciałbym zbudować odporną na błędy miękką aplikację internetową w czasie rzeczywistym dla sklepu z pizzą. Powinno to pomóc pizzerii w przyjmowaniu rozmów telefonicznych od klientów, wprowadzaniu ich jako zamówień do systemu (za pośrednictwem klienta internetowego CRM) i pomaganiu dyspozytorom w przypisywaniu kierowców dostaw do zamówień.

Cele te nie są niczym niezwykłym, ale chciałbym, aby usługa była dostępna 24 godziny na dobę, 7 dni w tygodniu, tzn. Aby była odporna na błędy. Co więcej, chciałbym, aby działał bardzo szybko i był bardzo czuły.

Poniżej znajduje się bardzo prosty widok architektury dla takiej aplikacji.

Problem polega na tym, że nie wiem, jak wykorzystać całą dobroć Erlang / OTP, aby aplikacja była bardzo czuła i odporna na błędy.

Oto moje pytania:

Które elementy systemu powinny być replikowane w celu zapewnienia odporności na błędy i jak mam to zrobić? Wiem, że mogę przechowywać status każdego pojazdu (współrzędne, przypisane zlecenia itp.) W replikowanej bazie danych Mnesia. Czy to dobry sposób?Które usługi przechowywania danych powinny być konwencjonalne oparte na SQL (np. Na podstawieboss_db) i co należy zrobić na Mnesii, aby zapewnić bardzo szybką reakcję? Czy można używać konwencjonalnej bazy danych SQL do przechowywania rekordów klientów i historii w tak odpornej na błędy i wysoce czułej aplikacji?Czy powinienem starać się przechowywać wszystkie dane dotyczące wszystkich usług (klientów, stanu pojazdów itp.) W pamięci RAM, aby aplikacja była bardzo responsywna?Czy powinienem przechowywać trwałe dane pojazdu (identyfikator, pojemność itp.) W konwencjonalnej bazie danych SQL i przechowywać dane w czasie rzeczywistym (współrzędne, przypisane zamówienia, zamówienia w bagażniku itp.) W bazie danych Mnesia, aby aplikacja była bardziej reaguje w czasie rzeczywistym?