Как вы относитесь к наличию (реляционной) базы данных на том же компьютере, что и сервер приложений, если вы хотите иметь масштабируемый бэкэнд, который может обрабатывать около 200 одновременных запросов?
Я вижу, что большинство препятствует этомуподход со следующими основными аргументами:
- Масштабируемость более сложна
- Безопасность (как для AppServer, так и для БД в одной среде)
- Конкуренция ресурсов БД и AppServer
- Одиночная точка отказа
Тем не менее, я все еще вижу множество преимуществ, используя подход, позволяющий установить оба на одном сервере:
- Затраты: в частности, выходные расходы: наличие отдельного сервера для моей базы данных приведет к почти удвоению затрат на исходящую передачу (один раз от базы данных до сервера приложений и один раз от сервера приложений обратно к клиенту).По крайней мере, так обстоит дело почти со всеми провайдерами, которые взимают плату за исходящий трафик вашего сервера.Вопрос, с которым я бы не столкнулся, если бы БД была просто на том же сервере.Конечно, вы можете уменьшить его, эффективно используя кэш вашего сервера приложений, но основная проблема все еще остается.
- Скорость: даже если вы по-прежнему будете обращаться к локальной базе данных через TCP, localhost будет просто быстрее
- Масштабируемость: где проблема на самом деле, я мог бы просто запустить БД в собственной виртуальной машине и масштабировать, модернизируя оборудование и назначая оборудование виртуальной машине, которая в этом нуждается.Или масштабируйте горизонтально с новым экземпляром VM / K8s / любым другим, даже если мои AppServers и моя БД находятся на одной машине
- Одинаковые ресурсы: опять же, имея оба в своей виртуальной машине, я мог бы просто назначитьаппаратные ресурсы, где бы они ни были нужны - вообще нет конкуренции?
Исходя из того, что я вижу, вопрос о размещении БД на удаленном сервере может упростить вещи и улучшить вашу безопасность, но я также вижу многопреимуществ с другим подходом, таких как расходы на исходящий перевод.Так можно ли сказать, что он очень ситуативный и основан на реальных потребностях вашего проекта?
(я намеренно не упоминаю универсальные SOA-архитектуры от Google, AWS, MS Azure, поскольку их стоимость просто не стоитне делать их опцией).