Воз­мож­но, дан­ная ста­тья долж­на бы­ла уви­деть свет где-то год, а то и два го­да то­му на­зад, а в на­ши с ва­ми вре­ме­на по­ко­ре­ния кос­мо­са подоб­ные раз­мыш­ле­ния уже отда­ют не пер­вой све­же­стью, но, тем не ме­нее, толь­ко те­перь у ме­ня по­яви­лось вре­мя опро­бо­вать плат­фор­му гугла под раз­ра­ботку ре­сур­со­ем­ких при­ло­же­ний в об­ла­ках и по­вос­хи­щать­ся ее воз­мож­но­стя­ми и про­ду­ман­но­стью. Я не бу­ду де­таль­но оста­нав­ли­вать­ся на опи­са­нии самой тех­но­ло­гии, об этом тон­ны книг и ты­ся­чи бло­гов уже на­пи­са­ли, а лишь расска­жу о плю­сах и недо­стат­ках, ну и в кон­це по­ста - при­ве­ду при­мер и код ре­аль­но ра­бо­та­ю­ще­го при­ло­же­ния. Ска­жу сра­зу, до зна­ком­ства с Google App Engine у ме­ня уже был на­коп­лен зна­чи­тель­ный опыт ра­бо­ты в об­лач­ных сер­ви­сах, пре­иму­ще­ствен­но от компа­ний Amazon и Rackspace, а зна­чит срав­ни­вать мне есть с чем, хо­тя срав­не­ние тут не осо­бо умест­но. Если вам все же лень чи­тать опи­са­ние всех этих клауд компью­тин­гов, то по­ста­ра­юсь объ­яс­нить про­сто. Гугл предо­став­ляет свою плат­фор­му, что-то вро­де обыч­но­го ша­ред хо­стин­га или го­то­вый environment ско­рее, на ко­то­ром уже уста­нов­ле­ны прак­ти­че­ски пол­но­функ­ци­о­наль­ная вер­сии Python и зна­чи­тель­но ку­цая вер­сия Java, ко­то­рые об­ве­ша­ны свер­ху разным API от гугла, в частно­сти это ин­тер­фей­сы хра­не­ния би­нар­ных дан­ных в BlobStorage, хра­не­ния та­блич­ных дан­ных (как слож­но пи­сать тех. ста­тью на рус­ском, table data все же зву­чит как-то при­выч­ней) в подо­бии (еще раз, подо­бии, relation-ы тут ре­а­ли­зу­е­мы с по­мо­щью ре­фе­рен­сов, а это не со­всем то) ре­ля­ци­он­ной БД ин­терес­но объеди­нен­ной с key-value сто­ре­джем в ви­де DataStorage, свой UrlFetch, своя ре­а­ли­за­ция cron-а и многое дру­гое. Ли­ми­та­ми же яв­ляют­ся пол­ное read-only опе­ра­ций с файло­вой си­сте­мой и опре­де­лен­ные огра­ни­че­ния в ис­поль­зо­ва­нии си­стем­ных ре­сур­сов в ви­де про­цес­сор­но­го вре­ме­ни, тра­фи­ка и та­ко­го про­че­го, что, впро­чем, сто­ит су­щие ко­пей­ки и эле­мен­тар­но до­ку­па­ет­ся при пер­вой на­доб­но­сти и при­ме­ни­мо к ана­ло­гам-кон­ку­рен­та. Что ка­са­е­мо то­го же Amazon EC2 или Mosso Rackspace, то вы по­лу­ча­е­те свой instance в ви­де го­лой опе­ра­ци­он­ной си­сте­мы, ко­то­рую долж­ны на­строить и запу­стить свой сер­вис на ней. Яв­ляет­ся ли это пре­иму­ще­ством? Од­но­знач­но, ведь вы, по су­ти, огра­ни­че­ны толь­ко ма­те­ри­аль­но и, как след­ствие из пер­во­го ре­сур­са, ли­ми­та­ми об­лач­ной ма­ши­ны, ко­то­рую са­ми и ку­пи­ли ку­пи­ли. К то­му же, пере­но­си­мость проек­та на ама­зо­новских или рэкс­пей­совских об­ла­ках не со­зда­ет ни­ка­ких проблем, в то вре­мя, как GAE - уни­каль­ная в сво­ем ро­де плат­фор­ма и без кар­ди­наль­ной сме­ны ко­да вы ни­ку­да от нее не уй­де­те (нет, уй­ти то ко­неч­но мож­но, но не да­ле­ко и на ко­сты­лях). Вот тут на самом де­ле вам мо­жет се­рьез­но при­го­дит­ся MVC пат­терн для вы­не­се­ние мо­де­ли вне ло­ги­ки, на вся­кий по­жар­ный. Что же до недо­стат­ков ама­зо­новских ила­сти­ков - есть и та­кие. В частно­сти, необ­хо­ди­мость на­строй­ки про­грамм­ного обес­пе­че­ния, его оп­ти­миза­ции и на­личие проклад­ки в ви­де ОС меж­ду мас­си­вом об­ла­ков с вир­ту­а­ли­за­ци­ей и про­цес­сом поль­зо­ва­те­ля да­ет мень­шее бы­стро­дей­ствие. Но, как я уже го­во­рил, плат­фор­мы аб­со­лют­но разные. Если GAE - толь­ко веб при­ло­же­ния, то AEC2 - все, что мож­но запу­стить в linux\windows окру­же­нии. Если во­об­ще про­стым язы­ком го­во­рить, то в слу­чае с GAE вы ра­бо­та­е­те на строй­ке, где уже го­тов фун­да­мент и мож­но строить что хо­чешь, но толь­ко кир­пи­ча­ми и це­мен­том гугла, ко­то­рые стро­го огра­ни­че­ны и за пре­вы­ше­ния квот нуж­но пла­тить, за­то фун­да­мент на­столь­ко креп­кий, что не рух­нет да­же при зем­ле­тря­се­нии, т.к. вы­строен про­фес­сио­на­ла­ми, то в AEC и иже с ним у вас есть пло­щад­ка зем­ли, вы мо­же­те за­ве­сти те же кир­пи­чи, вы­рыть котло­ван, по­строить дом, но нет ни­ка­ких га­ран­тий, что он не рух­нет от вет­ра по­то­му что вы за­бы­ли до­ме­шать пе­сок в це­мент или ваш root па­роль брут­фор­сит­ся за пол ча­са. За­то на этой же зем­ле мож­но ни­че­го и не строить, а за­са­дить все цве­та­ми. В то вре­мя, как с гуглом та­кой но­мер не прой­дет.

