MicroProfile によるマイクロサービス開発
Eclipse MicroProfile は、Enterprise Java™環境でマイクロサービス・アプリケーションを開発するためのプログラミング・モデルを定義している。 これは、エンタープライズJavaコミュニティにマイクロサービスをもたらすための、 Eclipse Foundation傘下のオープンソースプロジェクトである。 MicroProfile は Liberty でサポートされます。
MicroProfile では、弾力性がありセキュアで、モニターが容易なマイクロサービスを作成するための多数の仕様が定義されます。 詳しくは、 MicroProfile リバティの機能をご覧ください。
制約事項
- CDI は MicroProfile API で幅広く使用されていますが、Liberty では、エンタープライズ・バンドル・アーカイブ (EBA) にパッケージ化された OSGi Web アプリケーションでの CDI はサポートされません。 代わりに、MicroProfile を使用するアプリケーションを Web アプリケーション・アーカイブ (WAR) またはエンタープライズ・アプリケーション・アーカイブ (EAR) にパッケージ化します。
- MicroProfile フォールト・トレランス は、他のサービスにかけられるコールを管理するように設計されている。 1.0 トランザクション・コンテキスト内のリソースに対する更新を管理するようには設計されていません。 CICS®
@Bulkhead,,,, とアノテーションされたメソッドでは、リソースを更新してはならない。@CircuitBreaker@Fallback@Timeout@RetryCICS JTAが使用されている場合でも、例外が発生した場合にこれらの更新が回復されることを保証することはできない。 - Liberty JVMサーバーのserver.xmlで
mpJwt-1.0機能が有効になっている場合、すべての認証はJWTベアラートークンを使用して行われなければなりません。 他の形式の認証を使用するには、別個の Liberty JVM サーバーを使用する必要があります。
CICS Liberty JVM サーバーにおけるサービス・アーキテクチャ
モノリシック・アーキテクチャー
バッキング・サービス
バッキング・サービスを使用すると、バックエンド・データおよびプログラムをメイン・アプリケーションから分離できます。 データとプログラムを別々のアプリケーションにすることで、プラットフォームに依存しない通信方法(例えば HTTP、ソケット、メッセージキューなど)で呼び出されます。 メイン・アプリケーションがこれらのソースと通信するためのすべてのロジックを保持する代わりに、いくつかの責任がこれらのサービスに与えられる。
CICS では、z/OS® Connect を使用して、CICS プログラムを REST API を介してバッキング・サービスとして公開します。 この例では、アプリケーションは JDBC を使用してデータベースと通信します。 E メールの送信には SMTP が使用され、z/OS Connect を介した CICS プログラムの呼び出しには HTTP が使用されます。
ホスト・サービス
サービスは、メイン・アプリケーションをさまざまなコンポーネントからさらに分離するために、CICS でホストされます。 バッキング・サービスと同様に、より多くの機能が CICS で CICS Web サービスを通して、または CICS Liberty でサーブレット、JAX-RS、JAX-WS などのテクノロジーを使用してアプリケーションと共に公開されます。
マイクロサービス
CICS におけるサービスのスケーリング
CICS では、領域のトポロジーおよびセットアップに応じて、サービスを複数の方法でスケーリングできます。 通常、マイクロサービスは単一のコンテナーに分離されます。 CICS では、サービスまたはサービスのセットは、領域または JVM サーバー内で分離できます。 スケーリングを行うには、同じサービスまたはサービスのセットをホストする複数の CICS 領域を実行します。 また、スレッド数を増加させて JVM サーバーをスケーリングすることもできます。
マイクロサービスの保護
可能な場合、マイクロサービスではパブリック・ネットワークをオフにしておく必要があります。 API ゲートウェイを使用して、マイクロサービスへのアクセスを制御できます。 MicroProfile では、マイクロサービス・エンドポイントの役割ベースのアクセス制御 (RBAC) に Open ID Connect (OIDC) ベースの JSON Web Token (JWT) を使用するための方式を提供します。 セキュリティー・トークンにより、さまざまなサービスにわたるユーザー ID の単純で相互運用可能な伝搬が可能となります。
authnTokenが設定されたserver.xmlの中にwebTarget要素を設定することで、リバティはJWTを自動的に伝播させることができます:<webTarget uri="http://microservice.example.ibm.com/protected/*" authnToken="mpjwt" /><mpJwt>要素にmapToUserRegistry=”true”設定属性を追加します。マイクロサービスでのデータ整合性
- A の更新が保留状態になります。
- A から B へメッセージが送信されます。
- B の更新が完了状態になります。
- B から A へメッセージが送信されます。
- A の更新が完了状態になります。
マイクロサービスを使用する場合
マイクロサービスを適用するのに最適なシチュエーションは、アプリケーションをより小さな分離されたサービスに分解可能な場合です。 マイクロサービスは、制御されたスケーリング、独立したデプロイメント、より自律的な開発を可能にする。 マイクロサービスのアーキテクチャは、特にデプロイとデータの一貫性において、余分な複雑さを生み出す可能性がある。 HTTPなどのプロトコルを介した通信は、メモリ呼び出しと比較して、より高いパフォーマンスコストを伴います。 コンポーネントを個別にスケーリングできるようにすることで、コンポーネントの障害に対する弾力性が向上します。 マイクロサービス・アーキテクチャーを管理する際には、正常でないサービスの診断を支援するためにモニター・ソリューションがさらに重要となります。