I use Puppet Commander, an MCollective tool:
http://projects.puppetlabs.com/projects/mcollective-plugins/wiki/ToolPuppetcommander
Rather than have my Puppet Agents check in, no Puppet service runs on
any server, instead MCollective is running. Puppet Commander uses the
MCollective framework to schedule Puppet runs. I decide how many
should run at once and what their run interval should be based on the
load of the Puppet Master.
When I hit the upper limit of the VM running the Puppet Master but
want to increase the run speed, I'll put in load balanced Puppet like
others have mentioned.
Masterless Puppet is an option, however files copied from the Puppet
Master using Puppet's in built file transfer (source =>
"puppet:///...") are not included in the catalog, so each host needs
to be able to request files from the Puppet Master which may re-
introduce your bottleneck depending on how many there are. You can put
file _contents_ into a catalog, but this blows out the size and you'll
be re-transferring every file with each catalog (plus any security
concerns of having this file content stored on disk in many places).
From your other post if we manage 15 config files and services on 200
servers with Puppet - that should be nothing in terms of load for one
Apache/Passenger driven Puppet Master. A few CPUs and 4GiB RAM, tops.