Возможность независимого масштабирования приложения и базы данных была бы ключевой причиной их разделения. Масштабирование с высокой нагрузкой (или сильно изменяющейся нагрузкой) требует надежной архитектуры, и то, что считается «высокой нагрузкой», будет зависеть от вашего приложения. Например, если база данных и приложение находятся в разных модулях, теоретически вы можете запустить несколько реплик приложения (то есть несколько модулей) и (если хотите) только одну реплику базы данных, на которую указывают все экземпляры приложения. . И вы можете настроить маршрутизацию контроллера входящего трафика nginx к экземплярам приложения и балансировку нагрузки между ними.
Запуск нескольких реплик может дать вам возможность увеличивать и уменьшать масштаб в ответ на загрузку (см., Например, HorizontalPodAutoscaler, но вы также можете масштабировать вручную). Он обеспечивает определенный уровень отказоустойчивости, поскольку один экземпляр может быть перегружен и перестать отвечать (или просто выйти из строя), не затрагивая другие (а отказавший модуль также может быть автоматически перезапущен Kubernetes).
Потенциальная загвоздка, на которую следует обратить внимание при запуске нескольких реплик вашего приложения, по крайней мере, если это существующее приложение, которое вы переносите на kubernetes, заключается в том, что ваше приложение должно быть написано без сохранения состояния для поддержки этого. Предположительно, ваш db доступен только для чтения, что означает, что это не проблема на уровне данных. Возможно, вы могли бы также запустить несколько реплик db и использовать службу, чтобы экземпляры вашего приложения могли общаться с ними. Но вам также нужно подумать о сохранении состояния в приложении, например. На основе токена аутентификации и могут ли разные экземпляры проверять токен без необходимости нового входа в систему?
Не обязательно помещать два контейнера в одну капсулу. В вашем случае вы все равно можете получить некоторые преимущества масштабирования, как если бы ваша база данных была доступна только для чтения, тогда, по-видимому, экземпляры не могут рассинхронизироваться. Но тогда вы можете масштабировать их только вместе, и точно так же каждая пара потерпит неудачу вместе.
person
Ryan Dawson
schedule
10.08.2018