dping(Distributed Ping) というものをriak_coreの上で試しに書いてみた¶
これまでriak_coreに関する記事をいくつか書いてて、その中でdpingという名 前を使っていました。これは実はこの記事で紹介するものを作りたかったため です。
github: http://github.com/shirou/dping/
dpingとはなにか¶
Distributed Pingです。
監視を行うときに、一箇所からの監視だと、本当にそのサーバーが落ちてるの か、それとも途中経路が落ちてるのかが分からなかったりします。
dpingは、riak_core上の複数のノードからHTTP GETを送ることにより、複数箇 所からの監視を行えます。全てのノードからのアクセスに対して200を返せば、 途中経路の問題の可能性は少なくなるわけです。
こんな感じでriak nodeにattachして使います。
% dev/dev1/bin/dping attach
(dping1@127.0.0.1)1> dping("http://www.google.com").
command from 'dping1@127.0.0.1'
dping to "http://www.google.com" recieved. node: <0.237.0> on
'dping1@127.0.0.1'
responsed node 'dping1@127.0.0.1'
responsed node 'dping2@127.0.0.1'
responsed node 'dping3@127.0.0.1'
dping to "http://www.google.com" success.
ok
この例では、dping1に対してcommandを実行して、dping1,2,3が www.google.comにHTTP GETをして、その結果すべてが200 OKだった、ということが分かります。
もちろん、多分同じ機能を持ったツールは数多くあるでしょう。単に riak_coreを使いたかった、というだけのことですww
なお、実装しつつ気がついたのですが、riak_coreは物理ノードではなくvnode で管理しているので、同じ物理ノードからいっぱいHTTP GETが送られるという 無駄なことになっています。このあたりは物理ノードを意識して、コマンドを 送るvnodeをPrefListによって絞ることで無駄を省けるのではと思っています。
ちなみに当初はping(ICMP Echo/Reply)のつもりだったんですが、HTTPの方が受けがい いんじゃないかと思って変えました。でも、名前はそのままです。
riak_coreを試してみて¶
riak_coreを使うことにより、ノードがどこにあるのか、またその設定なども意 識する必要がなくなるのではないか、と考えたわけです。
実際には監視点を変える必要はあんまりないわけですし、これだけだったら riakを使う必要はまったくないです。データのhandoffとかないですし。ただ、 これはなにかには使えそうだなーという漠然とした感覚が持てたのでそれで十 分です。
それよりもriak_coreが簡単に使えることに驚きました。書いたのは実質30行ぐ らいでした。これでnodeのjoinとか面倒見てくれるわけですから、分散アプリ ケーションを作りたい人は使うといいと思います。
実用的?¶
今の実装はすべてのノードの先頭3つに対してcommandを送って、すべて 200であればOKとしていますが、例えば
ランダムなノードからHTTPを送るようにする
各ノードにtagをつけて、適合するノードからのみHTTPを送る
1個ぐらいのエラーがあっても成功と見なす
なんてするともうちょっと役に立つかもしれません。
あと、実は今はsync_commandを使っているのでちゃんとcommandで非同期に したいですね。
まとめ¶
dpingという、複数箇所から監視ができるツールをriak_coreのサンプルとして作りまし た
riak_coreいいよriak_core
Comments
comments powered by Disqus