Ответ 1
Это много вопросов для одного сообщения. В любом случае:
-
Amazon EC2 автоматически не масштабируется с нагрузкой. EC2 - это просто виртуальная машина. Вы можете добиться масштабирования экземпляров EC2 с помощью Автомасштабирование и Эластичная балансировка нагрузки.
-
Базы данных SQL плохо масштабируются. Поэтому люди начали использовать базы данных NoSQL. Лучше всего посмотреть, какую базу данных предлагает ваш облачный провайдер в качестве управляемой службы: Datastore в GAE и DynamoDB на Амазонке.
-
Установка собственной базы данных в экземплярах EC2 очень непрактична, поскольку EC2 имеет ephemeral storage (при перезагрузке он теряет все данные на диске).
-
GAE Datastore - фактически одна большая база данных для всех приложений, работающих на ней. Таким образом, он довольно масштабируемый - ваш миллион пользователей не должен быть проблемой для него. http://highscalability.com/blog/2011/1/11/google-megastore-3-billion-writes-and-20-billion-read-transa.html
-
Да App Engine автоматически масштабируется, как внешние экземпляры, так и база данных. Нет ничего особенного, чтобы сделать его масштабным, просто используйте их API.
-
Существуют ограничения, которые вы можете сделать с AppEngine:
а. Нет локального хранилища (файловой системы) - вам нужно использовать Datastore или Blobstore.
В. Comet поддерживается только через свой собственный API каналов
С. Datastore - это база данных NoSQL: нет JOIN, ограниченных запросов, ограниченных транзакций.
-
Стоимость GAE неплохая. Мы делаем 1M запросов в день около 5 долларов в день. Самая большая экономия исходит из того факта, что вам не нужен системный администратор GAE (но вам нужен один для EC2). По сравнению с расходованием рабочей силы GAE невероятно дешево.
Некоторые подсказки для экономии денег (ускорение) GAE:
а. Используйте get вместо запроса в Datastore (требуется тщательная обработка natiral ключей).
В. Используйте memcache для кэширования данных, которые вы получили в виде хранилища данных. Это можно сделать автоматически с помощью objectify и @Cached
аннотации.
С. Денормализовать данные. Это означает, что вы произвольно пишете данные в разных местах, чтобы добраться до него как можно меньше операций.
Д. Если у вас много запросов REST с устройств, где вы не используете куки файлы, отключите поддержку сеанса (или сверните свой собственный, как и мы). Сеансы используют хранилище данных под капотом и для каждого запроса, который он получает и ставит.
Е. Читайте о настройке параметров приложения. Попробуйте различные настройки (в зависимости от того, насколько толерантно ваше приложение запрашивать задержку и ваши трафик/шипы). Мы смогли сократить внешние экземпляры на 70%.