今日、マイクロサービスのコンセプトは単に新しいだけではなくなっています。DevOpsの登場、コンテナ技術ブーム、デプロイ自動化ツールによって、マイクロサービスは開発者が手掛けるアプリケーションの構造を変えつつあります。マイクロサービスはJava EE開発者にとっていかにして有効な選択肢となり得るのか、そしてPayara Microとそれが提供する完璧なプラットフォームによってどのようなメリットが得られるのかについてみてゆきましょう。
 
  
マイクロサービスの概要 
マイクロサービス・アーキテクチャの主な目的は、アプリケーションをより小さな独立したコンポーネントに分割して、より扱いやすく、デプロイしやすく、スケールしやすく、長期間にわたってメンテナンスしやすくすることです。どこかで聞き覚えがあることでしょう。それもそのはずで、これらは多くの開発者が大昔からずっと取り組んできていることなのです。カプセル化、凝集性、サービス指向アーキテクチャへの正しい理解により、私達は長い間に渡ってこのような「分割統治法」をソフトウェア・アーキテクチャに適用してきました。おそらく、これから先もそうなることでしょう。
 
では、マイクロサービスの長所とは何でしょうか。マイクロサービスは対極となる従来型の手法であるモノリシック・アプリケーション と比較すると理解しやすいでしょう。
 
モノリシック・アプリケーション、あるいは単にモノリスともいいますが、それは通常大きな業務アプリケーションで、単一のデプロイ可能なパッケージとして構成されています。もし新しいコンポーネントもしくは既存コンポーネントのアップグレードを行いたい場合には、モノリス全体を一度アップデートしなければなりません。これは業務アプリケーションを開発する通常の方法であり、多層構造の考え方(UI、ミドルウェア・サービス、永続化、データ)に注目して、各層単位で関心事を分割します。
 
モノリスは従来型の考え方に基づく普通のアプリケーションであるのに対して、マイクロサービスのアプローチはアプリケーションを独立したコンポーネント(またはサービス)に分割し、各コンポーネントは以下のような基準を満たすものとなります。
小さい こと。 まとまっている こと。例えば単一の機能にフォーカスしていること。 インタフェースを公開し、同一アプリケーションまたは外部のサービスが使用できるようにしていること。 独立して管理できること。すなわち、単独でコーディング、テスト、デプロイ、高速なスケールが可能であること。 自身の扱うデータについて応答できること。 他のサービスから完全に独立していること。直接的な依存関係を必要としていないこと。  
モノリス vs. マイクロサービス 
では、すべてのケースにおいて、従来型のモノリシックなアプリケーションの代わりにマイクロサービスを使うべきなのでしょうか。決してそうとは限りません。マイクロサービスは単に新しいアーキテクチャのスタイルを定義するものではなく、アプリケーションの開発チームに対して異なるやり方も要求するためです。
 
モノリスを使用する場合とマイクロサービスを使用する場合で、それぞれ以下のような利点と欠点があります。
 
モノリス
 
マイクロサービス
 
変更によるコストはすべての層にまたがるため高い。単一機能の変更がユニット全体の再デプロイを意味する。
 
変更は実装容易で、コストも対象となる特定のサービスに限定されるため高くない。
 
すべてのコンポーネントが単一のユニットとなり、通信のオーバーヘッドがない。
 
サービス間の通信のためリモート呼び出しが必要で、これはアプリケーションのパフォーマンスのオーバーヘッドになり得る。
 
開発チーム全体がアプリケーション全体の設計と構成に習熟していなければならない。
 
各サービスは個別のチームで分担することが可能で、関心事の分割と応答性の都合に合わせる。
 
技術スタックを考慮して開発が行われ、1つまたは2つの言語が使用される。主な言語・フレームワークはソフトウェア・アーキテクチャに影響を与える。
 
各サービスは要求と必要性に応じて異なるフレームワークで開発することができる。各サービスが正しいツールとして発展させることを優先するため、標準は捨て去る。
 
デプロイおよびクラスタ化が容易。
 
サービスの数とサービス間の通信が増加するにつれてデプロイとクラスタ化が複雑化。
 
コンポーネントの欠陥がアプリケーション全体の不良とユーザー・エクスペリエンスが妨げられる原因となる。
 
サービスの欠陥は特定のサービスのダウンだけで収束し、そのためサービスは互いに切断される。
 
各層とその連携に注力する。
 
ビジネス上の必要性とチーム間のコミュニケーションに注力する。
 
 
利点として考慮すべき事柄は緑、欠点として考慮すべき事柄は赤、ソフトウェア要求または組織の環境によってメリットが変化するものはオレンジで示す。 
 
マイクロサービスは組織がアプリケーションを構造的な方法で開発する助けになります。しかし、アプリケーションはビジネスにとって重要ではなく、品質指標 (パフォーマンス、可用性、スケーラビリティ、セキュリティ等) がない場合など、伝統的なモノリシックなアプローチの方が十分適している場合もあります。
 
