Это вопрос со сложным ответом, зависящим от вашего конкретного поведения приложения и использования ресурсов. Проще говоря, «краткий ответ» будет: «Это зависит». Это зависит от следующих основных факторов:
- Использование ресурсов приложения
- Сколько RAM, CPU, Disk, сокетов,
и т.д. ... ваше приложение обычно использует: Среднее? Максимум? Min
- Какие узкие места или ограничения ресурсов возникают у приложения первыми?
- Какие подпрограммы в приложении могут вызвать более высокое, чем обычно, использование? (В этом и заключается большая сложность ... все приложения различны и выполняют множество функций в ответ на входные данные, такие как запросы клиентов. Не каждая функция имеет одинаковое поведение с использованием ресурсов ресурса.)
- Высокая доступность / отказоустойчивость
- Одна из причин, по которой вы выбрали Kubernetes, вероятно, заключалась в простоте масштабирования приложения и обеспечения его высокой доступности без единой точки отказа.
- Это сводится к следующему: насколько доступно ваше приложение?
- На уровне кластера / сервера: сколько узлов может выйти из строя или быть неработоспособным и при этом поддерживать достаточно рабочих узлов для обработки запросов?
- На уровне Приложения / Контейнера: Сколько
Pod
с может выйти из строя и по-прежнему обрабатывать запросы или предполагаемую операцию?
- Какой уровень снижения качества обслуживания приемлем?
- Как отдельные приложения взаимодействуют и ведут себя вместе?
- Еще один действительно сложный вопрос, который трудно определить, не наблюдая за их совместным поведением
- Вы можете попытаться провести некоторый анализ таких показателей, как «Запросы в секунду» в сравнении с использованием ресурсов и выбросами. Однако это может быть трудно упростить до одного числа или постоянной / линейной причинно-следственной связи.
- Некоторые запросы или входные данные вызывают "раздувание" или усиление нагрузки на подкомпоненты?
- Например:
- Существуют ли какие-либо запросы SQL, которые приводят к более высокой загрузке БД, чем другие?
- Существуют ли какие-либо операции, которые могут привести к более высокому использованию ресурсов в
Pod
s при поддержке других Service
s?
- Как системы ведут себя вместе в ситуации «максимальной нагрузки»?
На такие вещи очень сложно ответить без проведения нагрузочного тестирования. Не многие компании, которые я видел, делают это вообще! Как ни печально, любые подобные проблемы обычно заканчиваются производством и должны решаться после свершившегося факта. В конечном итоге это сводится к тому, что DevOps, Ops или инженерам по вызову приходится иметь дело с этим, что не является лучшим сценарием, поскольку обычно этот человек не обладает полным знанием кода приложения для его полной диагностики и анализа.