2
配置管理:基于推与拉的拓扑
更加成熟的配置管理(CM)系统(例如Puppet和Chef)使用基于拉的方法:客户端定期轮询集中式主服务器以获取更新。他们中的一些人也提供了一种无主的方法(因此,基于推送),但指出它不是“用于生产”(Saltstack)或“可伸缩性较差”(Puppet)。我从一开始就知道的唯一基于推送的系统是亚军Ansible。 基于拉式系统的特定可伸缩性优势是什么?为什么增加更多的pull-master比push-agent更容易? 例如,agiletesting.blogspot.nl写道: 在“拉”系统中,客户端彼此独立地联系服务器,因此与“推”系统相比,整个系统可扩展性更高 另一方面,Rackspace展示了他们可以使用基于推送的模型处理15K系统。 infastructures.org写道: 我们发誓使用诸如SUP,CVSup,rsync服务器或cfengine之类的工具来维护基础结构的拉方法。而不是将更改推送给客户端,每个单独的客户端计算机都需要负责在启动时轮询金牌服务器,然后在以后定期维护自己的转速级别。在采用这种观点之前,我们基于ssh,rsh,rcp和rdist开发了广泛的基于推式的脚本。我们发现使用r命令(或ssh)的问题是:当运行基于r命令的脚本将更改推送到目标计算机时,很奇怪的是,如果您拥有30台以上的目标主机,则其中的一台将在任何给定时间出现故障。维护调试机器列表成为噩梦。在编写代码以对此进行更正的过程中,您将最终得到详尽的包装器代码来处理:死主机超时;记录并重试已死的主机;分叉并运行并行作业,以尝试在合理的时间内击中许多主机;最后,检测并防止用尽所有出站rsh会话的源计算机上的所有可用TCP套接字的情况。然后,您仍然有一个问题,就是要为将来要安装的所有新主机将自己所做的任何事情放入安装映像中,并对要死掉而明天必须重建的任何主机重复执行此操作。在经历了实现基于r命令的复制的麻烦之后,我们发现这是不值得的。我们不打算再次使用r命令或任何其他推送机制来管理基础结构。它们不像基于拉的方法那样可扩展。分叉并运行并行作业,以尝试在合理的时间内击中许多主机;最后,检测并防止用尽所有出站rsh会话的源计算机上的所有可用TCP套接字的情况。然后,您仍然有一个问题,就是要为将来要安装的所有新主机将自己所做的任何事情放入安装映像中,并对要死掉而明天必须重建的任何主机重复执行此操作。在经历了实现基于r命令的复制的麻烦之后,我们发现这是不值得的。我们不打算再次使用r命令或任何其他推送机制来管理基础结构。它们不像基于拉的方法那样可扩展。分叉并运行并行作业,以尝试在合理的时间内击中许多主机;最后,检测并防止用尽所有出站rsh会话的源计算机上的所有可用TCP套接字的情况。然后,您仍然有一个问题,就是要为将来要安装的所有新主机将自己所做的任何事情放入安装映像中,并对要死掉而明天必须重建的任何主机重复执行此操作。在经历了实现基于r命令的复制的麻烦之后,我们发现这是不值得的。我们不打算再次使用r命令或任何其他推送机制来管理基础结构。它们不像基于拉的方法那样可扩展。最后,检测并防止用尽所有出站rsh会话的源计算机上的所有可用TCP套接字的情况。然后,您仍然有一个问题,就是要为将来要安装的所有新主机将自己所做的任何事情放入安装映像中,并对要死掉而明天必须重建的任何主机重复执行此操作。在经历了实现基于r命令的复制的麻烦之后,我们发现这是不值得的。我们不打算再次使用r命令或任何其他推送机制来管理基础结构。它们不像基于拉的方法那样可扩展。最后,检测并防止用尽所有出站rsh会话的源计算机上的所有可用TCP套接字的情况。然后,您仍然有一个问题,就是要为将来要安装的所有新主机将自己所做的任何事情放入安装映像中,并对要死掉而明天必须重建的任何主机重复执行此操作。在经历了实现基于r命令的复制的麻烦之后,我们发现这是不值得的。我们不打算再次使用r命令或任何其他推送机制来管理基础结构。它们不像基于拉的方法那样可扩展。然后,您仍然有一个问题,就是要为将来要安装的所有新主机将自己所做的任何事情放入安装映像中,并对要死掉而明天必须重建的任何主机重复执行此操作。在经历了实现基于r命令的复制的麻烦之后,我们发现这是不值得的。我们不打算再次使用r命令或任何其他推送机制来管理基础结构。它们不像基于拉的方法那样可扩展。然后,您仍然有一个问题,就是要为将来要安装的所有新主机将自己所做的任何事情放入安装映像中,并对要死掉而明天必须重建的任何主机重复执行此操作。在经历了实现基于r命令的复制的麻烦之后,我们发现这是不值得的。我们不打算再次使用r命令或任何其他推送机制来管理基础结构。它们不像基于拉的方法那样可扩展。或与此相关的任何其他推送机制。它们不像基于拉的方法那样可扩展。或与此相关的任何其他推送机制。它们不像基于拉的方法那样可扩展。 这不是实现问题,而是架构问题吗?为什么编写一个线程化的推送客户端比一个线程化的推送服务器更难?