Более развитые системы управления конфигурациями (CM), такие как Puppet и Chef, используют подход, основанный на извлечении: клиенты периодически запрашивают обновления у централизованного мастера. Некоторые из них также предлагают подход без мастера (например, на основе push), но утверждают, что он «не для производства» (Saltstack) или «менее масштабируемый» (Puppet). Единственная известная мне система с самого начала - это push-based Ansible.
В чем заключается конкретное преимущество масштабируемости системы, основанной на извлечении? Почему якобы легче добавить больше мастеров, чем агентов?
Например, agiletesting.blogspot.nl пишет:
в «вытягивающей» системе клиенты связываются с сервером независимо друг от друга, поэтому система в целом более масштабируема, чем «выталкивающая» система
С другой стороны, Rackspace демонстрирует, что они могут работать с системами 15K с помощью модели на основе push.
infastructures.org пишет:
Мы клянемся, используя методологию поддержки инфраструктур, используя такие инструменты, как SUP, CVSup, сервер rsync или cfengine. Вместо того, чтобы выдавать изменения клиентам, каждый отдельный клиентский компьютер должен отвечать за опрос золотого сервера при загрузке, а затем периодически, чтобы поддерживать свой собственный уровень оборотов. Прежде чем принять эту точку зрения, мы разработали обширные push-скрипты, основанные на ssh, rsh, rcp и rdist. Проблема, которую мы обнаружили с r-командами (или ssh), заключалась в следующем: когда вы запускаете сценарий, основанный на r-командах, чтобы протолкнуть изменения на ваши целевые машины, есть вероятность, что если у вас более 30 целевых хостов, один из них будет быть в любой момент. Ведение списка введенных в эксплуатацию машин становится кошмаром. В процессе написания кода, исправляющего это, вы получите сложный код-обертку для решения: таймауты от мертвых хостов; регистрация и повторная попытка мертвых хостов; создание и запуск параллельных заданий, чтобы попытаться поразить множество хостов за разумное время; и, наконец, обнаружение и предотвращение использования всех доступных TCP-сокетов на исходном компьютере со всеми исходящими сеансами rsh. Тогда у вас все еще есть проблема получения того, что вы только что сделали, в установочных образах для всех новых хостов, которые будут установлены в будущем, а также повторения этого для всех хостов, которые умирают и должны быть восстановлены завтра. После того, как мы решили реализовать репликацию на основе r-команд, мы обнаружили, что это того не стоит. Мы не планируем снова управлять инфраструктурой с помощью r-команд или с помощью какого-либо другого push-механизма. Они не масштабируются так хорошо, как методы, основанные на извлечении. создание и запуск параллельных заданий, чтобы попытаться поразить множество хостов за разумное время; и, наконец, обнаружение и предотвращение использования всех доступных TCP-сокетов на исходном компьютере со всеми исходящими сеансами rsh. Тогда у вас все еще есть проблема получения того, что вы только что сделали, в установочных образах для всех новых хостов, которые будут установлены в будущем, а также повторения этого для всех хостов, которые умирают и должны быть восстановлены завтра. После того, как мы решили реализовать репликацию на основе r-команд, мы обнаружили, что это того не стоит. Мы не планируем снова управлять инфраструктурой с помощью r-команд или с помощью какого-либо другого push-механизма. Они не масштабируются так хорошо, как методы, основанные на извлечении. создание и запуск параллельных заданий, чтобы попытаться поразить множество хостов за разумное время; и, наконец, обнаружение и предотвращение использования всех доступных TCP-сокетов на исходном компьютере со всеми исходящими сеансами rsh. Тогда у вас все еще есть проблема получения того, что вы только что сделали, в установочных образах для всех новых хостов, которые будут установлены в будущем, а также повторения этого для всех хостов, которые умирают и должны быть восстановлены завтра. После того, как мы решили реализовать репликацию на основе r-команд, мы обнаружили, что это того не стоит. Мы не планируем снова управлять инфраструктурой с помощью r-команд или с помощью какого-либо другого push-механизма. Они не масштабируются так хорошо, как методы, основанные на извлечении. и, наконец, обнаружение и предотвращение использования всех доступных TCP-сокетов на исходном компьютере со всеми исходящими сеансами rsh. Тогда у вас все еще есть проблема получения того, что вы только что сделали, в установочных образах для всех новых хостов, которые будут установлены в будущем, а также повторения этого для всех хостов, которые умирают и должны быть восстановлены завтра. После того, как мы решили реализовать репликацию на основе r-команд, мы обнаружили, что это того не стоит. Мы не планируем снова управлять инфраструктурой с помощью r-команд или с помощью какого-либо другого push-механизма. Они не масштабируются так хорошо, как методы, основанные на извлечении. и, наконец, обнаружение и предотвращение использования всех доступных TCP-сокетов на исходном компьютере со всеми исходящими сеансами rsh. Тогда у вас все еще есть проблема получения того, что вы только что сделали, в установочных образах для всех новых хостов, которые будут установлены в будущем, а также повторения этого для всех хостов, которые умирают и должны быть восстановлены завтра. После того, как мы решили реализовать репликацию на основе r-команд, мы обнаружили, что это того не стоит. Мы не планируем снова управлять инфраструктурой с помощью r-команд или с помощью какого-либо другого push-механизма. Они не масштабируются так хорошо, как методы, основанные на извлечении. Тогда у вас все еще есть проблема получения того, что вы только что сделали, в установочных образах для всех новых хостов, которые будут установлены в будущем, а также повторения этого для всех хостов, которые умирают и должны быть восстановлены завтра. После того, как мы решили реализовать репликацию на основе r-команд, мы обнаружили, что это того не стоит. Мы не планируем снова управлять инфраструктурой с помощью r-команд или с помощью какого-либо другого push-механизма. Они не масштабируются так хорошо, как методы, основанные на извлечении. Тогда у вас все еще есть проблема получения того, что вы только что сделали, в установочных образах для всех новых хостов, которые будут установлены в будущем, а также повторения этого для всех хостов, которые умирают и должны быть восстановлены завтра. После того, как мы решили реализовать репликацию на основе r-команд, мы обнаружили, что это того не стоит. Мы не планируем снова управлять инфраструктурой с помощью r-команд или с помощью какого-либо другого push-механизма. Они не масштабируются так хорошо, как методы, основанные на извлечении. или с любым другим толкающим механизмом в этом отношении. Они не масштабируются так хорошо, как методы, основанные на извлечении. или с любым другим толкающим механизмом в этом отношении. Они не масштабируются так хорошо, как методы, основанные на извлечении.
Разве это не проблема реализации, а не архитектурная? Почему труднее написать многопоточный push-клиент, чем многопоточный pull-сервер?
ansible-pull
.