
I P2P i grid/cloud computing su trenutačno totalno in. Naravno, P2P nam je poznat već dulje vrijeme, od Napstera preko BitTorrenta, pa do stvari poput Skypea ili Joosta (koji, čini mi se, nije baš zaživio). Cloud computing je na prvi pogled noviji izum, dok se ne sjetite stare Sunove “mreža je računalo”.
Dobra stvar kod (trenutne inkarnacije) cloud computinga je činjenica da svoju aplikaciju možete jednostavno hostati, ne brinući o hardveru ili hardverskim problemima, backupima, a ukoliko zatreba, lako stvar skalirate na 1000x više servera uz linearni trošak.
Dakle, stvar je sa perspektive korisnika odlična. Sa perspektive providera resursa za cloud computing, stvar je mnogo kompliciranija - trebate brinuti o svemu od prije navedenog, trebate imati ogromne data-centere, brinuti o njihovom smještaju, napajanju, hlađenju, osiguranju, na toliko veliki broj računala konstatno se događaju hardverski kvarovi, itd, itd. Zato niti ne čudi da su veliki provideri poput Amazona ili Googla primarno i korisnici svojih servisa, koje su tek naknadno odlučili otvoriti javnosti (kad je već cijeli sustav posložen, šteta malo ne zaraditi od njega).
Što nas dovodi do peer-to-peer sustava, koji rade na principu “ruka ruku mije”. Odnosno, svi korisnici u P2P sustavu žrtvuju dio svojih resursa koje ne koriste, kako bi u trenutku kad im treba mogli koristiti resurse drugih u sustavu. Primjeri popularnih P2P sustava su većinom za file-sharing (BitTorrent) i VoIP (Skype).
Ima li preklapanja između grida i p2pa? Novi startup Wuala je primjer peer-to-peer grid storagea (a jel im baš trebao pridjev “social” u taglineu? grr). Nekoliko blogova nedavno je sugeriralo primjenu p2p mehanizma u stvaranju konkurenta Googleu. Jedan je blog (u kontekstu rasprave o novim JavaScript engineima i profiliranju JS-a kao mainstream jezika) sugerirao da se računala korisnika iskoriste i za grid computing. [nažalost nemam link, ne mogu ga izguglati više]
Ovo posljednje mi zvuči kao zanimljiva ideja. Iako članak priča o korištenju JS-a u browserima za computing, problemima latencije zbog HTTP-a i sigurnosnih problema, sama srž ideje uopće nije loša. Na sličnoj ideji temelje se različiti @HOME projekti (SETI, DNA sequencing, razbijanje kriptografskih ključeva, itd), no oni su specijalizirani slučajevi, odnonsno radi se o posebno izgrađenim aplikacijama i sustavima za samo jednu primjenu.
Ako poopćimo stvar i dozvolimo izvođenje bilo kakvog koda (uz obraćanje pažnje na sigurnost sustava i onemogućavanje virusa ili zlonamjernih programa), mogao bi se razviti sustav u kojem korisnici mogu tražiti od drugih ili nuditi svoje CPU (možda i mrežne, ili diskovne kao što to radi Wuala) resurse drugim korisnicima.
Očito, trebalo bi dobro promisliti koju platformu ponuditi programerima za ovakav “grid”, a da stvar bude uspješna. Platforma mora biti već postojeća i popularna i podržavati mogućnost sandboxinga i limitiranja aplikacije koja se izvodi. Vjerujem da je najbolji izbor za tako nešto C#, odnosno .NET framework. Osim što je po defaultu prisutan na najproširenijem OS-u današnjice i ima poprilično dobru podršku i mindshare kod developera, postoje kvalitetne open source implementacije i za Linux i OSX sustave. Tehnološki sličnu stvar već rade u Second Lifeu, dakle očito platforma to može.
U ovakom sustavu, distribuirani program bio bi pisan tako da ga je moguće podijeliti u što veći broj što nezavisnijih zadataka, pojedini moduli distribuirali bi se peerovima, koji bi po završetku zadatka vratili rezultate. Prvi problem s ovim koji mi pada na pamet je mjerenje učinkovitosti neovisno o pojedinom računalu (u istom vremenu različita računala će obaviti različitu količinu posla) ili zadatku (neki zadaci traju dulje, a neki kraće). Jedno moguće rješenje je da platforma na svakom računalu radi benchmark CPU-a i računa faktor na osnovu kojeg se vremena izvođenja zadataka na različitim računalima mogu svesti na zajednički nazivnik.
Ekonomija cijele priče zasnivala bi se na činjenici da neki ljudi imaju slobodnih CPU resursa (npr. većina ljudi dok su na pauzi za ručak) dok drugima treba svaki MIPS kojeg mogu izvući (npr. neki ludi znanstvenici). Korisnici bi za svoje potrebe bili voljni platiti određeni iznos, koji bi se distribuirao peerovima na osnovu obavljenog posla (uz malu proviziju onome čiji je cijeli sustav, iliti startupu iz naslova). Na sličan način (ali za ljude umjesto procesora) radi Amazonov Mechanical Turk te bi se u projektu mogle iskoristiti i neke njihove ideje i rješenja.
Idealno, cijela stvar bi bila open source, za obavljeni posao dobijali bi se i plaćali krediti, tako da bi svi mogli istovremeno sudjelovati i kao naručitelji i kao izvođači poslova, arbiteri bi imali neku malu proviziju, dakle stvorio bi se cijeli jedan mali p2p ekosustav.
Zašto iznosim ovu ideju umjesto da već ove sekunde marljivo kuckam kod (ili bar pripremam term sheet :)? Zato što me zanima što vi, dragi čitatelji, mislite o ideji, što je očito dobro ili krivo, biste li bili voljni raditi na tome, koristiti ili investirati u ovakav sustav? Ima li sve to uopće smisla ili je to samo halucinacija?
I, da, naravno, ako ovakva stvar već postoji, slobodno spomenite. Nije da se sve može naći na Googlu :)