2013/08/21


etcd って何と聞かれた場合、一言で言ってしまえば zookeeper なんだけど
Documentation · CoreOS

etcd etcd is a highly-available key value store for shared configuration and service discovery.

http://coreos.com/docs/etcd/
coreos/etcd - GitHub
https://github.com/coreos/etcd
etcd の良い所は
  • curl で使える様な簡単な API
  • SSL Cert 認証もオプションとして使える
  • ベンチマークで 1000s of writes/s per instance を出せるくらい速い
  • Raft を使って正確に、確実に分散する
という感じらしい。作ってるのは CoreOS。
etcd はキーをパス形式で指定し、値を入出力出来るのだけど、例えば
  • /app/foo に test1
  • /app/bar に test2
この様に設定して /app を参照すると foobar の両方が参照出来る。
curl からも簡単に実行出来るので、ちょっと値を更新といった場合にもいちいちプログラムを書かなくても良い。
etcd はみんな大好きGo言語で書かれていて Windows でもビルド出来るし、linux のノードと混ぜて運用する事も出来る。Go言語で書かれた go-etcd というクライアントを使えば、簡単に etcd を操作出来る。
coreos/go-etcd - GitHub

This etcd client library is under heavy development. Check back soon for more docs. In the meantime, check out etcd for details on the client protocol.

https://github.com/coreos/go-etcd
この etcd を使った小さなプログラムを書いてみた。
mattn/etcdenv - GitHub

etcd + env = awesome!

https://github.com/mattn/etcdenv
通常、unix で env と言えば $ env DB=newdb CACHE=mycache foo の様に環境変数を指定してプロセスを起動する物で、shebang で使われる事が多い。
例えば上記の様に書かれたプログラムが複数のサーバで起動するシステムであった場合、環境変数の内容を書き換えるとなれば大変だ。もちろんデプロイしてしまえばいいんだけど、そもそも環境変数値を動的に変えたいなんてニーズはある訳だ。
そこで $ etcdenv -key=/app foo この様にキーを指定して起動すると、etcd から環境変数値を取得して foo を起動する。利用シーンで言えば以下の様な感じ。 $ curl http://127.0.0.1:4001/v1/keys/app/db -d value="newdb"
$ curl http://127.0.0.1:4001/v1/keys/app/cache -d value="new cache"

$ curl http://localhost:4001/v1/keys/app
[{"action":"GET","key":"/app/db","value":"newdb","index":4},{"action":"GET","key":"/app/cache","value":"new cache","index":4}]

$ etcdenv -key=/app/
DB=newdb
CACHE=new cache

$ etcdenv -key=/app/ ruby web.rb
foreman や goreman の Procfile で以下の様に指定してもいい。 $ cat Procfile
web: etcdenv -key=/app ruby web.rb
後は複数あるシステムの環境変数を変えたければ curl で更新すればいい。

なお、etcd は設定情報に特化はしているけど、よく考えたらこれってファイルシステムだよね、とひらめいたので vim から etcd をファイルシステムとして扱える物を作ってみた。
mattn/vim-metarw-etcd - GitHub

vim-metarw-etcd etcd filesystem for vim

https://github.com/mattn/vim-metarw-etcd
:e etcd:/app/ とすれば上記の DB や CACHE が一覧され、ENTER で参照出来る。更新は :w で ok。
vim-metarw-etcd

TAB で補完も出来るのでファイルシステムそっくりに扱える。ちなみに僕はこの2日程、etcd 上で日記を書いてる。
etcd の使い道はもっと可能性があると思うので、もう少し遊んでみたい。
Posted at by



2013/08/15


airline の為だけに hahhah-vim を autoload 化しました。
mattn/hahhah-vim - GitHub
https://github.com/mattn/hahhah-vim
そして vim-airline-hahhah
mattn/vim-airline-hahhah - GitHub
https://github.com/mattn/vim-airline-hahhah
ハァハァ
powerline、airline 等を試して来ましたが、これが無いとやっぱり vim 使ってる気になれませんね。
Posted at by



2013/08/13


readline って言うと、便利な反面 Windows だと問題が多く発生して、Windows でも動かすスクリプトでの使用は敬遠してたんですが、Caroline だと多い日も安心。
tokuhirom/Caroline - GitHub

Yet another line editing library

https://github.com/tokuhirom/Caroline
readline なんかと違って、内部は utf-8 なので unix 等のスクリプトと同じ動きをします。ヒストリも保存出来るし、入力補完も自作出来ます。
eg/suddenly_death.pl を見るといいです。

$ perl -Ilib eg/suddenly_death.pl
hello> 
ここで m を入力してタブキーをタイプすると... $ perl -Ilib eg/suddenly_death.pl
hello> 突然のmattn
そして ENTER キーをタイプすれば _人人人人人人_
> 突然のmattn <
 ̄^Y^Y^Y^Y^Y^ ̄
Posted at by