公開されている
enabling PaaS application using Twelve-Factor App
のキモの部分を読んで、勉強してみたいと思います。
概要
クラウドコンピューティングのメリットを得るためには、
クラウドネイティブの原則に従う必要がある。
この論文では、伝統的なJavaのエンタープライズ・
アプリケーションを、クラウドネイティブ・
アプリケーションへ変換したことを対象としている。
Docker 、Kubernate、OpenShift などのクラウド関連技術、
Jenkisなどの自動化技術を利用した。
Twelve-Factor Appの方法とクラウド・ネイティブの原則に
従った。
イントロダクション
クラウドコンピュータ上のアプリケーションは、伝統的な
アプリケーションとは異なる。
クラウドの便益を得るための特徴を持っている。
自動化されたプラットフォーム、インフラやネットワークの
ソフトウェア化、マイグレーション、異なるクラウドインフラでの
相互運用性などである。
このような種類のアプリケーションは、クラウドネイティブ・
アプリケーションと呼ばれる。
1.1 背景
伝統的なエンタープライズ・アプリケーションの中で、
最も有名なものに、Java EEがある。
Java EEは、企業の環境やインターネット環境で、
分散システムを構築するために利用される。
1.2 問題
Javaのエンタープライズ・アプリケーションを、クラウドへ
どう、マイグレーションするか?
Twelve-Factor Appは、PaaSのアプリケーションを構築する際に、
よく知られた方法である。そして、クラウドネイティブの
原則に従うことで、クラウドコンピューティングのメリットを得る
ことができる。
このプロジェクトは、伝統的なJavaアプリケーションを、
クラウドネイティブの原則、Twelve-Factor Appの方法に従って、
クラウドネイティブ・アプリケーションへ変換したもの。
2.1.1 JavaEE
Javaは、汎用的なコンピュータ言語で、並列処理、
クラスベース、オブジェクト指向の特徴を持つ。
大規模な分散システムでは、JavaEEが利用される。
Javaは、write once , run anywhere と言われる。
JVMを利用することで、コンパイルされたJavaのコードは、
再コンパイルなしで、別のプラットフォームでも、動く。
JavaEEのコードは、bytecode へ変換され、
Web Application Archive(WAR)や、
Java Archive(JAR)などへパッケージングされる。
WAR あるいは、JARファイルは、必要となるすべてのクラスファイルを
含む。
WARやJARファイルは、Tomcatのようなアプリケーションコンテナへ
deployされる。
これらのアプリケーションコンテナは、HTTPSやJDBCなどの
機能を提供する。
ソフトウエア開発では、次のような環境が利用される。
1.Development
開発者用の環境
2.Integration
すべての開発者がコードをコミットする
3.Staging
Production環境をシミュレートする
4.Production
アプリケーションが提供される環境
クラウドコンピューティング
クラウドコンピューティングの利点としては、次がある。
・無限のリソースを、オンデマンドで調達できる。
・利用者の増加に対応することができる。
・短期間だけ必要なコンピュータリソースを準備することが容易
・巨大なデータセンターを利用することでの規模の経済性
・オペレーションが単純になる
SaaS と Cloud-Native Application
クラウドコンピューティングのメリットを得るためには、
アプリケーションもスケーラビリティ、保守性、ポータビリティなどに
対応する必要がある。
これに対応したものが、Cloud-Native Application 。
次の原則を満たすものである。
・自動化されたプラットフォーム上で稼働する
・インフラとネットワークをソフトウェア化する
・異なるクラウド上での相互運用性
Twelve-Factor Appは、SaaSを作るときのベストプラクティス。
Twelve-Factorを使って作ったアプリケーションには、
以下の特徴がある。
・セットアップの自動化のために、明示的な宣言を使用して、
ディプロイのための時間やコストを最小化している。
・OSの以下と、クリーンな関係で、実行環境のポータビリティ
を最大化している。
・クラウド環境でのディプロイに最適化。
・開発と製品の間を最適化。継続的ディプロイで、
アジリティを最大化している。
・ ツールやアーキテクチャ、開発のプラクティスの
重大な変更を伴わないスケールアップ。
Twelve-Factor Appは、次のもの。
1. コードベース
1つのアプリケーションは、1つのリポジトリに対応し、
1つのリポジトリには、異なる環境のソース等が含まれる。
これは、開発者の生産性に関して有効である。
リポジトリには、アプリケーションをビルドして実行する
ために必要なすべてのソース、コンフィグファイルなどが含まれる。
2.依存性
アプリケーションを実行するためには、宣言を明示する必要がある。
バージョンを指定するころで、互換性の問題にも対処する。
3.設定
設定は、コードに依存するもの。一方、コードは設定に依存しない。
環境によって異なる設定は、アプリケーションの外部から動的に変更する。
設定は、そのためのファイルや環境変数などを利用する
4.Backing Service
Backing Serviceとは、アプリケーションがアクセスする
データベースや外部のアプリケーションのこと。
これらは、アプリケーションとは疎結合とする。
つまり、アプリケーションに影響を与えることなく、
新しいインスタンスに置き換えることができる。
5.Build , Release , Run
BuildとReleaseとRunは、別のステップとして実行する。
6.プロセス
アプリケーションは、ステートレスとして実行する。
ステートは、外部のデータベースへ保管する。
7.Port Binding
サービスは、Port Bindingで公開する。
アプリケーションは、その機能をネットワークポートを通じて、
提供する。
8.Concurrency
アプリケーションのスケール性を保証する。
アプリケーションは、水平、垂直のスケーリングができる。
9.Disposability
アプリケーションは、クラウド上で、restartされる。
リソースに対する接続を適切にcloseすることなど。
適切にシャットダウン、スタートアップできること。
10.Dev/prod Porting
環境間の差異を最小限にすること
11.Logs
ロギングは、アプリケーションのパフォーマンスに
大きな影響をもたらす。
12.管理プロセス
管理のためのプロセスは、独立した短いプロセスとする。
管理のためのタスクは、デバグやトラブルシューティングの
ために必要となるものである。
クラウドテクノロジー
Dockerは、容易な相互運用性やマイグレーションを実現するために利用される。
Open Shitは、kubernateに基づき、弾力性のあるプラットフォームを
提供するために利用しリソースのプロビジョニングを行う。
Dockerも、Open Shiftも、インフラのソフトウェア化のために利用される。
コンテナ:Docker
クラウドコンピューティングでは、リソースはシャアされる。
仮想化のためには、virtual machine とコンテナの2つの技術が利用される。
virtual machine は、物理的なハードウエアの上にパイパーバイザーと呼ばれる
ソフトウェアがあり、パイパーバイザーが物理的なリソースを抽象化する。
この技術は、1つのハードウエアの上へ複数の環境を作ることができる。
この環境のことを、virtual machine といい、IaaSを提供するテクノロジーとして、
提供される。このテクノロジーにも欠点がある。
各virtual machine は、それぞれOSのイメージを持ち、メモリやストレージの
オーバヘッドとなる。
0 件のコメント:
コメントを投稿