Общее·количество·просмотров·страницы

Java Dev Notes - разработка на Java (а также на JavaScript/Python/Flex и др), факты, события из АйТи

Показаны сообщения с ярлыком google app engine. Показать все сообщения
Показаны сообщения с ярлыком google app engine. Показать все сообщения

вторник, 9 августа 2011 г.

Определение страны пользователя в Google App Engine

Теперь в заголовке X-AppEngine-country пользовательского запроса передается двухбуквенный код страны.

понедельник, 2 мая 2011 г.

Загрузка исходного кода приложения Google App Engine

Допустим, у вас на GAE развернуто приложение. И вы хотите скачать его исходный код. Делается это следующей командой:

appcfg.py download_app -A <application-id> -V <application-version> <output-dir>
Например:

appcfg.py download_app -A mysuperapp -V 1 demos/mysuperapp

См. также: Загрузка данных из Google App Engine Datastore

Также см. источник: Downloading Source Code

суббота, 20 ноября 2010 г.

HighLoad проекты на платформе Google App Engine

Выступление Михаила Кашкина на PyConf Киев 2010

http://app-engine.tumblr.com/post/1611919832

Стратегия генерации контента:
Вариант - вычислять результат в тот момент, когда к нему обращаются - подходит для небольших проектов с малой посещаемостью.
Если посещаемость вырастет в 1000 раз, то вычисления увеличатся в 1000 раз, что может положить ваш сервер.
Поэтому стратегия вычисления может быть такая: вычислять вещи в тот момент, когда они изменяются - а при запросе отдавать уже вычисленное значение.
Второй момент - клиентскую часть сделать приложением, которое само подгружает требуемые данные.
Статику сервер отдал, а динамические данные (те, которые нужно) подгрузит клиентская часть, обратившись к тому или иному API на сервере.
Следующая стратегия - выполнение всех вычислений в параллельном (фоновом) режиме.

Хранилище данных (datastore) - key-value, индексы, долгая запись, приемлемое чтение.
Мемкеш - данные там могут протухать. Данные в мемкеше должны быть слепком данных (копией) в datastore.

Места не должно быть жалко - пусть к нам приходит один и тот же объект, если нужно, мы должны его сохранить хоть в 10 разных видах (проекциях), чтобы имеь возможность быстро его отдать.

Устройство BlobStore:
разделяется на две части - загрузка блоба (объекта) и отдача блоба.
- генерация URL для загрузки объекта
- генерация URL для просмотра (получения) объекта

Google App Engine анонсировала новое API для использования server-push технологии, которое позволяет сильно разгрузить сервер от массы
так называемых poll-запросов, которые периодически проверяют, не появилось ли чего нового на сервере. Это Channel API.

Приемы работы от Михаила Кашкина:
1) Авторизация пользователей - не используются сесиии, вся инфа о пользователе хранится в куках.
2) Активные зоны (36-37-я минута выступления) - часть страницы заменяется уже на клиенте (например, вместо кнопок Авторизация появляется надпись "Привет, Вася, спасибо что залогинились")
3) Отображение аватара человека - аватар хранится в отдельном BlobStore
4) Отображение списка друзей - рендерится весь список друзей, на клиент выдается только дельта
5) Пагинация - непросто решается в БД типа key-value. Используется кнопка "Загрузить еще результаты"
6) Поиск по строке autocomplete -
7) Кеширование страниц - кешируются не только HTML-представления, но также и JSON-представления.

Гугл по письму увеличивает лимиты на CPU, память, запросы.

суббота, 25 сентября 2010 г.

Загрузка данных из Google App Engine Datastore

Если понадобилось сделать полную копию данных, которые хранятся в GAE-приложении, то следует выполнить следующую команду:

./appcfg.py download_data --application=thebestapp --url=http://www.thebestapp.com/remote_api --filename=thebestapp.data

Здесь thebestapp - идентификатор приложения.

Как видим, здесь используется remote_api, поэтому его надо предварительно установить в список обработчиков URL в файле app.aml:

- url: /remote_api
script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py
login: admin


Почти аналогично эти данные закачиваются на локальный (девелоперский) сервер:


./appcfg.py upload_data --application=thebestapp --filename=thebestapp.data ~/thebestappdir --server=localhost:8080

Здесь ~/thebestappdir - каталог, откуда запускается приложение на локальном сервере.

По ссылке Uploading and Downloading Data можно подробнее прочитать о скачке и закачке данных в GAE.

UPDATE: Обновление приложения на сервере

Чтобы обновить приложение (т.е. закачать обновленные файлы приложения с локальной машины на продакшен-сервер) нужно выполнить следующую команду:

./appcfg.py upload application_dir

где application_dir - каталог, где установлено приложение.

