Java マイクロサービスの翻訳と適応: 実践ガイド。ガイドの最初の部分へのリンク。 サーバー側 Java プログラム、つまりマイクロサービスは、拡張子が .jar または .war の単なるファイルです。Java エコシステム、つまり JVM には素晴らしい点が 1 つあります。Java コードを 1 回記述するだけで、使用しているバージョンよりも新しいバージョンの Java でコードをコンパイルしていない限り、ほぼすべてのオペレーティング システムで実行できます。ターゲットの JVM バージョン。これは、特に Docker、Kubernetes、または (ドラムロール!) クラウドなどのトピックに関して理解することが重要です。なぜ?さまざまな導入シナリオを見てみましょう。
最小限の Java マイクロサービスのデプロイ例
銀行の例を続けましょう。したがって、monobank.jar ファイル (モノリス) と、新しく抽出した Riskengine.jar (最初のリスク チェック マイクロサービス) があります。また、世界中の他のすべてのアプリケーションと同様に、両方のアプリケーションに .properties ファイルが必要であると仮定します。この例では、データベース URL と資格情報のみが含まれます。最小限の展開は、次のような 2 つのディレクトリで構成されます。
-r-r------ 1 ubuntu ubuntu 2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 monobank-384.jar
ubuntu@somemachine:/var/www/www.monobank.com/java$ java -jar monobank-384.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
2番目:
-r-r------ 1 ubuntu ubuntu 2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 risk-engine-1.jar
ubuntu@someothermachine:/var/www/risk.monobank.com/java$ java -jar risk-engine-1.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
これでは、.properties ファイルと .jar ファイルはどのようにしてサーバーに到達するのかという疑問が残ったままになります。残念ながら、多くの答えがあるかもしれません。
ビルドツール、SSH、Ansible を使用して Java マイクロサービスをデプロイする方法
Java マイクロサービスの展開方法については、退屈ではありますが、同様に優れたアドバイスです...実際、システム管理者が過去 20 年間にわたって企業に Java サーバー プログラムを展開してきた方法とまったく同じです。これがミックスです:- お気に入りのビルド ツール (Maven、Gradle)
- .jar をサーバーにコピーするための古き良き SSH/SCP
- デプロイメントスクリプトとサーバーを管理するための Bash スクリプト
- または、さらに良いのは、いくつかの Ansible スクリプトです。
Docker を使用して Java マイクロサービスをデプロイする方法
選択の甘い苦しみに戻りましょう。数年前、Docker が登場し、それに伴ってコンテナ化が行われました。これを扱ったことがない場合は、エンド ユーザーと開発者を対象とした簡単な説明を以下に示します。- コンテナ (簡略化) は古き良き仮想マシンに似ていますが、より「軽量」です。この文脈における「より簡単」が何を意味するかが不明な場合は、Stackoverflow のこの回答を確認してください。
- コンテナはそれ自体の移植性を保証します。つまり、どこでも機能します。おなじみですね。
- jar ファイルを Docker イメージにバンドルします
- このイメージをプライベート Docker レジストリにプッシュします
- このイメージをプルしてターゲット プラットフォームで実行します
- または、Docker イメージを実稼働システムに直接コピーして実行します。
Docker Swarm または Kubernetes を使用して Java マイクロサービスをデプロイする方法
Docker を試してみることにしたとします。Java マイクロサービスをデプロイするたびに、.jar ファイルをバンドルする Docker イメージを作成します。これらの Java マイクロサービスがいくつかあり、これらのサービスを複数のマシン (クラスター内) にデプロイしたいとします。このクラスターをどのように管理するかという疑問が生じます。Docker コンテナーを実行し、パフォーマンスを確認し、更新をデプロイし、システムをスケールします (brrr)? この質問に対する考えられる答えは、Docker Swarm と Kubernetes の 2 つです。両方のオプションについて詳しく説明すると、このすでに長いチュートリアルが長くなりすぎますが、どちらのオプションも最終的にはクラスターを管理するために YAML ファイル ( Yaml インデントのストーリーを参照) を作成することに依存していることに言及することが重要だと思います。これが実際にどのような感情を引き起こすかを知りたい場合は、Twitter 検索に同様のクエリを入力してください。Java マイクロサービスのデプロイメントプロセスは次のようになります。- Docker Swarm/Kubernetes の構成と管理
- Docker のすべての手順 (上記を参照)
すべてがうまくいくまで、目が血が出るほどYAML を書いて実行してください。
Java マイクロサービスをテストする方法
実稼働環境にマイクロサービスを実装することにしたとします。今開発中に n マイクロサービスの統合をテストするにはどうすればよいでしょうか? ワークフローの一部だけではなく、全体が機能しているかどうかを確認するにはどうすればよいでしょうか? 実際には、次の 3 つの方法のいずれかを使用できます。- 少し作業するだけで (Spring Boot などのフレームワークを使用している場合)、マシンに十分なメモリがあるかどうかに応じて、すべてのマイクロサービスを 1 つの起動クラスに結合し、単一の Wrapper.java クラスを使用してすべてのマイクロサービスをロードできます。すべてのマイクロサービスを実行します。
- Docker Swarm または Kubernetes の設定をローカルにコピーできます。
- もうローカルで統合テストを実行しないでください。代わりに、専用の DEV/TEST 環境をデプロイします。これは、かなり多くのチームがローカル マイクロサービスのセットアップの苦痛に屈したときに実際に行っていることです。
GO TO FULL VERSION