minio周辺の調査
minioは単なるS3互換オブジェクトストレージだと思っていたけど、 そうじゃないらしい。
モダンなクラウドシステムならSANやRAIDみたいな事を要請しないという事だった。 きっと彼らはクラウド上で上手く分散するオブジェクトストレージを目指している。
少し調べたのだけど、直近は追いかけないでいる事にした。<理由が書いてある?>
Minio 概要と期待したい事
minioはsimpleを心がけている。 その1つとしてminioはImmutableデータを強調している。
“Delete, Updateなどの処理はトランザクションが必要となりアプリケーションで非常に多様なトランザクション単位が考えられるのでアプリケーションで行うべき”
という立場だ。 そして管理が複雑になるためIAMも敢えて実装しない方針をとっている。 なので今後minioはコンテナやPaaS上で上手く協調するオブジェクトストレージに向かっていくのだろう。 (と思ってたら書いている記事を見つけた) またインタフェースは単純なものだけを提供する方向にしている。
参考にしたい事は、レプリケーション・データリペア・ディスク障害検知の実装と運用しやすい設計とコマンドラインインタフェースの3つ。 以下に詳細を追ってみて気になった箇所をメモする。
なんかDeleteが実装されてる
blogとかでDeleteとかはあえて実装していないって謳っているのに実装を見つけてしまった。 分散管理で不都合はないと思い返したのだろうか? 経緯が気になる。
このコードだと素朴な削除しているので、操作ログまたはメタ情報が管理されてないとレプリケーション・データリペア時に削除済みオブジェクトが復活しまう。 削除済み or 未作成を判断する仕組みは見つけられなかった。
なんかネットで見つかったコンポーネント概要が実装されていない
オブジェクトを保存するFS, ブロックデバイスはDonutと呼ばれるコンポーネントで抽象化・管理する らしいが詳細は不明。 ところが現状はDonutなどでgrepしても何も出てこない。
感想
コミュニティを少し眺めただけだとDelete機能が追加されている経緯がわからなかった。 またIAMを拒否しているけどIssueでIAMの一部機能の実装が提案されていた。
本筋の分散管理は全体像が読めなかった。 6ヶ月から12ヶ月で大枠が決まるらしいし(リンク先ではコミュニティに参加するなら今だよって提案されてるけど)一旦は追わず全体像を待ってからで良いと思った。 分散管理部分をmcとかクライアント側でやる方針に転換したかも知れないので他リポジトリは眺めても良さそう。
入力に一致するサブコマンドがない場合に候補を表示する機能を実現するためにTrie木を使ってた。 GoでのTrie木実装の勉強になります。