Os sistemas de gerenciamento de configuração (CM) mais estabelecidos, como Puppet e Chef, usam uma abordagem baseada em pull: os clientes pesquisam periodicamente um mestre centralizado em busca de atualizações. Alguns deles também oferecem uma abordagem sem mestre (portanto, baseada em push), mas afirmam que 'não é para produção' (Saltstack) ou 'menos escalável' (Puppet). O único sistema que eu conheço que é baseado em push desde o início é o segundo classificado Ansible.
Qual é a vantagem específica de escalabilidade de um sistema baseado em pull? Por que é supostamente mais fácil adicionar mais pull-masters do que push-agents?
Por exemplo, agiletesting.blogspot.nl escreve:
em um sistema 'pull', os clientes entram em contato com o servidor independentemente um do outro, para que o sistema como um todo seja mais escalável que um sistema 'push'
Por outro lado, a Rackspace demonstra que eles podem lidar com sistemas de 15K com um modelo baseado em push.
infastructures.org escreve:
Juramos por uma metodologia pull para manutenção de infra-estruturas, usando uma ferramenta como SUP, CVSup, um servidor rsync ou cfengine. Em vez de enviar as alterações aos clientes, cada máquina cliente individual precisa ser responsável por pesquisar o servidor gold na inicialização e, periodicamente, posteriormente, para manter seu próprio nível de rotação. Antes de adotar esse ponto de vista, desenvolvemos extensos scripts baseados em envio baseados em ssh, rsh, rcp e rdist. O problema que encontramos com os comandos r (ou ssh) foi o seguinte: Quando você executa um script baseado em comando r para fazer uma alteração nas máquinas de destino, é provável que, se você tiver mais de 30 hosts de destino, um deles desça a qualquer momento. Manter a lista de máquinas comissionadas se torna um pesadelo. Ao escrever o código para corrigir isso, você terminará com um código de invólucro elaborado para lidar com: tempos limite de hosts mortos; registrar e tentar novamente hosts mortos; bifurcar e executar tarefas paralelas para tentar atingir muitos hosts em um período de tempo razoável; e finalmente detectando e impedindo o uso de todos os soquetes TCP disponíveis na máquina de origem com todas as sessões rsh de saída. Você ainda tem o problema de inserir o que acabou de fazer nas imagens de instalação para que todos os novos hosts sejam instalados no futuro, além de repeti-lo para todos os hosts que morrem e precisam ser reconstruídos amanhã. Após o problema que enfrentamos para implementar a replicação baseada em comando-r, descobrimos que não vale a pena. Não planejamos gerenciar uma infraestrutura com comandos r novamente ou com qualquer outro mecanismo de envio nesse sentido. Eles não escalam tão bem quanto métodos baseados em pull. bifurcar e executar tarefas paralelas para tentar atingir muitos hosts em um período de tempo razoável; e, finalmente, detectando e impedindo o uso de todos os soquetes TCP disponíveis na máquina de origem com todas as sessões rsh de saída. Você ainda tem o problema de inserir o que acabou de fazer nas imagens de instalação para que todos os novos hosts sejam instalados no futuro, além de repeti-lo para todos os hosts que morrem e precisam ser reconstruídos amanhã. Após o problema que enfrentamos para implementar a replicação baseada em comando-r, descobrimos que não vale a pena. Não planejamos gerenciar uma infraestrutura com comandos r novamente ou com qualquer outro mecanismo de envio nesse sentido. Eles não escalam tão bem quanto métodos baseados em pull. bifurcar e executar tarefas paralelas para tentar atingir muitos hosts em um período de tempo razoável; e, finalmente, detectando e impedindo o uso de todos os soquetes TCP disponíveis na máquina de origem com todas as sessões rsh de saída. Você ainda tem o problema de inserir o que acabou de fazer nas imagens de instalação para que todos os novos hosts sejam instalados no futuro, além de repeti-lo para todos os hosts que morrem e precisam ser reconstruídos amanhã. Após o problema que enfrentamos para implementar a replicação baseada em comando-r, descobrimos que não vale a pena. Não planejamos gerenciar uma infraestrutura com comandos r novamente ou com qualquer outro mecanismo de envio nesse sentido. Eles não escalam tão bem quanto métodos baseados em pull. e, finalmente, detectando e impedindo o uso de todos os soquetes TCP disponíveis na máquina de origem com todas as sessões rsh de saída. Você ainda tem o problema de inserir o que acabou de fazer nas imagens de instalação para que todos os novos hosts sejam instalados no futuro, além de repeti-lo para todos os hosts que morrem e precisam ser reconstruídos amanhã. Após o problema que enfrentamos para implementar a replicação baseada em comando-r, descobrimos que não vale a pena. Não planejamos gerenciar uma infraestrutura com comandos r novamente ou com qualquer outro mecanismo de envio nesse sentido. Eles não escalam tão bem quanto métodos baseados em pull. e, finalmente, detectando e impedindo o uso de todos os soquetes TCP disponíveis na máquina de origem com todas as sessões rsh de saída. Você ainda tem o problema de inserir o que acabou de fazer nas imagens de instalação para que todos os novos hosts sejam instalados no futuro, além de repeti-lo para todos os hosts que morrem e precisam ser reconstruídos amanhã. Após o problema que enfrentamos para implementar a replicação baseada em comando-r, descobrimos que não vale a pena. Não planejamos gerenciar uma infraestrutura com comandos r novamente ou com qualquer outro mecanismo de envio nesse sentido. Eles não escalam tão bem quanto métodos baseados em pull. Você ainda tem o problema de inserir o que acabou de fazer nas imagens de instalação para que todos os novos hosts sejam instalados no futuro, além de repeti-lo para todos os hosts que morrem e precisam ser reconstruídos amanhã. Após o problema que enfrentamos para implementar a replicação baseada em comando-r, descobrimos que não vale a pena. Não planejamos gerenciar uma infraestrutura com comandos r novamente ou com qualquer outro mecanismo de envio nesse sentido. Eles não escalam tão bem quanto métodos baseados em pull. Você ainda tem o problema de inserir o que acabou de fazer nas imagens de instalação para que todos os novos hosts sejam instalados no futuro, além de repeti-lo para todos os hosts que morrem e precisam ser reconstruídos amanhã. Após o problema que enfrentamos para implementar a replicação baseada em comando-r, descobrimos que não vale a pena. Não planejamos gerenciar uma infraestrutura com comandos r novamente ou com qualquer outro mecanismo de envio nesse sentido. Eles não escalam tão bem quanto métodos baseados em pull. ou com qualquer outro mecanismo de envio para esse assunto. Eles não escalam tão bem quanto métodos baseados em pull. ou com qualquer outro mecanismo de envio para esse assunto. Eles não escalam tão bem quanto métodos baseados em pull.
Isso não é um problema de implementação em vez de um problema de arquitetura? Por que é mais difícil gravar um cliente push encadeado do que um servidor pull encadeado?
ansible-pull
.