Aplikacje stanowe - pytanie

0

Czy aplikacja zapisująca sobie pliki na dysku serwera, na którym działa, to aplikacja stanowa?
Czyli nie konsumuje plików, ale tylko je wypluwa.

3

Jeżeli aplikacja tylko i wyłącznie pisze na dysk np. logi, i przy restarcie również tych plików nie czyta tylko znów zaczyna pisać to ten pliki nie są częścią stanu aplikacji.

Generalnie mówimy że system jest bez stanowy jeżeli stan jego wejść determinuje stan jego wyjść, innymi słowy możemy go zamodelować jako funkcję f(wejścia) -> wyjścia.
System stanowy to system który w jakiś sposób "pamięta" poprzednie stany wejść, taki system możemy zamodelować np. tak f([wejście1, ... wejścieN]) -> obecneWyjście (czyli funkcja dostaje wszystkie poprzednie wejścia).

W kontekście aplikacji najczęściej mówiąc o stanie mamy na myśli to co jest w pamięci. Bazy danych oraz pliki (o ile są dostępne dla wszystkich instancji aplikacji) należy traktować jako byty zewnętrzne z których można pobrać lub do których można zapisać dane, ale nie będące częścią stanu aplikacji. Podobnie jak np. mój bank nie jest częścią mnie choć mogę tam wpłacać i wypłacać pieniądze.

0

Dodam, teoretyczne pojęcie "stanowości" nie zawsze idealnie pasuje do scen z realnego życia, kolega dał dobry przykład.
Takie "coś pomiędzy".

Co to jest właściwie stan? Aplikacja plus? katalog dla niej bieżący???

W skali mikro mamy te same zagadnienia. Co to jest niezmienniczośc obiektu?
Joshua Blosch podaje fajny przykład: wewnątrz javowskiej klasy obiekt jest zmienna cachująca obliczony hash. Najpierw jest zerem / nulllem / whatever, od pewnego momentu (obliczenia) zaczyna nosić wartość. Czy to znaczy, ze niezmienniczy obiekt się zmienia? Zagadkę zostawiam otwartą
.
.
.
.
.
.
a odpowiedzią jest kryterium: na jakiej podstawie oceniamy niezmienniczość. Na podstawie publicznych interfejsów (zmiana tej prywatnej liczby nie jest widoczna)
Odnieś przykład do skali większej.

0

Moim zdaniem, aplikacja zawsze ma jakiś stan. Może być stały, ale w środku będzie (prawie) zawsze jakiś zestaw obiektów, zmienne o jakichś wartościach itd. W praktyce jako aplikację (komponent) bezstanową rozumiem coś co można skalować horyzontalnie bez problemu, czyli patrzę od strony zewnętrznego API - jak każde żądanie może być obsłużone przez dowolną instancję tej aplikacji, to uważam ją za stateless. Jeżeli aplikacja zapisuje gdzieś jakieś dane, z których nie korzysta, to teoretycznie ma stan, w praktyce jest to mało istotna, akademicka dyskusja na temat definicji, tak długo jak storage się nie zapcha.

1 użytkowników online, w tym zalogowanych: 0, gości: 1