There seem to be two different ways to distribute puppet manifests:
Centralized:
This involves running a central puppet master server which is periodically queried by puppet agents for changes.
Decentralized:
In this case there is no central puppet master server and manifests are distributed to the nodes some other way, for example via Git. Then a node runs
puppet apply
to apply the changes.
I would like to know what are the main differences between the two approaches and if any puppet feature depends on a particular approach.