Будет ли использование Cloud PaaS автоматически решать проблемы масштабируемости?

В настоящее время я ищу Cloud PaaS, который позволит мне масштабировать приложение для обработки чего-либо между 1 пользователем и 10+ миллионами пользователей ... Я никогда не работал над чем-то таким большим, и большой вопрос, который я не могу решить получить четкий ответ на то, что если вы разрабатываете, скажем, стандартное приложение с реляционной базой данных и soap-webservices, будет ли это приложение автоматически масштабироваться при развертывании на решении Paas или вам все равно нужно создавать приложение с отказом, избыточность и все эти вещи в виду?

Допустим, я развертываю приложение Spring Hibernate в Amazon EC2 и создаю один экземпляр Ubuntu Server с установленным Tomcat. Будет ли это приложение бесконечно масштабироваться или мне нужно больше экземпляров Ubuntu? Если требуется более одного экземпляра Ubuntu, позаботится ли Amazon о запуске приложения на обоих экземплярах или это обязанность разработчика? Как насчет хранилища базы данных, могу ли я установить базу данных на EC2, которая будет масштабироваться по мере роста базы данных, или мне нужно вместо этого использовать один из их API, если я хочу, чтобы она масштабировалась бесконечно?

CloudFoundry позволяет вам создавать локально и просто развертывать прямо на их PaaS, но, поскольку он находится в стадии бета-тестирования, существует ограничение на количество ресурсов, которые вы можете использовать, а базы данных ограничены 128 МБ, если я правильно помню, так что это пока не нужно. . Некоторые предлагают установить CloudFoundry на Amazon EC2, как он масштабируется и как в таком случае обрабатывается уровень базы данных?

GAE (Google App Engine), позволит ли это мне просто развернуть приложение и не беспокоиться о том, как оно масштабируется и реализует избыточность? Кажется, есть некоторые ограничения, что вы можете и что не можете запускать в GAE, и их повышение цен в последнее время расстроило довольно большое количество разработчиков, действительно ли это так дорого по сравнению с другими провайдерами?

Итак, в основном, будет ли он масштабироваться и что нужно сделать, чтобы его масштабировать?


person Jan Vladimir Mostert    schedule 25.03.2012    source источник
comment
Я думаю, что масштабируемость никогда не бывает волшебной и всегда требует большой работы (особенно с учетом многих миллионов пользователей).   -  person Basile Starynkevitch    schedule 25.03.2012
comment
Допустим, у вас есть два месяца, чтобы создать такое приложение и в то же время позаботиться о масштабируемости. Какой провайдер позволит вам продемонстрировать приложение на вашем Mac / настольном компьютере, а затем на следующий день нажать на переключатель, чтобы без проблем загрузить 10 миллионов пользователей?   -  person Jan Vladimir Mostert    schedule 25.03.2012
comment
@JanVladimirMostert - насколько мне известно, только AppEngine будет масштабироваться без проблем, например: вы загружаете код, а он делает все остальное.   -  person Peter Knego    schedule 25.03.2012
comment
@BasileStarynkevitch - GAE автоматически обеспечивает масштабируемость. Чтобы добиться этого, вам придется писать свой код против их проприетарного и ограниченного API.   -  person Peter Knego    schedule 25.03.2012


Ответы (1)


Столько вопросов для одного поста. В любом случае:

  1. Amazon EC2 не масштабируется автоматически при нагрузке. EC2 — это просто виртуальная машина. Вы можете добиться масштабирования инстансов EC2 с помощью Auto Scaling и Упругая балансировка нагрузки.

  2. Базы данных SQL плохо масштабируются. Вот почему люди начали использовать базы данных NoSQL. Лучше всего посмотреть, какую базу данных ваш облачный провайдер предлагает в качестве управляемой службы: Datastore в GAE. и DynamoDB на Amazon.

  3. Установка собственной базы данных на экземпляры EC2 крайне непрактична, поскольку EC2 имеет временное хранилище (при перезагрузке все данные на "диске" теряются).

  4. GAE Datastore на самом деле представляет собой одну большую базу данных для всех запущенных в ней приложений. Так что это довольно масштабируемо — ваш миллион пользователей не должен быть для него проблемой. http://highscalability.com/blog/2011/1/11/google-megastore-3-billion-writes-and-20-billion-read-transa.html

  5. Да App Engine масштабируется автоматически, как интерфейсные экземпляры, так и база данных. Вам не нужно делать ничего особенного, чтобы масштабировать его, просто используйте их API.

  6. Существуют ограничения на то, что вы можете делать с AppEngine:

    A. Нет локального хранилища (файловой системы) — вам нужно использовать Datastore или Blobstore.

    B. Comet поддерживается только через собственный API каналов.

    C. Хранилище данных — это база данных NoSQL: никаких JOIN, ограниченные запросы, ограниченные транзакции.

  7. Стоимость GAE неплохая. Мы делаем 1 млн запросов в день примерно за 5 долларов в день. Самая большая экономия достигается за счет того, что вам не нужен системный администратор в GAE (но он вам нужен для EC2). По сравнению со стоимостью рабочей силы GAE невероятно дешев.

Несколько советов по экономии денег (ускорение) GAE:

О. Используйте get вместо query в хранилище данных (требуется тщательная разработка собственных ключей).

B. Используйте memcache для кэширования данных, полученных из хранилища данных. Это можно сделать автоматически с помощью objectify и его @Cached аннотации.

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

D. Если у вас много REST-запросов с устройств, где вы не используете куки, то отключите поддержку сессий (или накрутите свою, как мы). Сеансы используют хранилище данных под капотом и для каждого запроса, который он получает и отправляет.

Д. Узнайте об настройке параметров приложения. Попробуйте разные настройки (в зависимости от того, насколько терпимо ваше приложение к задержке и шаблонам/пикам трафика). Нам удалось сократить число экземпляров внешнего интерфейса на 70%.

person Peter Knego    schedule 25.03.2012
comment
Допустим, я выбираю Elastic Load Balancing. Как мне масштабировать уровень базы данных, из которого каждый экземпляр получает свои данные, или RDS сделает именно это за меня? - person Jan Vladimir Mostert; 25.03.2012
comment
Нет, запустить собственную базу данных на EC2 ОЧЕНЬ сложно: 1. Эфемерное хранилище энергозависимо, 2. Блочное хранилище работает медленно. 3. Вам необходимо настроить базу данных в распределенной настройке самостоятельно. - person Peter Knego; 25.03.2012
comment
Короче: Amazon не будет автоматически масштабировать вашу базу данных. Для этого вам нужно использовать одну из их служб баз данных. - person Peter Knego; 25.03.2012
comment
Это прекрасно объясняет, так что до свидания реляционные базы данных ... Думаю, Google App Engine - лучший вариант для разработки, даже если он кажется более дорогим и привязывает вас к их платформе. Пока CloudFoundry не выйдет из бета-версии, единственным вариантом будет работа через API. Спасибо Питер! - person Jan Vladimir Mostert; 25.03.2012