JavaRush /Java Blog /Random-JA /Java マイクロサービスのガイド。パート 2: 導入とテスト

Java マイクロサービスのガイド。パート 2: 導入とテスト

Random-JA グループに公開済み
Java マイクロサービスの翻訳と適応: 実践ガイドガイドの最初の部分へのリンク。 Java マイクロサービスのガイド。 パート 2: 導入とテスト - 1サーバー側 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 のこの回答を確認してください。
  • コンテナはそれ自体の移植性を保証します。つまり、どこでも機能します。おなじみですね。
Java マイクロサービスのガイド。 パート 2: 導入とテスト - 2JVM の移植性と下位互換性を考えると、この機能がそれほど利点とは思えないのは面白いことです。JVM.zip を任意の Raspberry Pi (または携帯電話) にダウンロードし、抽出して任意の .jar ファイルを実行するだけです。PHP や Python などの言語では状況が変わり、バージョンの非互換性や展開設定がより複雑になります。または、Java アプリケーションが、Postgres データベースや Redis キーバリュー ストアなど、インストールされている他の多くのサービス (正しいバージョン番号を持つ) に依存している場合。Java マイクロサービス、より正確には Java アプリケーションに対する Docker の主な利点は、 Testcontainersなどのツールを使用して均質なテスト環境または統合環境をセットアップできることです。複雑な開発も簡単にインストールできます。たとえば、 Discourseフォーラム ソフトウェアを考えてみましょう。単一の Docker イメージを使用してインストールできます。そのイメージには、Ruby で書かれた Discourse ソフトウェアから Postgres データベース、Redis、キッチンのシンクまで、必要なものがすべて含まれています。デプロイメントが似ている場合、または優れた小規模な Oracle データベースを実行したい場合は、Docker を試してください。要約すると、.jar ファイルをただ見るのではなく、次のようになります。
  • 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 つの方法のいずれかを使用できます。
  1. 少し作業するだけで (Spring Boot などのフレームワークを使用している場合)、マシ​​ンに十分なメモリがあるかどうかに応じて、すべてのマイクロサービスを 1 つの起動クラスに結合し、単一の Wrapper.java クラスを使用してすべてのマイクロサービスをロードできます。すべてのマイクロサービスを実行します。
  2. Docker Swarm または Kubernetes の設定をローカルにコピーできます。
  3. もうローカルで統合テストを実行しないでください。代わりに、専用の DEV/TEST 環境をデプロイします。これは、かなり多くのチームがローカル マイクロサービスのセットアップの苦痛に屈したときに実際に行っていることです。
さらに、Java マイクロサービスに加えて、実行中のメッセージ ブローカー (ActiveMQ や RabbitMQ など)、あるいは Java マイクロサービスが相互に通信するために必要な電子メール サーバーやその他のメッセージング コンポーネントも必要になる場合があります。これは、DevOps 側の複雑さの大幅な過小評価につながります。マイクロサービス テスト ライブラリを検討してください。この問題を軽減できます。いずれにせよ、この複雑さにより、マイクロサービスの一般的な問題が生じます。これについては、これから説明します。最後の部分では、Java マイクロサービスに関する一般的な質問について説明します。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION