Песни об App Engine

Блог переехал на сайт Vurt.ru

Лента фигни постоянно пополняется разными штуками связанными с #GAE и родственным технологиями.

Gum Wars на App Engine

На мой призыв рассказать о своем проекте откликнулись несколько человек. Один из них согласился ответить на мои вопросы.

skitched-20100423-200157.png
(ссылка с картинки ведет на сайт игры)

Об игре

Gum Wars — Это казуальная стратегия с возможностью играть онлайн с другими игроками. В приложении реализован comet способом polling, т.е. браузер постоянно посылает к серверу запросы на новые события. В качестве сервера используется Google App Engine.

Автор проекта Григорий Темченко, персональный блог Soid.

Краткое интервью

Какие технологии используются на серверной стороне?

Я использовал Python, и выбор обусловлен, конечно, удобством для меня. Во-первых, у меня уже был некоторый опыт работы с ним. Во-вторых, пользуясь случаем, хочу поругать Java’вские IDE. Очень уж они медленные, а это для меня достаточно важно (недаром я все еще продолжаю использовать vim как редактор кода). А без IDE Java громоздка и страшна. В остальном я использую webapp фреймворк и разные части django, вроде шаблонов, форм, сериализации.

Какие сервисы предоставляемые Google задействованы?

Для отрисовки игры на клиенте я использовал Google Maps API 2-ой версии. Из App Engine сервисов используется memcache, datastore, queues, cron. Кажется, все.

Что можно кратко рассказать о технической реализации?

Профили пользователей и подобные постоянные записи хранятся в Datastore. Самое интересное - это обработка polling, организация потока сообщений в условиях, когда каждый пользователь присылает запрос раз в секунду. Для этого частично использован memcache, частично Datastore (для важных данных). Есть в планах кешировать в памяти App Cache, но от memcache это пока не избавит.

Сколько времени заняла реализация проекта?

В течение трех месяцев я старался выкрадывать время на выходных, праздниках и иногда по вечерам, чтобы довести проект до приемлемого состояния. Хотя основная часть была сделана в Великие русские новогодние праздники, в остальное время оказалось довольно проблематично заставить себя заняться делом, работая в режиме 5/2 и тратя 2 часа в день по дороге на работу.

Были ли какие-то сложности специфические для GAE?

Конечно, любая новая технология вызывает определенные сложности. То, к чему привыкли разработчики на SQL, оказывается неправильным в идеологии GAE, во многих привычных вещах приходиться до смешного бороться за производительность. С одной стороны это сложности, но кому-то это может оказаться “по кайфу”.

Вопросы

Если вы ходите задать мне или автору вопросы, то оставляйте их в комментариях к заметке.

Еще раз ссылка на сайт http://www.gumwars.com

Если у вас есть интересный проект работающий на Google App Engine, то я бы с удовольствием рассказал о нем в своем блоге

gae app engine use case

# Коментарии 2010/4/23 @ 1:10 pm

FAQ: Голый домен

Один из самых часто задаваемых вопросов в рассылках это “Как мне настроить хостинг моего сайта на GAE без www (или голом домене/naked domain)”.

Постараюсь полностью ответить на этот вопрос для того чтобы было понимание почему это невозможно.

DNS

Для начала придется немного разобраться как работает система доменных имен в интернете.

Когда мы набираем адрес страницы в браузере у нас происходит несколько событий. На первом этапе адрес разбивается на составляющие из которого выделяется доменное имя. И с помощью системной утилиты “ресолвится” в IP адрес, к которому уже потом идет запрос.

DNS это по сути децентрализованная база данных расположенная на множестве серверов. Для сайта с именем seoautomator.mediavirus.ru происходит процедура взаимодействия с DNS серверами. Прежде чем обратиться к самому серверу. Адрес разбивается на составные части, для удобства запишем их в обратном порядке . ru mediavirus seoautomator,

Для полноты понимания мира можно прочитать статью о рекурсивном DNS запросе.

Датацентры

Что нам известно о Google с точки зрения их физического расположения? Несколько вещей:

Теперь перейдем к тому как устроен GAE-хостинг. Никто не рассказывает как он работает внутри, но кое-что известно. Во-первых мы знаем, о том, что это облачный сервис, во-вторых о том, что на самом деле физически сайт находится более чем на одной машине, и что многие сервисы обслуживаются через свои собственные каналы. Поэтому часто следующий запрос приходит не на ту же самую машину, правда в тот же датацентр.

Домашнее задание: попробуйте попинговать google.com и www.google.com и сравните разницу времени ответа. Задание со звездочкой посмотреть марштут traceroute.

Добавление своего домена

Когда мы добавляем свой домен, то не можем добавить прямой IP адрес к конкретному серверу, как это происходит у многих других хостингов. Для случаев когда часть ветки DNS базы надо делегировать какому-то другому DNS серверу существует специальный тип записи CNAME. Поэтому мы добавляем следующую запись:

seoautomator.mediavirus.ru. CNAME ghs.google.com.

И вот тут начинается то ради чего был весь этот пост. Почему мы не можем добавить запись CNAME для голого домена?

А теперь то чего вы меньше всего ожидали — глупого ответа без объяснения причин. По стандарту (RFC 1912, пункт 2.4, или более простым языком) запись CNAME для указанного хоста должена (MUST) быть единственной.

Впрочем объяснение есть и очень простое, это просто правило безопасности, можно сравнить CNAME с символической ссылкой в файловой системе. Было бы странно если бы ссылка имела свое собственное представление о владельце файла или его размере, точно так же и тут. Перенаправляем клиента к другому серверу полностью.

Что делать с голыми доменами

Хотя одна из самых популярных заявок #777 посвящена как раз именно этой проблеме думаю не стоит ждать решения, а придумать его самостоятельно.

Наиболее быстрый, но далеко не самый чистый способ это использовать редиректы Tumblr‘а предложенные Urban Monkey.

Для коммерческих проектов конечно же лучше всего купить хостинг за несколько долларов в год и не зависеть от проблем проекта который любезно согласился приютить вас.

faq gae dns

# Коментарии 2009/11/23 @ 9:14 pm

Archive · RSS ·