「マイクロサービス」という言葉は、過去数年前から存在しています。技術は活発に開発されており、人々はオンライン会議でそれについて話し、私たちは毎日自分たちでそれらを書いています。昔々、新しいアプローチはすでに日常的になっています。しかし、Javaアーキテクトとして、以前のコードの状態、コードの変更方法、現在人気があり、2021年に使用される実行方法に興味があります。非同期、コンテナー、FaaS。
これが、この投稿が2つの部分で生まれた方法です。BellSoftブログの記事とJavaの将来について議論したJoker 2020ラウンドテーブルに基づいて、Habrのために準備しました。今日のバックエンドのエコシステムの実際の改善は、マイクロサービスの作成方法を理解することなしには存在できません。最初から書くか、メスでモノリスを切り取るか。最初の部分でそれらの本質について話し、2番目の部分でマイクロサービスコンテナーをレイヤーに分解し、各レイヤーの寄与を調べることを提案します。
主な利点は構造にあります
マイクロサービスアーキテクチャに関する資料の大部分は、構造の点でモノリスと比較しています。コンポーネントが全体として、または単独でどのように機能するか。マイクロサービスは互いに独立しており、RESTAPIなどの任意のプロトコルを介してネットワーク経由でデータを交換できます。それは私たちに何を与えますか?少なくとも、ESB、スキーマの制限、および互換性の微妙さを見ることなく、任意のツールを選択する自由。仮想化とコンテナ化も進化しており、Alpine Linuxを備えた小さなコンテナにより、以前は専用のハードウェアで一度に多くのコンポーネントを実行できるようになりました。
チケットの予約やアカウントの再充電などの簡単なサービスを利用しましょう。マイクロサービスが登場する前から、このようなシステムのデータオブジェクトのライフサイクルを管理するためにCRUDアプローチが使用されていました。ただし、一部のエンティティにCRUD操作を提供するすべての機能は簡単に分離できます。次に、たとえばRESTを介して、スケーリング、アクセス制御、および一般的な相互作用を個別に処理できます。
すべてがうまくいくようです、キャッチは何ですか?
問題と解決策
モノリシックアプリケーションのさまざまな部分が共有メモリで実行され、すべての要求が同じ物理サーバーに送信されます。マイクロサービスはプロトコルを介して相互に通信します。これにより、次のような結果が得られます。
ネットワークトラフィックと遅延の管理の難しさ。
リクエストの失敗やその他のエラー。
データをシリアル化し、接続を暗号化する必要があります。
, API Kafka/Redis/RabbitMQ , . Kafka DevOps.
, , . . , , — . - .
:
(Kafka, Kinesis);
, service mesh (Istio, OSM);
.
— :
, , :
, . streaming platform (, Kafka) , .
, . , . , , .
Service mesh («c ») . , , Sidecar.
, JVM, , .
. , , Docker- .
-, , . , .
- . . , — SOA.
. . , — . , , REST.
Java? , . Java EE 20 . : , XML javadoc ; ; Java 5. . Java EE.
, Java EE (, JNDI), , , . Web 1.0 Web 2.0, . .
Container dependency injection
« ». , . « » — . . , : trailing lambdas Kotlin Ktor; data- , Java 14 record- ( Lombok).
. , /. , , , , . IDE, , . — .
Contexts and Dependency Injection (CDI). CDI Java EE JSR 299/365 Weld, WildFly. — (Inversion of Control, IoC).
: , , ( Spring Data) HTML. . — , . , Convention over Configuration ( « »), IoC- , BeanFactory Spring. .
冒頭で約束したように、この投稿はマイクロサービスアーキテクチャの歴史への小さな遠足になりました-結局のところ、それなしではどこにもありません。私たちは20年以上前の優れたテクノロジーを使用していますが、それでも現代的な感じがします。これは、メソッドが需要があり、ライブであり、レガシーになっていないためです。
第2部では、マイクロサービスコンテナーのレイヤーを詳細に分析し、ランタイムの正しい選択が何に影響するかを説明し、リソース消費を最小限に抑える方法を説明します。