April 2014 Archives

PuppetDB, why?

| No Comments
I've recently setup PuppetDB. It seems to be a java process that provides a REST API to a database. It's only used by other puppet components, so it's got me wondering, why did they choose this implementation instead of writing a ruby library to access a database. In fact, that is where they have come from. In the past they used the ruby ActiveRecord libary to connect to a MySQL database.

In the blog post that announces Puppet DB they talk a lot about how it's faster, and more reliable. But it seems like a lot of overhead to read and write from a database, even if you do get metrics on how fast or slow your intermediate java technology is. They also make a point of how it's asynchronous, freeing up the puppet master to go and compile more catalogs. But I can't help but think if you took a page out of the zeromq book, and wrote a library that forks a thread to do your database updates you would get the same benefit.

PuppetDB does give you an API to access the data from other sources, but again, I'm wondering why PuppetDB has to be a gatekeeper for the master, and why a separate process couldn't just use the same library as the master to provide this API.