Самый значительный недостаток Ansible — это его производительность при работе с большими инфраструктурами. В отличие от решений, использующих агентов (например, Chef или Puppet), Ansible основан на SSH-подключении. Это означает, что для каждой операции Ansible устанавливает новое SSH-соединение с каждым подконтрольным узлом.
Проблемы, связанные с этим:
- Нагрузка на контрольный узел: Контрольный сервер, с которого запускаются плейбуки, должен устанавливать и поддерживать множество SSH-соединений одновременно.
- Нагрузка на подконтрольные (remote) узлы: Каждый узел обрабатывает входящие SSH-соединения и выполнение модулей. Это может создавать пики нагрузки, особенно при параллельном запуске на большом количестве узлов.
- Задержки: Установка SSH-соединения занимает время, что замедляет выполнение задач по сравнению с агентами, которые постоянно поддерживают соединение или используют другие протоколы.
- Отсутствие постоянного состояния: Ansible stateless (без сохранения состояния) в плане длительных фоновых процессов. Он выполняет операцию и завершает сессию. Для сложных сценариев мониторинга или постоянной синхронизации это менее эффективно, чем агент, который может постоянно следить за состоянием системы.
Хотя Ansible имеет возможности для оптимизации (pipelining, fact caching), фундаментальная модель работы через SSH ограничивает его масштабируемость по сравнению с агентными решениями при очень больших количествах одновременно управляемых узлов.