Upload
etsuji-nakai
View
641
Download
2
Embed Size (px)
DESCRIPTION
Citation preview
Ver1.1 2013/02/21Etsuji Nakai
NII dodai-deploy2.0 project
クラウドアプリケーションのマルチプロセス・プログラミングモデルを実現する「Data Center Kernel」
2
NII dodai-deploy2.0 project
$ who am i
–The author of “Professional Linux Systems” series.• Available only in Japanese. Translation offering from publishers are welcomed ;-)
Professional Linux SystemsTechnology for Next Decade
Professional Linux SystemsDeployment and Management
Professional Linux SystemsNetwork Management
Etsuji Nakai– Senior solution architect and cloud
evangelist at Red Hat.– Working for NII (National Institute of
Informatics Japan) as a cloud technology consultant.
「クラウドアプリケーション」の3形態
4
NII dodai-deploy2.0 project
クラウドアプリケーション = PaaS上のアプリケーション ?
PaaSの特徴– 開発者にはクラウドを(なるべく)意識しないプログラミングモデルを提供– 実行環境の最適化はPaaS基盤が自動管理
• ユーザによるコントロールの自由度は少ない– つまり「トラディショナルなアプリケーション開発者」を支える自動化機構
クラウド基盤
PaaS基盤
アプリケーションコード
実行コンテナ
アプリケーションコード
実行コンテナ
開発者が用意するのは「クラウドを意識しない」アプリケーションコード
実行環境の最適化はPaaS基盤が自動管理
オートスケール/ 負荷分散など
5
NII dodai-deploy2.0 project
クラウドアプリケーション = クラウド管理ツール?
RightScale/Scalar/CloudFormsなどのクラウド管理ツールの特徴– クラウド管理者に実行環境の自動化/最適化ロジックを実装するためのDSLを提供– 管理者はVMインスタンス内のアプリケーションコードの開発には関わらない– つまり、「開発済みのアプリケーション」に対する運用の効率化を支える自動化機構
クラウド基盤
アプリケーションコード
VMインスタンス
アプリケーションコード
実行環境の最適化ロジックをクラウド管理者がプログラミングクラウド管理者は、
VMインスタンス内のアプリケーションの開発には関わらない
オートスケール/ 負荷分散など
VMインスタンス
クラウド管理ツール
自動化スクリプト
クラウドAPI
6
NII dodai-deploy2.0 project
本当の意味のクラウドアプリケーションとは?
PaaSモデルとクラウド管理ツールモデルは、考え方が分断されており、これらを融合/選択する包括的な利用モデルはまだ見当たらない。
– より汎用的で、どちらの使い方もできて、さらに、今までにない使い方を生み出すようなモデルは無いのだろうか?
ヒント– PaaS基盤よりも汎用的なクラウド基盤自動化/管理層を用意して、このレイヤーでクラ
ウド上のリソース(VMイメージ/ VMインスタンス等)を抽象化する。– 専用の管理ツールから自動化を行うのではなく、汎用的なプログラムコードからの自動
化を実現するAPI/ライブラリを用意する。– このプログラムコードの実行場所は任意に選択可能。
• 専用マシンで実行してもよい→ クラウド管理ツール的利用法
• アプリケーションが実行されるVMインスタンス内で実行してもよい→ 「クラウドをあえて意識したプログラミングモデル」を提供するPaaS的な利用法
7
NII dodai-deploy2.0 project
汎用的な「クラウドアプリケーション」のモデルイメージ
クラウド基盤
汎用的なクラウド基盤自動化/管理層
アプリケーションコード
VMインスタンス
自動化Library
クラウド管理ツール
管理サーバ
自動化Library
クラウドAPI
クラウド管理ツール的な自動化自立分散的な自動化
アプリケーションコード
VMインスタンス
自動化Library
オートスケール/ 負荷分散など
アプリケーションコード内部にも自動化の機構を組み込んでしまう
それぞれの利用方式に対して必要なAPIの種類は異なる
自立分散のために、VMインスタンスリストなどのグローバル情報はこの層で保持する
「Data Center Kernel」とは?
9
NII dodai-deploy2.0 project
提案
「自立分散的な自動化」を咀嚼して理解しやすくするように、リソースの抽象化をトラディショナルなOS(オペレーティングシステム)のリソースモデルにマッピングしてみる。
– 汎用的なクラウド基盤自動化/管理層 → Linuxカーネル– VMインスタンス → プロセス– 自動化ライブラリ → glibc– 自動化ライブラリからの呼び出し → システムコール – クラウドAPI → デバイスドライバ呼び出し
10
NII dodai-deploy2.0 project
つまりこんな感じ?
クラウド基盤
Data Center Kernel
アプリケーションコード
VMインスタンス
libdck
クラウド管理ツール
管理サーバ
libdck
デバイスドライバ
システムコール
アプリケーションコード
VMインスタンス
libdck
fork / fork&exec
システムコール
11
NII dodai-deploy2.0 project
さらに類推を進めると・・・
この類推のもとで、DC Kenrelに必要な機能 / APIを洗い出してみる。– マシンイメージのビルドデータ → ソースコード– マシンイメージ → バイナリ実行ファイル
• ビルドデータを「make」するとマシンイメージができる• lsコマンドでマシンイメージ一覧が取得できる
– VMインスタンス → プロセス• psコマンドでVMインスタンス一覧が取得できる• fork / fork&exec命令でVMインスタンスの起動ができる• upstart/initスクリプトで関連するVMインスタンスの連携起動ができる
– VMの稼働状況/負荷状況 → プロセス負荷• topコマンドでVMの負荷情報が取得できる
– etc.....
つまり、DC Kernelに必要な機能は・・・– vmイメージ作成/管理機能、VMインスタンス起動/管理機能、VMインスタンスのモニ
タリング機能、etc...• 結果的には従来の自動化ツールが持っている/今後実装されるであろう機能にほぼ一致• しかしながら、従来の自動化ツールをベースに機能追加するよりも、こちらの方がより自然な
モデルで汎用的なプラットホームを実装できるはず。
12
NII dodai-deploy2.0 project
Data Center Kernelモデルの可能性
VMインスタンス内部のアプリケーションコードからオートスケールなどの処理が実施可能
– VMインスタンス内部でしか取れない負荷情報に基づいたより精緻なリソース配分–単なる負荷状況ではなく、アプリケーションロジックから推定される必要リソース量に
基づく「プロアクティブ」なリソース配分• Hadoop MapReduceは、データ量の均等割による分散しかできないが、これであれば、アプリ
ケーションコードがデータを解析中に自発的にスケールすることも可能
プログラミングモデルが、従来のOS上の「マルチプロセス/マルチスレッドプログラミング」に近くなる。
– このモデルから見ると、従来のクラウド上の自動化は、「シングルタスクシステム用のアプリを擬似マルチタスク化していた」ような制限があるように思える。このモデルでしか実現できない、新しいクラウドアプリケーションのパラダイムが開けると素晴らしい。
13
NII dodai-deploy2.0 project
Data Center Kernelモデルの可能性
自動化ライブラリ(glibc)の改変による抽象度の高い自動化を提供可能– DC Kernel自体に埋め込まないので、アプリケーションごとにライブラリの差し替えが
可能。• アプリケーションの特性に応じて最適なライブラリを選択可能• より「インテリジェント」な自動化機構を研究/開発する共通プラットホームとなり得る
複数クラウドをDC Kernelで束ねることで、「場所を意識しないアプリケーション実行」が可能に
– 適切なクラウドの選択ロジックなどは、自動化ライブラリのレイヤで実装可能
14
NII dodai-deploy2.0 project
その他のアイデア
VMイメージの提供モデル– アプリケーションとVMイメージが蜜結合するので、VMイメージは、全世界共通のUUIDで管理する必要がある。
– 利用するクラウドに必要UUIDのイメージがあればそれを利用。– ない場合は、ビルドデータから自前でmakeして配置するか、「イメージストア」から
バイナリを購入して、利用するクラウドに配置する。
クラウド管理ツール的な使い方の例 〜 複数VM連携デプロイ機能の実装– Upstartのようなイベントベースのフロー管理ツールで、イベントの発生に応じてアク
ションを発生する。– イベントの種類やアクションの種類は、さらなる検討が必要。
クラウド管理ツール的な使い方の例 〜 DC Kernel専用シェルの実装– DC KernelのAPI(システムコール)を直接呼ぶ代わりに、シェルのように、コマンド
ラインで各種操作ができるツールがあると便利。クラウド自動化の「シェルスクリプト」が書けるようになると良い。
15
NII dodai-deploy2.0 project
コンポーネントスタックの整理
IaaS Infra
dck
dckapp
libdck
dckemu
dcktool
libdck 本来はIaaS基盤が提供するべきだが、既存のIaaSでは未実装の機能を代替として提供するモジュール
AWS / OpenStack / Eucalyputus / Wakame VDCなどの既存の
IaaS基盤を前提とする
DCKを前提としたアプリケーション DCKを容易に利用するためのツール
Data Center Kernel本体
DCKを前提としたアプリケーション
DCKのAPIを呼び出すライブラリ
ユーザ
16
NII dodai-deploy2.0 project
各コンポーネントスタックで実装するもののアイデア
dcktool–dcksh–dckinit
dckapp–Autoscale httpd–Autoscale echo server
dkclib–Ontology based resource assignment library
dck–
dckemu–Shared memory service–Network virtualization service
IaaS–AWS/OpenStack/Eucalyptus/Wakame VDC/etc...
Etsuji NakaiTwitter @enakai00
NII dodai-deploy2.0 project
Thank You!