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".