Prikazuju se najnoviji postovi s oznakom hosting. Prikaži starije postove
Prikazuju se najnoviji postovi s oznakom hosting. Prikaži starije postove

01 srpanj, 2009

Amazon S3 vs Google AppEngine

Oni koji znaju o čemu se radi o ovim stvarima u naslovu će se možda začuditi. Jer, je ne radi se o istim proizvodima.
  • Amazon S3 je servis za hosting datoteka. Osim samog držanja na serveru - korisnik ništa drugo ne može s njim raditi). 
  • Google AppEngine je punokrvni hosting aplikacija, ali samo pisanih u Pythonu i Javi, s određenim ograničenjima (npr. baza podataka nije prava relacijska)
Amazon ima druge servise koji mogu zamijeniti ono što nudi Google, ali kod Google-e je to malo elegantnije riješeno - utoliko što programer nema previše posla sa clusterima serverima "u oblacima". On se ponaša kao da se njegova aplikacija vrti na jednom serveru.

Međutim, za one koji od Amazonovih servisa koriste samo S3 - AppEngine može biti sasvim pristojna alternativa. Spremanje datoteka u bazu (kao blobovi binarnih podataka) je trivijalan posao. Na primjer, klasa koja je ujedno i model tablice može izgledati ovako:
class Image ( db.Model ):
   file_name = db.StringProperty()
   title = db.StringProperty()
   content = db.BlobProperty(default=None)
Prikaz slike:
class ImagePage( webapp.RequestHandler ):
    def get( self ):
        q = Image.all()
        q.filter( "file_name =", self.request.get( "i" ) )
        images = q.fetch( 1 )
        if( len( images ) > 0 ):
            image = images[ 0 ]
            self.response.headers['Content-Type'] = 'image/jpeg'
            self.response.out.write( image.content )
        else:
            self.response.headers['Content-Type'] = 'text/plain'
            self.response.out.write( "Image not found" )
...pod pretpostavkom da se uopće radi o slici. Ako ne znamo tip datoteke - treba predvidjeti i Content-Type polje u bazi. Nije baš najelegantnije (npr. trebalo bi dodati kod 404 umjesto samo tekstualne poruke), ali radi za JPG slike.

Cijene su otprilike slične:
  • Amazon naplaćuje količinu podataka, broj requestova, promet "u" i "iz"
  • Google naplaćuje količinu podataka, promet "u" i "iz" (cijene su slične Amazonovim). 
  • Google ne naplaćuje requestove, ali naplaćuje "CPU vrijeme" (dakle vrijeme potrebno za izvršavanje aplikacije). 
  • Google ima neku početnu besplatnu početnu količinu (1 gigabajt podataka, 6.5 sati CPU-a, ...), dok Amazon naplaćuje sve. 
  • Na AppEngineu se mogu vrtiti i aplikacije, a ne samo hostati podaci.
  • Veličina binary polja na AE-u je ograničena na 10 megabajta.
E sad... Jesu li te razlike bitne ili ne - ovisi od slučaja do slučaja. 

Sve ovo pišem jer ja već par dana razmišljam o tome da za panoye zamijenim S3 s AppEngine-om. Čisto za hosting podataka s jednim dodatkom kojeg bi htio maknuti s mog linux servera - kreiranje više različitih verzija iste slike. Čini mi se da je AE kao hosting dokumenata - sasvim pristojna alternativa za mnoge web sajtove.

Nešto što tek moram istražiti je - koliko 1 sat CPU-u može podnijeti requestova s nekom elementarnom programskom logikom (na primjer, klasa iz drugog primjera). I, nisam jedini koji postavlja isto pitanje. Tek onda je moguće precizno odrediti razliku u cijeni hostinga binary datoteka između S3 i AE. To planiram napraviti prvom prilikom: izvrtiti par testnih primjera (s mjerenjem vremena izvršavanja) i prebaciti u produkcijsko okruženje i vidjeti kako se CPU "troši".