Struktura je sledeca: postoji nekoliko (ogranicen broj) klijenata koji koriste svoju instancu odredjene aplikacije i svi su medjusobno dostupni zbog komunikacije. Baza podataka je centralizovana.
Zahtev je sledeci: spreciti da vise od jednog klijenta istovremeno vrse specificiranu operaciju nad istim objektom (objekat je definisan ID-em iz baze).
Kako najelegantnije i najsigurnije resiti ovaj problem? Pricamo teoretski, bez ulazenja u konkretne tehnlogije. Pod terminom "klijenti" mogu biti i web serveri unutar load balancer-a, desktop aplikacije medjusobno dostupne online...
Ono sa cim sam ja trenutno izasao kao privremenim resenjem:
- svaki klijent vodi listu/tabelu ID-eva koje trenutno drzi zakljucanim
- svaki klijent ima i listu "lokacija" ostalih klijenata
- prilikom zahteva za izvrsenje specificirane operacije najpre proverava svoju tabelu, a zatim i tabele svih ostalih klijenata.
- ukoliko objekt nije zakljucan, klijent ga zakljucava u svojoj lokalnoj listi i nastavlja sa operacijom
Najvecu manu gore navedenog algoritma vidim u mogucem dugom cekanju na odgovore ostalih klijenata.
Centralizovano vodjenje liste svih zakljucanih objekata, u bazi, bi donelo minimum utrosenog vremena ali nisam siguran da je moguce odrzati takvu listu azurnom usled mogucih "otkaza" klijenata. Kako onda azurirati listu oslobadjanjem objekata klijenta koji vise nije dostupan? Uvesti dodatni proces/aplikaciju koja na zadate intervale proveravati listu i dostupne klijente? Itd, itd...
Zahtev je sledeci: spreciti da vise od jednog klijenta istovremeno vrse specificiranu operaciju nad istim objektom (objekat je definisan ID-em iz baze).
Kako najelegantnije i najsigurnije resiti ovaj problem? Pricamo teoretski, bez ulazenja u konkretne tehnlogije. Pod terminom "klijenti" mogu biti i web serveri unutar load balancer-a, desktop aplikacije medjusobno dostupne online...
Ono sa cim sam ja trenutno izasao kao privremenim resenjem:
- svaki klijent vodi listu/tabelu ID-eva koje trenutno drzi zakljucanim
- svaki klijent ima i listu "lokacija" ostalih klijenata
- prilikom zahteva za izvrsenje specificirane operacije najpre proverava svoju tabelu, a zatim i tabele svih ostalih klijenata.
- ukoliko objekt nije zakljucan, klijent ga zakljucava u svojoj lokalnoj listi i nastavlja sa operacijom
Najvecu manu gore navedenog algoritma vidim u mogucem dugom cekanju na odgovore ostalih klijenata.
Centralizovano vodjenje liste svih zakljucanih objekata, u bazi, bi donelo minimum utrosenog vremena ali nisam siguran da je moguce odrzati takvu listu azurnom usled mogucih "otkaza" klijenata. Kako onda azurirati listu oslobadjanjem objekata klijenta koji vise nije dostupan? Uvesti dodatni proces/aplikaciju koja na zadate intervale proveravati listu i dostupne klijente? Itd, itd...