На данный момент у меня есть один экземпляр EC2 (2 ЦП, 8 ГБ ОЗУ, Linux), который имеет на нем:
- NodeJS Express Сервер (Backend)
- NodeJS "Микросервис" Express Сервер (взаимодействует с API и т. Д. c)
- PostgresQL DB
- Redis (как посредник сообщений между моим сервером (1) и мой Микросервисный сервер (2)
- ReactJS Приложение (интерфейс), которое обменивается данными с сервером (1)
Теперь это работает нормально с низким трафиком c, но как traffi c увеличивается (10 тыс. посещений в минутах / часах), все это перегружается, и процессор переходит в зону с устойчивой работой. Это также опасный подход, так как все мои функциональные возможности на одном экземпляре. Как быстрое решение я кластеризовал сервер (1), используя мой менеджер PM2, и теперь он работает немного лучше. Но как долгосрочное решение мне нужно разделить вещи и использовать балансировку нагрузки. Вот как я думал разделить его на разные экземпляры EC2:
- NodeJS Express Сервер (Backend) + NodeJS * 10 49 * Сервер (Backend) + балансировщик нагрузки между ними - каждый с 512 МБ ОЗУ, 1 ЦП
- NodeJS "Микросервис" Express Сервер - 512 МБ ОЗУ, 1 ЦП
- PostgresQL AWS RDS (1 ГБ ОЗУ, 1 ЦПУ)
- Redis AWS ElastiCache (cache.t2.micro)
- ReactJS Приложение (внешний интерфейс) - 512 МБ ОЗУ, 1 ЦП
Теперь у меня есть два вопроса:
- Должен ли я балансировать нагрузку на свой бэкэнд (две реплики сервера) или мой веб-интерфейс (приложение ReactJS)? или может быть оба?
- Должен ли я получить больше процессоров для бэкэнда (по 2 процессора каждый)? потому что теперь с этой новой архитектурой я не смог бы кластеризовать ее, как раньше. Что будет более эффективным? кластеризация сервера на 2 ЦП или баланс нагрузки между 2 серверами с 1 ЦП каждый?