Планирование разработки масштабируемого веб-приложения - PullRequest
3 голосов
/ 15 июля 2010

Мы создали продукт, который потенциально может генерировать тонны запросов на файл данных, который находится на нашем сервере. В настоящее время у нас есть сервер общего хостинга, который запускает скрипт PHP для запроса к БД и генерирования файла данных для каждого пользовательского запроса. Это неэффективно и до сих пор не было проблемой, но мы хотим перейти к более масштабируемой системе, поэтому мы обращаем внимание на EC2. Нашей главной заботой является возможность обрабатывать большие объемы трафика, когда они возникают, и обеспечивать низкую задержку для пользователей, загружающих файлы данных.

Я не уверен на 100%, как все это будет работать, но это идея:

Мы используем экземпляр EC2 для размещения нашей админ-панели и для генерации файлов, которые обслуживаются пользователями приложения. Когда какой-либо администратор вносит изменения, затрагивающие эти файлы данных (которые загружаются пользователями), мы копируем на S3 с помощью CloudFront. Идея в том, чтобы кэшировать данные и ожидать их на S3, чтобы мы могли сократить время вычислений, и использовать CloudFront для обеспечения низкой задержки для всех пользователей, запрашивающих файлы.

Я все еще изучаю систему и хотел бы узнать, есть ли у кого-нибудь отзывы об этой идее или понимание того, как все это может работать. Мне также интересно узнать о цели таких проектов, как Cassandra. Насколько я понимаю, простое размещение нашего приложения на серверах EC2 делает его масштабируемым по характеру серверов. Является ли Cassandra просто низким уровнем использования ресурсов, или есть причина использовать подобную систему, даже когда на EC2?

CloudFront: http://aws.amazon.com/cloudfront/ EC2: http://aws.amazon.com/cloudfront/ Кассандра: http://cassandra.apache.org/

Ответы [ 2 ]

2 голосов
/ 20 июля 2010

Cassandra - это механизм нереляционной базы данных, и если это то, что вам нужно, вы должны сначала оценить Amazon 100 * SimpleDB : механизм нереляционной базы данных, построенный на основе S3.

Если файл нужно обновлять только по времени (ежедневно, ежечасно, ...), тогда это кажется разумным решением. Но вы можете рассмотреть возможность размещения балансировщика нагрузки перед двумя образами EC2, на каждом из которых выполняется копия вашего приложения. Это облегчит масштабирование позже и станет безопаснее, если произойдет сбой одного экземпляра.

Некоторые другие услуги, о которых вы должны прочитать:

http://aws.amazon.com/elasticloadbalancing/ - решение для балансировки нагрузки Amazons.

http://aws.amazon.com/sqs/ - Используется для передачи сообщений между системами в вашей DA (распределенная архитектура). Например, если вы хотите, чтобы системы, которые создают файл данных, отличались от систем, в которых размещается сайт.

http://aws.amazon.com/autoscaling/ - Позволяет регулировать количество онлайн-экземпляров в зависимости от трафика

Убедитесь, что у вас есть хороший процесс резервного копирования с EC2, часто снимайте ваш диск с ОС и помещайте любые изменчивые данные (например, файлы базы данных) в блок EBS. EC2 не часто выходит из строя, но когда у него нет доступа к оборудованию, и если у вас есть актуальный снимок, вы можете просто запустить новый экземпляр онлайн.

0 голосов
/ 20 июля 2010

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

Существует превосходное объяснение структуры данных, используемой в решениях NoSQL, которая может помочь вам понять, является ли это подходящим решением для помощи:

WTF - суперколонка

...