マイクロサービス:CRUDからネイティブイメージまで。パート1

「マイクロサービス」という言葉は、過去数年前から存在しています。技術は活発に開発されており、人々はオンライン会議でそれについて話し、私たちは毎日自分たちでそれらを書いています。昔々、新しいアプローチはすでに日常的になっています。しかし、Javaアーキテクトとして、以前のコードの状態、コードの変更方法、現在人気があり、2021年に使用される実行方法に興味があります。非同期、コンテナー、FaaS。 





これが、この投稿が2つの部分で生まれた方法です。BellSoftブログの記事とJavaの将来について議論したJoker 2020ラウンドテーブル基づいて、Habrのために準備しました今日のバックエンドのエコシステムの実際の改善は、マイクロサービスの作成方法を理解することなしには存在できません。最初から書くか、メスでモノリスを切り取るか。最初の部分でそれらの本質について話し、2番目の部分でマイクロサービスコンテナーをレイヤーに分解し、各レイヤーの寄与を調べることを提案します。





主な利点は構造にあります

マイクロサービスアーキテクチャに関する資料の大部分は、構造の点でモノリスと比較しています。コンポーネントが全体として、または単独でどのように機能するか。マイクロサービスは互いに独立しており、RESTAPIなどの任意のプロトコルを介してネットワーク経由でデータを交換できます。それは私たちに何を与えますか?少なくとも、ESB、スキーマの制限、および互換性の微妙さを見ることなく、任意のツールを選択する自由。仮想化とコンテナ化も進化しており、Alpine Linuxを備えた小さなコンテナにより、以前は専用のハードウェアで一度に多くのコンポーネントを実行できるようになりました。





チケットの予約やアカウントの再充電などの簡単なサービスを利用しましょう。マイクロサービスが登場する前から、このようなシステムのデータオブジェクトのライフサイクルを管理するためにCRUDアプローチが使用されていました。ただし、一部のエンティティにCRUD操作を提供するすべての機能は簡単に分離できます。次に、たとえばRESTを介して、スケーリング、アクセス制御、および一般的な相互作用を個別に処理できます。





すべてがうまくいくようです、キャッチは何ですか?





問題と解決策

モノリシックアプリケーションのさまざまな部分が共有メモリで実行され、すべての要求が同じ物理サーバーに送信されます。マイクロサービスはプロトコルを介して相互に通信します。これにより、次のような結果が得られます。 





  • ネットワークトラフィックと遅延の管理の難しさ。





  • リクエストの失敗やその他のエラー。





  • データをシリアル化し、接続を暗号化する必要があります。





, API Kafka/Redis/RabbitMQ , . Kafka DevOps.





, , . . , , — . - . 





:





  1. (Kafka, Kinesis);





  2. , 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部では、マイクロサービスコンテナーのレイヤーを詳細に分析し、ランタイムの正しい選択が何に影響するかを説明し、リソース消費を最小限に抑える方法を説明します。








All Articles