В моей работе мне нужно перенести некоторые существующие приложения Enterprise Java на AWS. Я просмотрел много страниц на aws.amazon.com, а также достаточно погуглил. Кроме того, я попытался ответить на все связанные вопросы в stackoverflow. Все это многое прояснило, однако у меня все еще есть некоторая путаница. Вот наша структура приложения:
- Это приложение на основе Spring, которое использует Spring MVC в качестве уровня представления и простые интерфейсы и классы Java для обработки бизнес-логики и логики данных.
- MySQL используется для настойчивости.
Итак, архитектура приложения достаточно проста. Однако загвоздка в том, что нам нужно развернуть множество экземпляров этого приложения. В настоящее время это число составляет 15 и может превышать 30. Еще один момент заключается в том, что все эти экземпляры используют общую базу данных.
Вот чего нам нужно достичь, перейдя на AWS:
- Повышенная отказоустойчивость приложения. Недавно мы столкнулись с отказом сервера / питания на выделенном хостинге, что привело к простоям на несколько часов.
- Более высокая производительность для всех экземпляров приложения с точки зрения времени отклика и пропускной способности.
- Повышенная отказоустойчивость MySQL. Экземпляры приложений недавно вышли из строя на одном из наших серверов из-за некоторого оборудования (жесткого диска), что в основном привело к неожиданной остановке MySQL. Вся файловая система на жестком диске стала доступной только для чтения, что привело к сбоям в работе экземпляров приложения, размещенных на этом сервере.
- Очевидно сокращение общих затрат и накладных расходов на управление инфраструктурой.
Насколько я могу понять инфраструктуру AWS до сих пор, вот что нам понадобится в AWS для нашей настройки:
- 4 экземпляра LINUX AMI на базе EBS с установленными на нем Tomcat и MySQL, каждый из которых содержит около 10 экземпляров приложений.
- Я предполагаю, что нам также понадобится 1 экземпляр для обеспечения отказоустойчивости для каждого из этих 4 экземпляров, всего 8 экземпляров.
- На всех экземплярах сервера будет около 160 ГБ EBS.
- 4 эластичных IP-адреса
- 4 эластичных балансира нагрузки
- Другие вещи, такие как снимок и т. Д.
А теперь вот мои вопросы:
Действительно ли мне нужно иметь этот дополнительный экземпляр сервера (для обеспечения отказоустойчивости) для каждого экземпляра основного сервера, учитывая то, что EBS автоматически поддерживает резервное копирование AWS, и они будут предоставлять новые EBS с теми же данными в случае отказа оборудования?
Как мне поделиться базой данных между всеми экземплярами сервера (4x2) в приведенном выше сценарии? Один из вариантов, который я вижу, - это реализовать кластеризацию MySQL среди этих экземпляров сервера. Допустим, кластер MySQL будет содержать 1 узел управления, 3 узла SQL и 4 узла данных. Однако в этом случае обслуживание кластера будет для нас дополнительными накладными расходами, и это может быть неприемлемо, поскольку мы хотели бы избавиться от управления инфраструктурой.
Нужно ли мне вместо этого использовать RDS для базы данных и удалять экземпляры MySQL со всех серверов (4x2)? Если да, нужно ли мне покупать экземпляры RDS в дополнение к экземплярам EC2 (я думаю, если мне нужно покупать отдельные экземпляры для RDS, тогда стоимость всей инфраструктуры увеличится как минимум на 75%.) Или экземпляры RDS также предоставляют вычислительные единицы для разработки приложений, таким образом уменьшая общее количество экземпляров для развертывания приложений?
В случае внедрения RDS, действительно ли нужны инстансы EC2 на базе EBS? Если мы сможем каким-либо образом удалить требование EBS из экземпляров EC2 с установленными экземплярами RDS, мы сможем снизить общую стоимость.
Любая помощь будет принята с благодарностью, и, пожалуйста, дайте мне знать, если я не могу четко указать мою проблему и мне нужны дополнительные разъяснения по любому вопросу.