Подробне см. ссылку: Uploading Your Application

См. также Загрузка исходного кода приложения Google App Engine

четверг, 1 июля 2010 г.

Вышел релиз Google App Engine SDK 1.3.5

Вышел релиз Google App Engine SDK 1.3.5. Release notes: http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes

Новое:

  • Можно включить прекомпиляцию Питона

  • Конфигурирование лимита хранения Task Queue

  • Task Queues теперь могут иметь до 50 задач на очередь (раньше - 50 задач на приложение)

  • Программный доступ к блобам используя BlobReader - файлоподобный интерфейс для чтения блобов

  • Улучшения в BulkLoader

  • Команды remote_api_shell могут посылаться через HTTPS или HTTP.

  • Admin Console логгирует теперь время задержки запросов (request time latency).

  • Db.delete теперь принимает коллекции

  • Хранилище поддерживает концевые курсоры (end cursors)

  • Исправлено несколько багов

пятница, 14 мая 2010 г.

Итерация по словарю в шаблонах Google App Engine

Возникла задачка: как отрендерить в шаблон GAE данные, которые содержатся в словаре. В шаблон передается словарь, который содержит статистику по регионам. Ключами являются названия регионов, а значениями - количество неких объектов в этом регионе.

Нам нужно в шаблоне выводить список регионов + соответсвуюшую цифру. Делается это так:



"area" : {
{% for i in areaStat.items %}
"{{ i.0 }}" : "{{ i.1 }}"{% if not forloop.last %},{% endif %}
{% endfor %}
}



Здесь areaStat - это имя словаря, i.0 - ключ, i.1 - значение.

среда, 14 апреля 2010 г.

Настройка Google App Engine Launcher

Поговорим о настройках GAE лончера. Лончер используется для того, чтобы запускать GAE-приложения на локальной машине. При запуске, по умолчанию, лончер привязывается на адрес локалхоста, т.е. на 127.0.0.1 - так называемый loopback. А что, если нам надо его привязать к внешнему адресу (в нашей локальной сети), например, на 192.168.1.100 ?

Это делается очень просто. Выделяем в лончере приложение, которое хотим привязать к внешнему IP, нажимаем Ctrl+I (или выбираем пункт меню Edit->Application Settings). Открывается окошко с настройками.



В блок Extra Command Line Flags записываем следующее:
--address=192.168.1.100
нажимаем ОК - и вуаля - приложение привязано к IP 192.168.1.100.

Единственно, что надо добавить - так это то, что эти настройки надо делать при выключенном приложении.

Помимо флага --address есть еще множество других настроек:


--help, -h View this helpful message.
--debug, -d Use debug logging. (Default false)
--clear_datastore, -c Clear the Datastore on startup.
--address=ADDRESS, -a Server binding address
--port=PORT, -p PORT Port for the server to run on.
--datastore_path=PATH Path to use for storing Datastore
file stub data
--history_path=PATH Path to use for storing Datastore
history
--require_indexes Disallows queries requiring composite
indexes not defined in index.yaml.
--smtp_host=HOSTNAME SMTP host to send test mail to.
--smtp_port=PORT SMTP port to send test mail to.
--smtp_user=USER SMTP user to connect as.
--smtp_password=PASSWORD Password for SMTP server.
--enable_sendmail Enable sendmail when SMTP is not
configured.
--show_mail_body Log the body of emails in mail stub.
--auth_domain Authorization domain



Прочитать про это можно также здесь: Google App Engine Launcher Options

четверг, 11 февраля 2010 г.

Вышел релиз Google App Engine SDK 1.3.1. Новые возможности Datastore

Это мой первый пост в новом 2010 году!!!

Итак, вышел релиз Google App Engine SDK 1.3.1. Основные изменения касаются хранилища данных! По порядку:

  • Появились курсоры - курсоры позволяют приложению ставить "закладки" при проходе по набору записей, полученных в результате запроса.

  • Отменен лимит на 1000 записей!!! Юхуууу! Хранилище теперь может возвращать столько записей, сколько потребуется!

  • Уменьшилось количество ошибок хранилища Теперь App Engine автоматически повторяет все запросы к хранилищу, если произошла ошибка доступа к Bigtable. Это уменьшает количество ошибок при put-запросах в 3-4 раза, при get-запросах в 10-30 раз


Дополнительно еще есть много других изменений (см. лист изменений для Python SDK).

По мотивам поста App Engine SDK 1.3.1, Including Major Improvements to Datastore! в блоге Google App Engine.

понедельник, 2 ноября 2009 г.

Python, Django, and Google App Engine

Выступление Гвидо Ван Россума на Google I/O 2008. См. видео-трансляцию.

Постоянные читатели