Су­ще­ству­ют и бо­лее се­рьезные недо­стат­ки GAE, как, напри­мер, не­воз­мож­ность при­вя­зать к сво­е­му при­ло­же­нию naked до­мен. Ну в смыс­ле без саб­до­ме­на www, все это свя­за­но с тех­ни­че­ской осо­бен­но­стью, когда load balancing осу­ще­ствляет­ся с по­мо­щью направ­ле­ния всех запро­сов че­рез CNAME ghs.google.com, а CNAME не мо­жет быть при­леп­лен вме­сто глав­ное A за­пи­си. При­хо­дит­ся де­лать фит­ны уша­ми и ис­кать до­пол­ни­тель­ные www-лайзе­ры или url-фор­вар­де­ры, ко­то­рые бу­дут пере­направ­лять все запро­сы с го­ло­го до­ме­на на www, что само по се­бе про­ти­во­ре­чит идее рас­пре­де­ле­ния на­гру­зок, все эти саб­до­ме­ны - прош­лый век, как по мне. Еще есть не­ко­то­рые глу­пые ли­ми­ты ка­са­е­мо мак­си­маль­но­го кус­ка дан­ных, по­лу­ча­е­мо­го urlfetch за раз, ли­мит вре­ме­ни ис­пол­не­ния в 30 се­кунд, до­ста­точ­но бо­ро­да­тая вер­сия пи­то­на и django, кри­вая ре­а­ли­за­ция сес­сий и много дру­гих спор­ных мо­мен­тов. Впро­чем, в от­личии от кон­ку­рен­тов, гугл да­ет нам бес­плат­ный ак­каунт с кво­та­ми, ко­то­рых хва­тит для ма­ло­маль­ско­го при­ло­же­ния с го­ло­вой, ли­шая нас проблем с бе­ка­пом дан­ных, по­сто­ян­ны­ми об­нов­ле­ни­я­ми сер­вер­но­го ПО, пере­жи­ва­ни­я­ми по по­во­ду но­вой уяз­ви­мо­сти в apache или mysql, provision control (тут он хоть и при­ми­тив­ный, но удоб­ный деплой с воз­мож­но­стью запус­ка несколь­ких вер­сий при­ло­же­ния на разных саб­до­ме­нах аппспо­та) и та­ко­го про­че­го. Ну, по­жа­луй, хва­тит пере­ли­вать из пу­сто­го в по­рож­нее. Вер­нем­ся к ре­аль­но­му при­мене­нию плат­фор­мы GAE. У ме­ня есть свой уко­ра­чи­ва­тель ссы­лок, ко­то­рый кру­тит­ся на до­ме­не mclnk.me. Про­сто од­на­жды бы­ли у ме­ня сер­ти­фи­кат на сво­бод­ный до­мен и много вре­ме­ни, а хо­те­лось ссыл­ку ко­ро­че бит­ли и с про­смот­ром контен­та ти­па ро­ли­ков юту­ба и кар­ти­нок. До не­дав­не­го вре­ме­ни, она (об­резал­ка, уко­ра­чи­вал­ка - как хо­ти­те), как и весь этот блог, бы­ла на­пи­са­на на PHP и ку­шать осо­бо не про­си­ла, но, пу­тем слу­чайно­го вы­бо­ра, ста­ла кан­ди­да­том на пере­нос се­бя в об­ла­ка Google. В ка­че­стве язы­ка ре­а­ли­за­ции я вы­брал Python. Он мне нра­вит­ся с мо­мен­та да­ле­ко зна­ком­ства в его быт­но­сти еще сы­рым язы­ком пер­вых вер­сий, имен­но на дан­ном инстру­мен­те долж­ны учить про­грам­миро­вать сту­ден­тов, а не за­со­рять их го­ло­вы бей­си­ка­ми да па­ска­ля­ми. Пи­тон учит ла­ко­нич­но­сти, пра­виль­ной раз­мет­ке ко­да и дзе­ну про­грам­миро­ва­ния. А вот вто­рой ва­ри­ант, Java, мною не­лю­бим за его из­бы­точность. Нет, я ко­неч­но по­ни­маю, что это обу­слов­ле­но ис­клю­чи­тель­но до­бры­ми по­бу­жде­ни­я­ми и ми­ни­ми­зи­ру­ет ве­ро­ят­ность воз­ник­но­ве­ния оши­бок ис­пол­не­ния в даль­ней­шем, но пи­сать несколь­ко экра­нов ко­да для эле­мен­тар­но­го функ­ци­о­на­ла при огра­ни­чен­ных ре­сур­сах вре­ме­ни, не се­дых по­ка еще во­лос и энер­ге­ти­ков мне не ка­жет­ся це­ле­со­об­разным. Код при­ло­же­ния вы­гля­дит подоб­ным об­разом, про­шу про­ще­ния, что все на­ва­ле­но в ку­чу и па­ру раз я схал­ту­рил (как при про­верке ва­лид­но­сти ссыл­ки, напри­мер), но де­ла­лось это в пря­мом смыс­ле на ко­лен­ке ле­вой ру­кой. Уко­ра­чи­ва­тель ссы­лок пуб­лич­но до­сту­пен по ад­ре­су http://mclnk.me, а ре­зультат об­реза­ния вы­гля­дит подоб­ным об­разом http://mclnk.me/e.

