У меня есть приложение чата, использующее стек Openfire, Tomcat6 и MySQL.
В настоящее время я установил все эти серверы на одном микроэкземпляре Linux (613 МБ памяти). Даже при небольшой пользовательской базе 10-20 я сталкиваюсь с перегрузкой процессора, что здесь довольно очевидно.
Поскольку я новичок в Amazon EC2, может кто-нибудь посоветовать мне, как масштабировать мою архитектуру в соответствии с использованием трафика?
следует ли использовать отдельные микроэкземпляры для каждого сервера приложений (openfire, mysql, tomcat6)
должен ли я использовать один маленький или средний экземпляр для всего стека серверов.
Некоторые факторы в контексте:
высокая степень зависимости от MYSQL
высокое использование памяти из-за передачи файлов
веб-приложение, взаимодействующее с другими сервисами Amazon, такими как S3, SES
Я бы использовал по крайней мере m1.small или лучше экземпляр m1.large. Микроэкземпляр на самом деле предназначен только для разработки, потому что скоро 613 МБ может не хватить даже при отсутствии пользователей. Кроме того, вы, скорее всего, увидите много времени на кражу ЦП, и ваш Сервер не будет реагировать через некоторое время после небольшого пика ЦП. Это очень обидно.
Я бы попытался запустить весь стек на каждом экземпляре, кроме mysql-db. Взгляните на RDS! Вам не нужно самостоятельно настраивать высокодоступную инфраструктуру mysql master-slave!
Не используйте микроэкземпляры для производства из-за их непредсказуемого дросселирования процессора. Более рентабельно запускать все в одном экземпляре, но если вы планируете расти и масштабироваться, лучше спроектировать и разработать свое приложение в нескольких экземплярах.
В долгосрочной перспективе будет предпочтительнее отделить сервер приложений от базы данных, чтобы обеспечить максимальную гибкость и масштабируемость каждого уровня. RDS - хороший вариант на данный момент, но имейте в виду, что он ограничен одним экземпляром, если у вас неожиданный всплеск трафика, превышающий пропускную способность самого большого экземпляра, вы можете столкнуться с простоем, и тогда вам нужно будет настроить кластеризация с дополнительными экземплярами, что сложно. Другой вариант на EC2 - Облачная служба баз данных Xeround, он отличается от RDS тем, что может автоматически масштабироваться до дополнительных экземпляров для обеспечения дополнительной пропускной способности и автоматически обрабатывает кластеризацию. Что касается сервера приложений, вы можете автоматически масштабировать его с помощью Amazon CloudWatch характерная черта.