【論文読み】Fast key-value stores: An idea whose time has come and gone
http://pages.cs.wisc.edu/~rgrandl/papers/link.pdf
上記の論文を読んだ.これからもちょくちょく論文読んでまとめるみたいなのやっていきたい
問題
現代のWebアプリにおけるIn-memory KVS,要はRedisやMemcachedはアプリケーションからロジックを切り離しステートレスにするために活躍している. だけど,シンプルなAPIゆえに,複雑なデータの格納や読み込み がやり辛いしネットワークレイテンシがでかくなる,読み込んだ後もアプリ側でバイナリデータをプログラム上のオブジェクトにマッピング((Un)marshaling)しなきゃいけなくてこいつはかなり時間がかかるといった問題があった.
関連研究
論文ではこういったネットワーク越しに存在するKVSを RInK(Remote In memory Key-value) として呼称している. RInKのパフォーマンス改善はいくつか事例があるが,単純にRDMAを使ってパフォーマンス改善をする手法や,アプリケーションサーバと同じサーバにKVSを立てるなどが挙がっている.しかし,これらは上記の(Un)marshlingを改善しようとはしてない.
解決方法
LInK(Linked In memory Key-value) と筆者は名付けている手法を提案している.こいつは単純にアプリケーションにKVSを埋め込む. データへのアクセスはライブラリが抽象化するけど基本的にメモリ内にアプリケーションのオブジェクトそのまま格納するので上記の(Un)marshalingがボトルネックじゃなくなる.
じゃあスケールアウトというかKeyの分散はどうするかというとReshardingは普通にサポートするっぽい(具体的なアルゴリズムは書いてない). まぁこれでネットワークと(Un)marshlingのレイテンシは解決できたねとのこと
まとめ
面白かったけど試験的な論文なのか(筆者はGoogleとスタンフォードの人)分散KVSとして重要な耐久性やデータの一貫性とかについては「この論文では触れない」としている. 確かにアプリに埋め込めばそりゃ速くなるだろうけど当然アプリケーションとしてはステートフルになるし, ライブラリの開発とかはプログラミング言語依存になるしでまだ解決しなきゃいけない問題は多そう.
でも,これがもう少しいい感じに使えるようになったらWebのアプリはもっと爆速になるのはロマンがある.