Общее·количество·просмотров·страницы
Java Dev Notes - разработка на Java (а также на JavaScript/Python/Flex и др), факты, события из АйТи
Показаны сообщения с ярлыком google app engine. Показать все сообщения
Показаны сообщения с ярлыком google app engine. Показать все сообщения
вторник, 9 августа 2011 г.
Определение страны пользователя в Google App Engine
Теперь в заголовке X-AppEngine-country пользовательского запроса передается двухбуквенный код страны.
Ярлыки:
google app engine
понедельник, 2 мая 2011 г.
Загрузка исходного кода приложения Google App Engine
Допустим, у вас на GAE развернуто приложение. И вы хотите скачать его исходный код. Делается это следующей командой:
См. также: Загрузка данных из Google App Engine Datastore
Также см. источник: Downloading Source Code
Например:
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
Ярлыки:
google app engine
суббота, 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, память, запросы.
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, память, запросы.
Ярлыки:
google app engine,
highload
суббота, 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:
Почти аналогично эти данные закачиваются на локальный (девелоперский) сервер:
./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
./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
Ярлыки:
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)
- Исправлено несколько багов
Ярлыки:
google,
google app engine,
python
пятница, 14 мая 2010 г.
Итерация по словарю в шаблонах Google App Engine
Возникла задачка: как отрендерить в шаблон GAE данные, которые содержатся в словаре. В шаблон передается словарь, который содержит статистику по регионам. Ключами являются названия регионов, а значениями - количество неких объектов в этом регионе.
Нам нужно в шаблоне выводить список регионов + соответсвуюшую цифру. Делается это так:
Здесь areaStat - это имя словаря, i.0 - ключ, i.1 - значение.
Нам нужно в шаблоне выводить список регионов + соответсвуюшую цифру. Делается это так:
"area" : {
{% for i in areaStat.items %}
"{{ i.0 }}" : "{{ i.1 }}"{% if not forloop.last %},{% endif %}
{% endfor %}
}
Здесь areaStat - это имя словаря, i.0 - ключ, i.1 - значение.
Ярлыки:
google app engine,
python,
templates
среда, 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 есть еще множество других настроек:
Прочитать про это можно также здесь: Google App Engine Launcher Options
Это делается очень просто. Выделяем в лончере приложение, которое хотим привязать к внешнему 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
Ярлыки:
google app engine
четверг, 11 февраля 2010 г.
Вышел релиз Google App Engine SDK 1.3.1. Новые возможности Datastore
Это мой первый пост в новом 2010 году!!!
Итак, вышел релиз Google App Engine SDK 1.3.1. Основные изменения касаются хранилища данных! По порядку:
Дополнительно еще есть много других изменений (см. лист изменений для Python SDK).
По мотивам поста App Engine SDK 1.3.1, Including Major Improvements to Datastore! в блоге Google App Engine.
Итак, вышел релиз 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.
Ярлыки:
google,
google app engine,
python
понедельник, 2 ноября 2009 г.
Python, Django, and Google App Engine
Выступление Гвидо Ван Россума на Google I/O 2008. См. видео-трансляцию.
Ярлыки:
django,
google,
google app engine,
python
Подписаться на:
Сообщения (Atom)