投稿

5月, 2019の投稿を表示しています

Elixir に入門したいので雑な 分散KVS を自作した

イメージ
長い連休を利用して、Elixir入門のために分散kVSを自作しました。 前書き 動機は以下の2点です。 Elixirに入門したかった 何か自分で手を動かしたかった Erlangが書けるので同じErlangVM上の言語であるElixirが前から気になっていました。 丁度いい機会だし、入門してみるかな、くらいの気持ちで始めました。 初めてだったので、株式会社gumiが連載している Elixir入門の連載を開始(Elixir入門もくじ) - DEV Community 👩‍💻👨‍💻 を参考にしました。単純な日本語翻訳ではなく、適宜加筆修正をしているようです。(後半に行くに連れて雑な文が増えているのが少しだけ残念でした。) 自分は集中力が無いので通読は苦手なのですが、23個の記事に全て目を通してから次を考えることにしました。Erlangと同じErlangVMで動くので、他の全く知らない言語よりは理解がしやすいだろうと思っていましたが、軽量プロセスやメッセージのやり取りといった基礎は共通していても、かなり機能が豊富、という印象を受けました。 なんとか全てを読み終わった後に、ErlangVMなので分散システムがいいな、と思い雑な分散KVSを作って見ることにしました。適当に検索したところ Building a Distributed Fault-Tolerant Key-Value Store - The Blog of Fourthbit という、Apache Cassandraの概要を紹介しつつ、KVSの大事な部分の実装ぽいものを説明する、という記事を今回の目的にぴったりの記事を発見しました。この記事は実装するためにかなり参考になりました。 目標 休みの間にそれっぽく動くところまで持っていく CRUD (Create/Read/Update/Delete) のインターフェースを持つ 1台は落ちても読み書きができる 耐障害性 出来たもの リポジトリはこちら mopp/brownie: Hobby Distributed Key-Value Store 機能の概要 N台1組のElixirクラスタを構築する 実行時のノード追加は不可 データはオンメモリで保持している