IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

クラウド時代のオープンソース実践活用

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第72回 究極にシンプルなストレージに挑戦する「Minio」(続編) (中井悦司) 2015年8月

はじめに

 前回のコラムでは、米Minio社のメンバーがオープンソースとして開発を進めるオブジェクトストレージ「Minio」を紹介しました。提供する機能を最小限に絞り込むことで、堅牢で高性能な分散ストレージを実現しようという実験的なプロジェクトです。今回は、Minioが実際に提供する機能とその内部構造についてお話しします。

最小限を徹底したMinioのAPI

 Minioは、Amazon S3互換のAPIを提供しています。エンドユーザーが直接に操作するのではなく、アプリケーションのバックエンドとして利用することを想定したものになります。あえて、コマンドから直接に操作する際は、mcコマンドを利用します(*1)。次の実行例のように、バケットの作成(mb)、ファイルの保存(cp)、ファイルのリスト(ls)、ファイルの内容表示(cat)などが行えます。ローカルのファイルシステムと同じ感覚で利用できることを意識したコマンド体系になっています。

# mc mb https://play.minio.io:9000/test
mc: Bucket created successfully : https://play.minio.io:9000/test
# mc cp /etc/centos-release https://play.minio.io:9000/test/
➩ ...ntos-release: 38 B / 38 B [=======================================] 100.00 % 3.76 KB/s 0
# mc ls https://play.minio.io:9000/test
[2015-07-16 17:09:18 JST]    38B centos-release
# mc cat https://play.minio.io:9000/test/centos-release
CentOS Linux release 7.1.1503 (Core) 

 そして驚くべきことに、MinioのAPIから行える操作は、これがほぼすべてです。バケットの作成とファイルの出し入れ以外には、何も機能がありません。前述のようにアプリケーションのバックエンドとして利用するものですので、不足する機能はアプリケーション側で補完する想定になっています。

 とりわけ、「最小限の機能」への徹底的なこだわりを感じるのは、ファイルを削除するAPIが存在しないことです。Minioに保存したファイルの属性情報は、アプリケーション側でデータベースなどに保存しておき、属性情報に「削除フラグ」を立てることで、アプリケーション的には削除したことにするという使い方になります。同じく、保存したファイルを上書きで置き換える機能もありません。アプリケーションからは新しいファイル名でMinioに保存しておき、アプリケーション側の機能で、同じファイルが置き換えられたように見せる必要があります。

 いったいなぜ、Minioは、このような基本的な機能を提供しないのでしょうか? その背後には、「ストレージとアプリケーションの適切な役割分担」という考え方があります。「ファイルの削除/更新」という操作は、操作の一貫性(Atomicity)を保証する必要があるため、ストレージ側で実装する際は、同時アクセスの排他制御などが必要になります。この時、どのようなレベルでの一貫性が求められるかは、アプリケーションによって異なります。あらゆる要求に応えることを考えだすと、必要以上に高機能で無駄に複雑なストレージができあがります。これらの機能をアプリケーションに任せておけば、それぞれのアプリケーションは、必要なレベルの一貫性を最適化された形で実装することが可能になります。その一方で、Minioの側では、複雑な排他制御を考える必要がなく、性能やスケーラビリティを徹底的に追求することが可能になるというわけです。

Donut(ドーナツ)アーキテクチャー

 Minioの内部構造については、「Minio Architecture」という簡単な説明図が公開されています(*2)。この図にある「Donut」という謎のコンポーネントがMinioの中心部になります。各サーバーのディスクごとに用意したファイルシステムをバックエンドとして、クライアントから受け取ったファイルを分割した上で、Erasure Codeによる分散配置を行ないます。「Erasure Code」は、一部のディスクが破損しても残りのディスクから元のファイルを復元可能にする分割アルゴリズムです。現在は、1台のサーバーのみで稼働しますが、今後、複数サーバーのDonutが連携して、スケールアウト型のストレージを構成できるようになるとのことです。

 ちなみに、ソースコードに含まれるREADMEによると、Donutは、「do not delete」の略称ということですが、ちょっと説明に無理がある気もします。前回登場したABに、本当の由来を聞いてみたところ、「どこかのストレージにWAFL(ワッフル)ってのがあったよね(てへぺろ)」ということでした。

次回予告

 2回に渡って、Minioの紹介をしてきました。前回も触れたように、オープンソースとして開発される技術を学ぶ際は、「開発者自身が何を目指しているのか」を理解することが大切です。そのためには、GitHubの説明やソースコード内のドキュメントを読み込む、あるいは、開発者に直接に質問をするなどが有効です。そして、この時に必要となるのは、もちろん、英語です。オープンソースの世界では、英語での読み書きや会話ができるようになることで、得られる知識や情報は格段に広がります。

 最近は、日本のITエンジニアの間でも英語の必要性があらためて認識されているようです。次回は、技術の話を少し離れて、ITエンジニアの「英語の勉強法」について考えてみたいと思います。

参考資料

*1Minio Client (mc)

*2Minio Architecture

 

++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
 CTC教育サービス Linuxのページ
 http://www.school.ctc-g.co.jp/linux/
 

Linux研修トレーニングならCTC教育サービス


 

筆者書籍紹介

Software Design plusシリーズ
「独習Linux専科」サーバ構築/運用/管理
  ――あなたに伝えたい技と知恵と鉄則

本物の基礎を学ぶ!新定番のLinux独習書

中井悦司 著
B5変形判/384ページ
定価3,129円(本体2,980円)
ISBN 978-4-7741-5937-9
詳しくはこちら(出版社WEBサイト)
「独習Linux専科」サーバ構築/運用/管理

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes