fluentd の go 実装におけるプラグイン構想

4
そのっつ (Naotoshi Seo) @sonots

今日ちょっと話してて、golang は dll みたいな仕組み持ってたりするのかな?と思った。それができれば別途ビルドしたプラグインを実行時に差し込める。

2014-01-17 23:44:03
そのっつ (Naotoshi Seo) @sonots

たとえば fluentd を golang で再実装した場合の話

2014-01-17 23:45:25
そのっつ (Naotoshi Seo) @sonots

CGOでできそう? / “Big Sky :: Go言語でDLLの読み込み” http://t.co/wWmzwG9kr6

2014-01-17 23:48:05
SKS rep @repeatedly

@sonots それやるとそもそもGo言語のビルドのうれしさが無くなるので,やるならRubyみたいなのをGoでラップした方が良いよね,みたいな話は前したことある

2014-01-17 23:49:01
そのっつ (Naotoshi Seo) @sonots

@kuenishi ikってプラグイン追加する時は丸ごとビルドするんでしたっけ?

2014-01-17 23:49:27
SKS rep @repeatedly

ikで現状全部再ビルドのはず.どちらかというとagent-lite的なの想像していると思われる

2014-01-17 23:50:47
kuenishi @kuenishi

@sonots pluginsというディレクトリにそれっぽいコードはありますが、そこからは @moriyoshit に聞かないとわからないですね。

2014-01-17 23:51:45
そのっつ (Naotoshi Seo) @sonots

@repeatedly GoからRubyのコードを呼べるような仕組みを作るということでしょうか。それで既存のプラグインが動くなら強いですね。

2014-01-17 23:52:26
kuenishi @kuenishi

@sonots http://t.co/Va8rjn5dft これを読むと、それをやろうとしているようにしか見えないですw

2014-01-17 23:55:09
SKS rep @repeatedly

@sonots それやるとこういう問題が出てくる.まぁ出来なくはないけどね > https://t.co/vELUtzvm4N

2014-01-17 23:55:11
SKS rep @repeatedly

@kuenishi @sonots それよむ限り,GoからCのコードは動的に呼べるけど,Goそのものをdllにすることは出来ない?多分全部にランタイムが同梱されているイメージなんですが

2014-01-17 23:56:38
kuenishi @kuenishi

@repeatedly libPythonとかlibrubyをリンクしてevalさせちゃえばできそうじゃない? ABIが違うのでgoのコードをプラグイン化するのはfork+spawnとかじゃないと無理ね

2014-01-17 23:58:39
そのっつ (Naotoshi Seo) @sonots

@Jxck_ さっき懇親会でちょっと話してた fluentd の golang 実装についてなのですが、プラグインを単体でビルドして dll みたいな感じで動的に差し込める仕組みを golang で実現しようとしたら、CGO というものを使うのが一般的なのでしょうか?

2014-01-18 00:00:14
kuenishi @kuenishi

いやしかしRubyもPythonもlibpthreadを使ってるので、それをGoのランタイムに入れるとものすごいことになりそうな気がするおz

2014-01-18 00:00:47
そのっつ (Naotoshi Seo) @sonots

やっぱり現状ちょっと無理がありそうだな。

2014-01-18 00:02:45
Jxck @Jxck_

@sonots あー、そういうのは出来ない気がしますが、その辺は詳しくないんで正直わからないです。まさしく @moriyoshit さんが詳しいかと。

2014-01-18 00:04:47
methane @methane

@kuenishi @repeatedly Go でやるなら、 Heka みたいに Lua で、 fluentd の out_exec_filter 相当の処理を書けるようにして、あとは全部プラグインはビルド時に組み込みで良いと思います。クロスコンパイルだって楽だし。

2014-01-18 00:06:34
そのっつ (Naotoshi Seo) @sonots

全ては moriyoshit さんに収束される…!

2014-01-18 00:08:57
methane @methane

@sonots 別に Ruby の fluentd だって再起動必要ですよね?実は v11 は実行中にプラグインロードする?

2014-01-18 00:12:19
そのっつ (Naotoshi Seo) @sonots

@methane あー、どっちかというとプラグインの配布のことを考えていました。ユーザさんが、追加したいプラグインに加えて本体のソースコードをおとしてきて自分でビルドしないといけないのかな、と。

2014-01-18 00:17:16