Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
15
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@yuukigoodman

Riakの内部構造について

ネタが無くなってきたよ!saisa6153です!!
泥酔後のハイテンションで贈る、みんなでやるRiak Advent Calendar 9日目。
今日はRiakの内部構造について知ってることとかを書きます。

ソフトウェア・スタック

Riakはたくさんの部品を組み合わせて構成されている。
公式ドキュメントの絵ではこんな感じだ。
riakソフトウェアスタック.png
順に説明していこう。

Riakクライアント

様々なプログラミング言語向けのクライアントライブラリが提供されている。
Erlangはもちろん、Java, PHP, Ruby, Python, Perl, OCamlやClojureなどBasho公式やコミュニティ・有志によるものを合わせると、仕事で使う大抵の言語では問題が無いことがわかる。
現在は2.0への過渡期であり、全クライアントで全機能が網羅されているとは言いがたいが、時間の経過と共に充実していくだろう。
充実していなければPull Requestを出そう。

webmachine

端的に言うとHTTPサーバである。多分。
Basho作でErlang製。
つまり、馴染み深いRiakのRESTインタフェースを担っている部分だ。

Webmachine is an application layer that adds HTTP semantic awareness on top of the excellent bit-pushing and HTTP syntax-management provided by mochiweb, and provides a simple and clean way to connect that to your application’s behavior.

プロトコルバッファ

Protocol Buffers(プロトコルバッファー)はインタフェース定義言語(IDL)で構造を定義する通信や永続化での利用を目的としたシリアライズフォーマットであり、Googleにより開発されている。 by Wikipedia。
webmachine、つまりRESTより早い。
とは言えRESTの方が扱いが簡単。
ライブラリがないとか特殊な事情だったらREST、そうでなければ大抵プロトコルバッファを選ぶと思う。
Riak関連ソフトウェアをインストールするとき"pb"とかあったら大抵これ。

Riakレプリケーション、Riak SNMP/JMX

よくわからない。課金装備。
使いたければBashoにお布施しましょう。
Riakは同じクラスタ内で自動レプリケーションするんだけど、有償ライセンスではデータセンター間でのレプリケーションが取れるらしい。
例えばメインのDCにミサイルが落ちてきても、遠隔地に同データのクラスタを作っておけばシステムは止まらないということだ。
ネットワークがある程度遠くなると必要なのだろうか。
Riak SNMP/JMXは、字面的にエンプラ水準の監視機能を提供してくれるんだと思う。
あったらオペレーターは安心できるんだろうなあ。

Riak KV

いよいよコアの機能に入っていく。
まずはKVSとしての機能を実現しているriak_kv。
「これがkey-value提供してるんならriak_coreってなんなんだよ」っていう気持ちになるかもしれないが、しかし実際これがKVSの機能を提供しているらしい。
2i及びMapReduceも含むようだ。

Riak Search

valueに対する検索機能を提供している。インデックスも作る。
しかし日本語が検索できなかったり制限があったようで、2.0ではこれをYokozunaで置き換える流れになるのだと思う。

Riak Pipe

Readme読んでないのでよく分からないが、Unix Pipeのような機能を提供しているようだ。

Riak Core

メインです。
riak_coreは、"分散"という機能を担っている。
Riakで重要なことはKVSであることではなく、高度な分散機能だ。
それがあってこそ、Riakの高可用性は現実のものになっている。
ソースは覚えていないが、「Riak Coreは一種のフレームワークであり、この上で分散アプリケーションを作ることもできる」と聴いた事があるようなないような。
文字通り「Riakを支える技術」そのものである。

Bitcask, LevelDB, Merge Index

ストレージエンジンに相当する。
Bitcaskは早く、格納可能容量に限度がある。
LevelDBはそれよりは遅いが、大量のデータを格納することができ、2iを使うこともできる。
fluent-plugin-riakではLevelDBを使わなければならない。
Merge Indexはよくわからない。Riak Searchや2iなどインデックスの永続化を担っているらしい。
実はMemory Backedというものもある。

まとめ

Riak Source Code Readingが1回2時間で継続開催できているのは、コードの読みやすさに起因するのだと思っている。
それは、

  • Erlangを使っているので本質でないコードが排除されやすい
  • 適度に抽象化されており、読むに堪える分量におさまっている

などの恩恵によるものなのだろう。
Riak Coreは曰くフレームワークらしい。
コールドリーディングを進めてErlangやRiakへの理解が深まった暁には、Riakの活用に加えて、応用への見聞を深める事ができたらいいなーと思う。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
15
Help us understand the problem. What are the problem?