2.2. クラウドネイティブなアプリケーション¶
目次
2.2.1. クラウドネイティブなアプリケーションとは¶
本ガイドラインにおけるクラウドネイティブなアプリケーションについて説明する。
クラウドネイティブなアプリケーションとは、クラウド基盤の伸縮性に対応し、必要なタイミングでリソースを増減可能な伸縮性を持ったアプリケーションである。 APサーバをステートレスな構造とし、クラウドベンダが提供する機能による動的なスケーリングを可能とする。 加えて、本ガイドラインでは動的なスケールが不可である領域の負荷分散を行う方式を提供する。
Note
本ガイドラインでは、クラウド基盤の伸縮性に対応するための代表的なアプリケーション構造についてのみ説明を行う。 基盤レイヤなどのアプリケーション以外の要素については説明しない。
本ガイドラインで説明する内容は以下のとおり。 アプリケーションの要件に応じて、必要な要素を実装すること。
項番 | 項目 | 概要 | アプリケーションでの対応要否 |
---|---|---|---|
①
|
セッション情報をクラウドベンダが提供するキャッシュサービス上で管理し、APサーバをステートレスな構造とする。
|
セッションを利用するアプリケーションについては対応必須。RESTful Web Serviceなどの、セッションを利用しないアプリケーションでは対応不要。
|
|
②
|
アップロードファイルをクラウドベンダが提供するストレージサービス上で管理し、APサーバをステートレスな構造とする。
|
仮アップロードなどのアプリケーションが処理中の状態をファイルで保持するアプリケーションについては対応必須。
|
|
③
|
データ永続層についてスケール可能なアプリケーション構造とする。
|
データ永続層にRDBを利用し、将来的なスケール性を確保する要件がある場合に対応する。
|
|
④
|
高負荷処理をメッセージサービスにより非同期実行し、レスポンスタイムを確保する。
|
レスポンスタイムを優先し、高負荷処理を別サーバで非同期実行させる要件がある場合に対応する。
|
|
⑤
|
環境依存値をアプリケーション内部に保持せず、外部のコンフィグサーバで管理する。
|
システム内の複数サーバ間での設定値の共有や、同一アプリケーションでの稼働環境(本番環境・ステージング環境・開発環境など)の切り替えを行う場合に対応する。
|
|
⑥
|
クラウドベンダが提供するヘルスチェックに加えて、アプリケーションからヘルスチェックを行う。
|
クラウドベンダ機能の他に、アプリケーションからヘルスチェックを行う要件がある場合に対応する。
|
|
⑦
|
クラウド基盤の伸縮性に対応したログ管理を行う。
|
アプリケーションからログ出力を行う場合は対応必須。
|
2.2.1.1. AWSクラウドデザインパターンとの対応¶
本ガイドラインで説明する内容とAWSクラウドデザインパターンとの対応について説明する。
Note
AWSクラウドデザインパターンとは、代表的なクラウドベンダであるAmazon Web Service(AWS)を利用したシステムアーキテクチャ設計を行う際のノウハウが整理されたドキュメントである。 AWS利用者へ向けた内容であるが、クラウドネイティブなアプリケーションを開発するにあたって汎用的な考え方が網羅されている。
詳細については、 AWSクラウドデザインパターン を参照されたい。
本ガイドラインにおける アプリケーション開発 の各節とAWSクラウドデザインパターンの対応関係は以下のとおり。 なお、フレームワークの役割と関連性が薄い一部のデザインパターンは省略している。
カテゴリ | AWSクラウドデザインパターン | 本ガイドラインでの対応(共通) | 本ガイドラインでの対応(AWS) |
---|---|---|---|
なし
|
|||
共通のみ
|
|||
共通のみ
|
|||
なし
|
|||
なし
|
なし
|
||
なし
|
なし
|
||
なし
|
|||
なし
|
なし
|
||
なし
|
なし
|
||
なし
|
なし
|
||
共通のみ
|
|||
なし
|
なし
|
||
なし
|
なし
|
||
共通のみ
|
|||
共通のみ
|
|||
なし
|
|||
2.2.1.2. Twelve-Factor Appとの対応¶
本ガイドラインで説明する内容とTwelve-Factor Appとの対応について説明する。
Note
Twelve-Factor Appとは、モダンなクラウドアプリケーション開発のベストプラクティスの一つである。
詳細については、 The Twelve-Factor App を参照されたい。
本ガイドラインにおける アプリケーション開発 の各節とTwelve-Factor Appの各要素との対応関係は以下のとおり。
Twelve-Factor App | 本ガイドラインでの対応(共通) | 本ガイドラインでの対応(AWS) |
---|---|---|
フレームワークのスコープ外
|
フレームワークのスコープ外
|
|
Maven等のツールで解決
|
共通のみ
|
|
共通のみ
|
||
フレームワークのスコープ外
|
フレームワークのスコープ外
|
|
なし
|
なし
|
|
フレームワークのスコープ外
|
フレームワークのスコープ外
|
|
なし
|
||
なし
|
なし
|
2.2.1.3. クラウドネイティブ成熟度モデルとの対応¶
Springを開発、提供しているPivotal社が提示している クラウドネイティブ成熟度モデル(Cloud Native Maturity Model)と本フレームワークの対応関係を示す。
成熟度 | Pivotal社が提示する要件 | 本ガイドラインでの対応(共通) | 本ガイドラインでの対応(AWS) |
---|---|---|---|
Cloud Native
|
Microservices architecture
API-first design
|
なし
|
なし
|
Cloud Resilient
|
Fault-tolerant and resilient design
Cloud-agnostic runtime implementation
Bundled metrics and monitoring
Proactive failure testing
|
||
Cloud Friendly
|
12 factor App methodology
Horizontally scalable
Leverages platform for high availability
|
||
Cloud Ready
|
No permanent disk access
Self-contained application
Platform-managed ports and networking
Consumes platform-managed backing services
|
2.2.2. Macchinetta Framework for Java (5.x) との関係¶
Macchinetta Framework for Java クラウド拡張 は Macchinetta Framework for Java (5.x) を拡張し、クラウドネイティブなアプリケーションを開発するためのベストプラクティスを提供するものである。 Macchinetta Framework for Java (5.x) が提供するライブラリやノウハウについては原則として踏襲するものとし、必要に応じて拡張を行う。
2.2.2.1. バージョンの対応関係¶
Macchinetta Framework for Java クラウド拡張 と Macchinetta Framework for Java (5.x) のバージョンの対応関係を以下に示す。
Macchinetta Framework for Java クラウド拡張 | Macchinetta Framework for Java (5.x) |
---|---|
1.2.0
|
1.7.0
|
2.2.2.2. 機能の対応状況¶
本ガイドラインにおける Macchinetta Framework for Java (5.x) が提供する機能の対応状況について説明する。
2.2.2.2.1. 共通ライブラリ¶
Macchinetta Framework for Java (5.x) が提供する共通ライブラリの対応状況は以下の通り。
プロジェクト名
|
分類
|
部品名
|
対応状況(AWS)
|
---|---|---|---|
terasoluna-gfw-common
|
例外ハンドリング
|
例外クラス
|
検証済み
|
例外クラス
|
検証済み
|
||
例外コード
|
検証済み
|
||
例外ログ出力インターセプタ
|
検証済み
|
||
システム時刻
|
システム時刻ファクトリ
|
検証済み
|
|
コードリスト
|
コードリスト
|
検証済み
|
|
データベースアクセス(共通編)
|
クエリエスケープ
|
未検証
|
|
シーケンサ
|
未検証
|
||
terasoluna-gfw-string
|
文字列処理
|
半角全角変換
|
未検証
|
terasoluna-gfw-codepoints
|
文字列処理
|
コードポイントチェック
|
未検証
|
入力チェック
|
コードポイントチェック用Bean Validation制約アノテーション
|
未検証
|
|
terasoluna-gfw-validator
|
入力チェック
|
バイト長チェック用Bean Validation制約アノテーション
|
未検証
|
フィールド値比較相関チェック用Bean Validation制約アノテーション
|
未検証
|
||
terasoluna-gfw-jodatime
|
システム時刻
|
Joda Time用システム時刻ファクトリ
|
検証済み
|
terasoluna-gfw-web
|
二重送信防止
|
トランザクショントークンチェック
|
検証済み(制約有り) *1
|
例外ハンドリング
|
例外ハンドラ
|
検証済み
|
|
例外ログ出力インターセプタ
|
検証済み
|
||
コードリスト
|
コードリスト埋込インターセプタ
|
検証済み
|
|
ファイルダウンロード
|
汎用ダウンロードView
|
未検証
|
|
ロギング
|
トラッキングID格納用サーブレットフィルタ
|
検証済み
|
|
汎用MDC格納用サーブレットフィルタ
|
検証済み
|
||
MDCクリア用サーブレットフィルタ
|
検証済み
|
||
terasoluna-gfw-web-jsp
|
二重送信防止
|
トランザクショントークン出力用のJSPタグ
|
検証済み
|
ページネーション
|
ページネーションリンク表示用のJSPタグ
|
検証済み
|
|
メッセージ管理
|
結果メッセージ表示用のJSPタグ
|
検証済み
|
|
EL Functions
|
XSS対策用EL関数
|
検証済み
|
|
URL用EL関数
|
未検証
|
||
DOM変換用EL関数
|
未検証
|
||
ユーティリティEL関数
|
未検証
|
||
terasoluna-gfw-security-web
|
ロギング
|
認証ユーザ名格納用サーブレットフィルタ
|
検証済み
|
- 二重送信防止に関する制約の内容については、制約事項 を参照されたい。
2.2.2.2.2. 提供機能¶
Macchinetta Framework for Java (5.x) Development Guidelineが提供する機能の対応状況は以下の通り。
分類
|
機能名
|
対応状況(AWS)
|
---|---|---|
Webアプリ開発機能
|
入力チェック
|
検証済み
|
例外ハンドリング
|
検証済み
|
|
セッション管理
|
未検証
|
|
ページネーション
|
検証済み
|
|
二重送信防止
|
検証済み(制約有り) *1
|
|
メッセージ管理
|
検証済み
|
|
国際化
|
未検証
|
|
コードリスト
|
検証済み
|
|
ファイルアップロード
|
検証済み(拡張有り)
|
|
ファイルダウンロード
|
未検証
|
|
Tilesによる画面レイアウト
|
検証済み(制約有り) *2
|
|
共通ライブラリが提供するJSP Tag Library と EL Functions
|
検証済み
|
|
Ajax
|
未検証
|
|
ヘルスチェック
|
検証済み(拡張有り)
|
|
Web Service
|
RESTful Web Service
|
未検証
|
RESTクライアント(HTTPクライアント)
|
未検証
|
|
SOAP Web Service(サーバ/クライアント)
|
未検証
|
|
データアクセス
|
データベースアクセス(共通編)
|
検証済み
|
データベースアクセス(MyBatis3編)
|
検証済み(拡張有り)
|
|
排他制御
|
検証済み
|
|
アプリケーション形態に依存しない汎用機能
|
ロギング
|
検証済み
|
プロパティ管理
|
検証済み(拡張有り)
|
|
日付操作(JSR-310 Date and Time API)
|
未検証
|
|
日付操作(Joda Time)
|
検証済み
|
|
システム時刻
|
検証済み
|
|
文字列処理
|
未検証
|
|
Beanマッピング(Dozer)
|
検証済み
|
|
メッセージ連携
|
E-mail送信(SMTP)
|
検証済み
|
JMS(Java Message Service)
|
検証済み(拡張有り)
|
|
セキュリティ対策
|
Spring Security概要
|
検証済み
|
認証
|
検証済み
|
|
認可
|
検証済み
|
|
セッション管理
|
未検証
|
|
CSRF対策
|
検証済み
|
|
ブラウザのセキュリティ対策機能との連携
|
未検証
|
|
XSS対策
|
検証済み
|
|
暗号化
|
未検証
|
|
OAuth
|
未検証
|
- 二重送信防止に関する制約の内容については、制約事項 を参照されたい。
- Tilesによる画面レイアウトに関する制約の内容については、ViewResolverが上書きされViewの解決ができない を参照されたい。