Puppet4的第一个正式版本于2015年4月15日发布截止到2016年12月28日Puppet已正式发布了4.8.1版本。Puppet4与3.x版本相比有两点不同:很多的变化,很大的变化。毫不夸张地说Puppet4是一个全新的项目!
Puppet4使用函数式编程语言Clojure对Puppet Master进行了重写,Puppetlabs公司并为此新建了一个项目:puppetserver。此外,PuppetDB也使用Clojure进行了重写。如此脱胎换骨的变化,最主要的目的是为了提升性能,官方给出的数据是: 相比Puppet3,Puppet4有2~3倍的性能提升。
这是一个非常吸引人的提升!要知道从Puppet2到Puppet3所带来约50%的性能提升,就让我们感动不已了!
在以往的实际生产中,我们遇到过多次来自于master端的性能瓶颈,在一个数千台规模有近百个OpenStack集群的环境中,我们使用了多台物理+虚拟服务器来作为Puppetmaster节点,管理着大量的服务,一旦遇到高并发的编排任务时,master端的CPU几乎处于100%的状态,超时时间设置为120秒的情况下,仍然会出现不少由于编译catalog超时而导致agent报错的情况。即使我们通过改进代码,水平扩展,组件拆分,参数调优,更换硬件等多种组合办法,但是受Puppet3所使用的Ruby语言性能瓶颈,对于Puppetmaster的性能我们并不满意。而Puppet4从根本上改进了性能问题。PuppetDB也是另一个主要瓶颈,像resource export,virtualresource等高级特性,以及facts,catalog的缓存都会使用到PuppetDB,虽然这些高级特性很炫酷而且也很实用,但是非常非常消耗资源。这使得我们在过去非常地谨慎甚至刻意去削减Puppet高级特性的使用,这也是PuppetOpenstack社区禁止提交含有这些高级特性的代码的原因之一(另一个原因是有些高级特性无法在Standalone模式下使用)。
此外,Puppet4一开始就拥有面向服务的架构:
新的Parser支持lambdas和iteraion!再也不用使用tricky的creates_resources函数了:
来源: http://www.infoq.com/cn/articles/excitingChanges-Puppet4