Architektura klient – serwer wiecznie żywa :)

Opublikowany

Wstęp

Jakiś czas temu wpadłem na stronę konkursu „Daj się poznać”, fajna sprawa od jakiegoś czasu prowadzę bloga i stwierdziłem że może dzięki tej inicjatywie uda mi się bardziej systematycznie dodawać do niego treści.
Wielkie dzięki dla organizatora :+1: :D

Jednak nie o tym ma być dzisiejszy wpis.
W ramach konkursu jak i na użytek własny stworzyłem projekt open source pod zacnym tytułem own phone private backup [ Github: https://github.com/tjancz/ownPhonePrivateBackup ]. Idea jest prosta – robić backup istotnych rzeczy zapisanych na własnym telefonie.
Często łapię się na tym że kasuję wątki sms/mms, zdjęcia, pobrane pliki które ktoś mi wysłał bez zastanowienia, a później jednak okazuje się że były potrzebne. :)
Więc czemu by ich nie wrzucać na własny serwer i trzymać pewien czas zanim znikną bezpowrotnie?
Więc będąc zmotywowany do samorozwoju, mając cel przed oczyma zabieram się do pracy.

Analiza problemu

Pierwszym krokiem który każdy, hmm – „programista” powinien zrobić to przeanalizować problem.
Więc i ja to zrobię.
Cel Główny: Mieć backup istotnych danych zapisanych w moim ukochanym androidzie.
Założenia:
- Backup musi być absolutnie prywatny, żadnych publicznych chmur!
- Urządzeniem które backupuje jest mój android phone
- Serwer na który robię backup musi mieć stos technologiczny (fajne słowo) Javy – bo kocham Javę i już :D
- Backup musi się wykonywać w tle samoistnie ( inaczej już po tygodniu zapomnę by go robić )
- Dane z serwera ulatniają się po określonym w konfiguracji terminie

I to chyba wszystko jak na początek.

Fajnie wiem co chcę zrobić teraz wystarczy wymyślić jak i tu pojawia się magiczne słowo

Architektura

Jak dinozaur od razu pomyślałem: „Dla tego problemu idealnie sprawdzi się Klient-Serwer.”
Czemu, gdyż projekt w swym założeniu ma tworzyć backup jednego urządzenia w jednym miejscu.
Jednak czym naprawdę jest architektura klient-serwer?
Wikipedia [ https://en.wikipedia.org/wiki/Client%E2%80%93server_model ] definiuje architekturę klient serwer jako klienta który żąda zasobów i serwer który owe zasoby udostępnia.
Hmm i tu strzał w stopę w moim przypadku to serwer żąda zasobów od klienta, chyba że klient jest serwerem a serwer klientem (?) ;)
A może jak to zwykle w życiu bywa rzeczywistość jest bardziej skomplikowana?

Na pewno mam do czynienia z dwoma modułami, aplikacją androida – moduł 1 i aplikacją Java – moduł 2.

Analizując pobieżnie funkcjonalności mogę stwierdzić że
moduł 1:
- wysyła dane do modułu 2
- żąda odpowiedzi czy dane przechowywane są aktualne
moduł 2:
- pobiera dane
- odpowiada informacją o aktualności danych

Wygląda to trochę jakby jednak oba moduły były czasem klientami a czasem serwerami. Natomiast istotą jest tu kwestia inicjatora operacji. To moduł 1 inicjuje żądania a moduł 2 wykonuje na rzecz modułu 1 operacje i dostarcza wyniki.
Nawet jeśli przeanalizujemy przypadek wysyłania backupu to jednak moduł 1 inicjuje wysyłkę danych oraz oczekuję informacji zwrotnej o powodzeniu ich zapisu po stronie modułu 2.

Czyli jednak mam do czynienia z Client – Server :)

Ciąg dalszy nastąpi…

Pozdrawiam
TJ

Autor
Kategorie DSP2017