Witam!
W jaki sposób zorganizować pracę aplikacji sieciowej, której stan musi być zsynchronizowany z innymi użytkownikami i jednocześnie nie możemy polegać na klasycznej architekturze, w której mamy dedykowany serwer (koszty utrzymania infrastruktury itp.)? Aplikacja musi rozstrzygać problem modyfikacji współdzielonych obiektów jednocześnie przez dwóch lub więcej klientów. Mój pomysł na to jest następujący: początkowo mamy dwóch klientów, którzy nie są ze sobą połączeni. Jeden z nich próbuje połączyć się z drugim - w tym momencie nie istnieje jeszcze serwer, który rozstrzygałby konflikty (np. jednoczesna modyfikacja jakiegoś obiektu). O tym fakcie wiedzą obaj klienci, którzy na drodze np. losowania próbują ustalić, który z nich będzie serwerem. Po skończonym losowaniu tworzony jest obiekt serwera i cała komunikacja przekierowywana jest do niego. W przypadku gdy do naszej "sesji" chcemy zaprosić kolejnego klienta stosowna informacja wysyłana jest do serwera przez jednego z obecnych już klientów, a serwer decyduje czy takie połączenie nawiązać. Teraz przypadek gdy klient chce dołączyć do trwającej już sesji: do dowolnego klienta uczestniczącego w sesji wysyłane jest zapytanie o możliwość dołączenia. Klient uczestniczący w sesji odsyła informację o tym, że sesja jest w trakcie i adres serwera, który zaakceptuje lub nie nowego klienta.
Nie mam absolutnie żadnego doświadczenia jeśli chodzi o projektowanie aplikacji działających przez sieć. Fragment z losowaniem serwera jest "zmałpowany" z OSPF'a. Cała ta architektura wydaje mi się bardzo mocno naciągana ale to jedyne co przyszło mi do tej pory do głowy.
Pozdrawiam!