В ка­че­стве за­клю­че­ния, у GAE есть своя ни­ша, ведь до­ста­точ­но мощ­ный RDS (lighttpd + php-fcgi + mysql на дру­гом хо­сте) на­чи­нал за­хле­бы­вать­ся с la под 2 при ab -n 1000 -c 500, а вот google hosted прогло­тил и да­же не по­да­вил­ся, под­няв 25 инстан­сов для об­ра­ботки запро­сов и отдав все без ди­ле­ев (речь сей­час не об link shortener, ра­зу­ме­ет­ся). Мно­го по­ка еще не хва­та­ет, тот же Google Storage, ко­то­рый сей­час толь­ко по ин­вайтам и, если ве­рить слу­хам, дол­жен стать се­рьезным кон­ку­рен­там Amazon S3, но Roadmap проек­та вну­ша­ет хо­ро­шие на­де­жды в свет­лое бу­ду­щее. По­ду­майте толь­ко об од­ном, а нуж­но ли вам это? Или пусть дальше ваш уют­нень­кий бло­жек жи­вет на хо­стин­ге по $3 в ме­сяц? Я же про­сто по­про­бо­вал это just for fun и ре­шил для се­бя, что сле­ду­ю­щий круп­ный проект с уве­рен­но­стью мож­но под­ни­мать на плат­фор­ме Google App Engine, сэко­но­мив день­ги, нер­вы и бес­ценное вре­мя.