Более развитые системы управления конфигурациями (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
.Ответы:
Проблема с системами на основе push заключается в том, что у вас должна быть полная модель всей архитектуры на центральном push-узле. Вы не можете толкнуть машину, о которой не знаете.
Очевидно, что это может работать, но требуется много работы, чтобы синхронизировать его.
Используя такие вещи, как Mcollective, вы можете конвертировать Puppet и другие CM в систему на основе push. Как правило, банальную систему легко преобразовать в пуш-систему, но не всегда просто пойти другим путем.
Существует также вопрос организационной политики. Система, основанная на push, передает все управление центральным администраторам. Таким способом очень сложно управлять сложностью. Я думаю, что проблема масштабирования - красная сельдь, любой подход масштабируется, если вы просто посмотрите на количество клиентов. Во многих отношениях толчок легче масштабировать. Однако динамическая конфигурация более или менее подразумевает, что у вас есть хотя бы версия для регистрации клиента по запросу.
В конечном счете, речь идет о том, какая система соответствует рабочему процессу и владельцу в вашей организации. Как правило, тяговые системы более гибкие.
источник
В случае, если он кому-то интересен, я думаю, что, как минимум, я могу предоставить отчет об опыте работы с пользователем, впервые применив Ansible «из коробки», в контексте управления исправлениями для множественных установок критически важных систем. в облаке Амазонки. Чтобы понять мои предвзятые мнения или предубеждения, я должен объяснить, что у меня есть предпочтение Ruby на уровне сценариев автоматизации, и в прошлом я настраивал проекты для использования конфигурации марионеток главного агента для каждого проекта-Vpc. Так что мой опыт противоречит предрассудкам, если таковые были.
Мой недавний опыт был очень благоприятен для динамического перехода к изменяющемуся состоянию от десятков до многих сотен серверов, которые можно масштабировать или увеличивать, отключать и обновлять. В моей ситуации простая команда Ansible 1.7 ad hoc была всем, что мне нужно для создания патча. Однако ввиду эффективности установки AnsibleController (на t2.micro) на Vpc для этой цели в будущем я намерен расширить методику для более сложных требований.
Итак, позвольте мне вернуться к вопросу, заданному в этой теме: плюсы и минусы толчка в динамично меняющемся состоянии.
Предположения типа сервера, на который я нацелился, были:
С учетом этих условий очень просто создать образ машины AnsibleController для установки на множество Vpcs и настроить (с учетными данными) in situ в существующих учетных записях сервера. Автоматизировано в каждом экземпляре, созданном из изображения
Второй элемент может быть сделан относительно сложным, если необходимо (через структуру Info инвентаря Ansible). Но если сложность не требуется, вот очень простой пример сценария для вычисления всех экземпляров Amazon EC2 с каждым интервалом cron и направления результатов в соответствующий файл инвентаризации (например, / etc / ansible / hosts)…
Единственное предостережение для варианта использования - команда patch должна быть идемпотентной. Желательно провести предварительное тестирование, чтобы удостовериться, что оно выполнено, а также убедиться, что исправление выполняет именно то, для чего предназначено.
Подводя итог, я проиллюстрировал пример использования, в котором динамический толчок эффективен против поставленных целей. Это повторяемое решение (в смысле инкапсуляции в изображение, которое можно развернуть в нескольких учетных записях и регионах). По моему опыту, на сегодняшний день метод динамического толчка намного проще обеспечить - и начать действовать - чем альтернативы, доступные из наборов инструментов, доступных нам в настоящее время.
источник