Powerdns の pipebackend で遊んでみる
pdns-mrubybackendをリリースするまでは気にしていなかったのですが、ドキュメントを読んでいるうちに
Powerdnsのpipebackendが次第に気になってきました。
ドキュメント曰く、
The PipeBackend allows for easy dynamic resolution based on a ‘Coprocess’ which can be written in any programming language that can read a question on standard input and answer on standard output.
ざっくり言うと、PipeBackendを使うと好きな言語で簡単にバックエンドが作れるよ。という事ですね。
名前解決要求を標準入力で受け取り、標準出力へ回答を返せばよいようです。
ドキュメントには丁寧にperlのサンプルが載っています。
これを参考にrubyで雑なバックエンドを書いてみます。
もっとマシな書き方があるとは思いますが pdns-mrubybackend の examples/pdns-backend.rb に
近い感じで書いてます。
1 | #!/bin/env ruby |
そして、powerdns側のconfは以下のように。
1 | distributor-threads=4 |
そして、今回もresperfでベンチマークをとってみました。
$ /usr/local/nom/bin/resperf -s 172.19.100.113 -d largequeries.txt -m 300000 |
うーん。思いの外性能が出ませんね。
内心 pdns-mrubybackend よりも良い性能が出たらどうしよう、と不安でした(笑)
とは言え、言語を選ばないところは大きな魅力です。
興味のある方は是非お好きな言語で、pipebackendを書いてみてください。