Pracuję nad aplikacją internetową, która historycznie została zbudowana na stosie PHP/MySQL.Czy korzystanie z serwerów stanowych ma sens?
Jedna z kluczowych operacji aplikacji musiała wykonać kilka ciężkich obliczeń, które wymagały powtórzenia w każdym wierszu całej tabeli DB. Nie trzeba dodawać, że było to poważne wąskie gardło. Podjęto więc decyzję o przepisaniu całego procesu w Javie.
Dało nam to dwie korzyści. Po pierwsze, Java, jako język, była znacznie szybsza niż proces PHP. Po drugie, mogliśmy utrzymać cały zestaw danych w pamięci serwera aplikacji Java. Teraz możemy wykonywać obliczenia - ciężkie operacje w pamięci, a wszystko dzieje się znacznie szybciej.
To działało przez chwilę, dopóki nie uświadomiliśmy sobie, że musimy skalować, więc potrzebujemy więcej serwerów internetowych.
Problem polega na tym, że według obecnego projektu wszystkie muszą zachować ten sam stan. Wszystkie wysyłają zapytanie do DB, przetwarzają dane i utrzymują je w pamięci. Ale co się dzieje, gdy trzeba zmienić te dane? W jaki sposób wszystkie serwery zachowują spójność?
Ta architektura wydaje mi się błędna. Wydajność sprawia, że przechowywanie wszystkich danych w pamięci jest oczywiste, ale to poważnie utrudnia skalowalność.
Jakie są opcje z tego miejsca? Przejdź do pamięci wewnętrznej, pary klucz-wartość, magazynu danych? Czy powinniśmy całkowicie zrezygnować z utrzymywania stanu na serwerach?
+1 za ziarno prawdy. – duffymo