Optimizing Twelve-Factor Apps for OpenShift by Red Hat

原文 : Optimizing Twelve-Factor Apps for OpenShift by Red Hat - Red Hat Customer Portal

OpenShift Enterprise by Red Hat は、アプリケーションアーキテクチャ非依存な PaaS 基盤です。さらに、ステートフルな旧来型のアプリケーションも実行することができます。OpenShift Enterpriseは、モダンでステートレスな Twelve-Factor Apps も実行することができます。この文書では、Twelve-Factor Apps のアーキテクチャの最適化とOpenShift Enterprise へのデプロイの方法を紹介します。

Note: Twelve-Factor App は、モダンなクラウド環境にアプリケーションを構築するためのメソドロジーです。詳細は http://12factor.net/ja/ を参照してください。

Factor Relationship
Codebase - コードベース バージョン管理されている1つのコードベースと複数のデプロイ。OpenShift Enterpriseは、ソースコードリポジトリからソースコードを取得してアプリケーションのビルドとデプロイが可能。
Dependencies - 依存関係 依存関係を明示的に宣言し分離。OpenShift Enterprisは、プログラミング言語ごとの依存関係の管理システムの利用が可能。MavenJavaCPANやその他にも多数のプログラミング言語の依存関係管理システムをサポート。
Config - 設定 設定を環境変数に格納する。OpenShift Enterpriseは、複数環境変数の設定方法を提供。
Baking Service - バックエンドサービス バックエンドサービスをアタッチされたリソースとして扱う。OpenShift Enterpriseでは、多数のバックエンドサービスを提供いしている(データベース、メッセージブローカなど)。さらに、外部リソースをアタッチすることも可能。
Build, release, run - ビルド、リリース、実行 ビルド、リリース、実行の3つのステージを厳密に分離する。OpenShift Enterpriseは、厳密にビルド、リリース、実行のステージのコードベースを分離し、サードパーティのデプロイツール統合し、継続的インテグレーション/継続的デリバリ(CI/CD)が可能。
Processes - プロセス アプリケーションを1つもしくは複数のステートレスなプロセスとして実行。OpenShift Enterpriseな、デプロイ可能な単位としてDockerコンテナをネイティブにサポート。Dockerコンテナはステートレスでポータブル。
Port binding - ポートバインディング ポートバインディングを通してサービスを公開。OpenShift Enterpriseは、アプリケーションをポートバインディングによって公開し、サービスを公開可能。サービスな OpenShift 内部での利用も、バックエンドサービスとして外部に公開することも可能。
Concurrency - 並行性 プロセスモデルによってスケールアウト。OpenShift Enterpriseは、手動/自動でアプリケーションをスケールアウトが可能で、真のウェブスケールのアプリケーションのデプロイが可能。
Disposability - 廃棄容易性 高速な軌道とグレースフルシャットダウンで堅牢性を最大化。コンテナの起動と停止。OpenShift Enterpriseはコンテナを利用し、堅牢なツールの仕組みを活用して、迅速な起動とグレースフルシャットダウンが可能。
Dev/prod parity - 開発/本番一致 開発、ステージング、本番環境をできるだけ一致させた状態を保つ。OpenShift Enterpriseの中の”環境”は名称が異なるだけ。唯一の本番環境か100ステップの本番環境かに関わらず、インフラもアプリケーションアーキテクチャも変更なし
Logs - ログ ログをイベントストリームとして扱う。OpenShift Enterpriseは、アプリケーション開発者が特別な操作をすることなしに、すべてのインスタンスのアプリケーションログデータを集約可能。
Admin process - 管理プロセス 管理タスクを1回限りのプロセスとして実行。OpenShift Enterpriseはデプロイ前後のフックを実行する昨日を提供する。また、同様にcronのようなタスクを”管理/運用タスク”として実行可能。

Red Hat は、Twelve-Factor Apps には上記以外にも特徴があると考えている。

Characterristics Relationship
Microservices - マイクロサービス 業務として意味のある単位または、ビジネスの価値を提供することができる最小単位でのソフトウェアのビルド方式
Self Service Full Stack Infrastructure OpenShiftは、セルフサービスでアプリケーションの実行環境の取得を可能にする。OS、コンテナ、ストレージ、ネットワーク、ミドルウェアソースコード管理/ビルド/デプロイツール
Support your choice of deployment OpenShiftは、物理サーバ・仮想サーバ、プライベートクラウドパブリッククラウドなど、お好きな環境に構築可能!
Enterprise Ready Containers OpenShiftで採用しているDockerコンテナは、単に root ユーザ以外でコンテンを実行するだけではなく、SELinuxによってセキュリティを担保。さらに Red Hat は、Docker社以外でDockerの開発に最も貢献している。Red Hat Enterprise Linux が Docker の最適な実行環境となることを目標としている。
Immutable Infrastructure OpenShift は、テストされたアプリケーションのバージョンを本番環境にデプロイできるような機能を提供。この機能により、コードベースのトレーサビリティが向上し、環境の違いによる障害を減らすことが可能。
API-Based Collaboration 複数のサービスやアプリケーションを跨る連携は、公開されバージョン付けられたAPIを通じて利用。Red Hatは、サービスやアプリケーションを WebService、REST、JMSやその他のプロトコルやフォーマットを利用して連携するプロダクトを提供。→JBoss FuseJBoss AMQ
Test Driven Development Red Hatは、OpenShift/Kubernetesに配備されたアプリケーションをテストするためのMavenプラグイン(fabric8-arquillian)を提供。fabric8-arquillianは、OpenShift/KubernetesのDockerのクラスタ環境で利用するためのArquillianの拡張。OpenShift/Kubernetesにデプロイされた環境のテストで利用可能。
Community Based Innovation OpenShiftは、Kubernetes、Dockerなどのオープンソースのプロジェクトを活用。これらのプロジェクトへの有力な貢献者でありかつ、これらのプロジェクトの利用者でもある。Red Hatは、より良いソフトウェア開発を牽引している。
Continuous Integration and Continuous Deployment OpenShiftは、CI/CDを実現可能とする Jenkins の Docker イメージを提供。

その他の参考記事: マイクロサービス,DevOps, PaaSが最新のJava EEアーキテクチャに与える影響