マイクロサービスとJava EE 
Java EE仕様はモノリシック・アプリケーションの作成を容易にします。Java EE開発者にもたらす主なメリットは、特定のコンテナ・サービスがネットワーク処理、トランザクション管理、リソース・ライフサイクルのような技術的な関心事を取り扱うため、それらに煩わされる必要がないことです。これにより開発者の仕事がシンプルとなり、代わりにビジネスの関心事に注力することができます。
Java EEの場合、モノリシック・アプリケーションの例は以下のような特性を持つe-コマース・アプリケーションでしょう。
複数のモジュール  ( モノリスの層を結合する )  からなる EAR ファイルで構成される 
連携を扱う EJB モジュール  (SOAP Web サービス、メッセージ処理、等 ) JPA 、 JDBC 、 JCA といった伝統的な方法でデータ・ストアにアクセスする共通の永続化レイヤーとしての EJB モジュール ユーザー・インタフェースとなる Web アプリケーションに相当する複数の WAR モジュール。ここではアプリケーションが 3 つの WAR モジュールを持っているものとしましょう。 1 つは管理インタフェース、プロバイダーまたは販売者が使用するもの、購入者向けのものです。  
アプリケーションは Java EE によって開発されるため、ほとんどのコードは Java で記述されます。 WAR モジュールについて、ユーザー・インタフェースはおそらく JavaScript を伴う JSF または JSP でコーディングされます。これによりアプリケーション全体は一貫した同じ Web 技術によって構成されることになるでしょう。  
こうして見ると複雑に感じられることでしょう。上記のシナリオは初期のJava EEで用いられたものです。しかし現在では、Maven、OSGi、Java EEアプリケーションのモジュラー化、アプリケーション全体の単一WARファイルによるデプロイにより、Java EE上でのモノリスの開発は容易になっています。しかし、このe-コマース・アプリケーションをマイクロサービスとして開発するには、シンプルなWARは十分ではありません。
 
マイクロサービスを作成するのにGlassFish (およびPayara Server ) のようなJava EEアプリケーション・サーバーに含まれるAPIを使用することには何の技術的な制約もありません。ただし、いくつかの注意点があります。
各マイクロサービスは完全に単独でのデプロイが可能でなければなりません。つまり各サービスはそれぞれが単独の Java EE コンテナによって構成されることを意味します。つまり。例えばアプリケーションが 10 のマイクロサービスから構成されているとするならば、各サービスを配備するために 10 の独立したアプリケーション・サーバーのインストールが必要となります。 ほとんどのアプリケーション・サーバーは決して軽量とは言えず、その複雑さと提供機能を考慮する必要があります。例えば、 Payara Server の Full Profile は現時点でおよそ 117 MB あります。 ほとんどのアプリケーション・サーバーが起動時間を短縮化してきているにもかかわらず、アプリケーション・サーバーは特定のサービスでは使用しない多くのコンポーネントまで準備するため、いくらかのオーバーヘッドがあります。例えば、 GlassFish のドメインを起動する時には、サーバーはメッセージング・サブシステムを初期化しますが、これは一部の例外を除き、多くのサービスでは必要としません。  
Payara Micro 
 
java -jar payara-4.1.1.163.jar –deploy user-service.war 
 
各サービスをこのコマンドで実行しても、サービスが起動するまで長い時間を待つ必要や、サーバーを何度もインストールする必要はありません。Payara Micro はJava EE Web Profileをベースとしており、複雑でレガシーなAPI (例えばJMS、JCA、JAX-WS) は使用できなくなっています。ただし、マイクロサービスの技術的要求を考慮すると、これらがなくても問題ありません。依然としてサーブレット、JSP、JSF、CDI、JAX-RS、JPA、JSON-P等が使用可能だからです。
 
{{cta(‘ff953ff1-4db6-44cc-89b4-bce1530a0b79’)}}
 
MicroProfile 
Payara Microはマイクロサービスに向いていますが、開発者がずっと小さなフットプリントでサービスを実装するための要求を満たすには十分とは言えません。そこでPayara、Red Hat、IBM WebSphere Liberty、Tomitribe、London Java Communityによって構成される新しいコミュニティ・グループは、エンタープライズJava開発者をターゲットとしたマイクロサービスのイニシアティブ、MicroProfile 
短い起動時間 より小さなバイナリ・サイズ メモリ消費量の削減 クライアント側による負荷分散 リアクティブ・プログラミング・モデルのサポート ( 非同期受信、メッセージ中心呼び出し、等 ) サーキット・ブレーカー機構のサポート  
現時点ではMicroProfileはCDI、JAX-RS、JSON-Pの各仕様への準拠に集中しています。このプロジェクトを進めていく上で、同じように含めた方が良いと思われる他のAPIや機能について投票 
 
{{cta(’05ad14c7-2a48-4870-a771-627991e0b939′)}}
 
まとめ 
マイクロサービスはすぐそこまで来ています。大企業もスタートアップもそこに十分なメリットが得られるのであればマイクロサービス・アーキテクチャの実装を検討すべきでしょう。それだけにJava EEを置き去りにすることはできず、また開発者がこのスタイルに移行するためJava EEは進化しなければなりません。Payara Microは理想的なスタート地点であり、特に既にGlassFishやPayara Serverに慣れているのであれば、Java EEアプリケーションをデプロイし動作させるのはとても簡単です。
 
マイクロサービスは銀の弾丸ではなく、共有された知識に過ぎないことに注意してください。伝統的なモノリシックなアプローチは依然として有効であり、マイクロサービスへの切り替えはメリットが必要性と用途に合致する時に行ってください。マイクロサービスへの移行は皆さんが直面する技術的なチャレンジを良く理解するだけに留まらず、同様に組織とビジネスにとってのチャレンジでもあることを理解しておいてください。
  
 
 
 {{cta(‘363ebe49-5f9f-44fd-bae1-f7b47d43d873’)}}