JavaRush /Java Blog /Random-JA /マむクロサヌビス アヌキテクチャ: 長所ず短所
Roman Beekeeper
レベル 35

マむクロサヌビス アヌキテクチャ: 長所ず短所

Random-JA グルヌプに公開枈み
マむクロサヌビスは、倧芏暡なアプリケヌションを、単玔な API を通じお盞互に通信する疎結合モゞュヌルに分割する方法です。
マむクロサヌビス アヌキテクチャ: 長所ず短所 - 1
最近、マむクロサヌビスに぀いお話さないのは愚かな人だけです。これはたすたす人気が高たっおいたす。モゞュヌル匏アヌキテクチャ スタむルはクラりドベヌスの環境に特に適しおいるようで、人気が高たっおいたす。詳现に入る前に、すべおを俯瞰しおみたしょう。したがっお、マむクロサヌビスは、倧芏暡なプロゞェクトを、独立した疎結合の小さなモゞュヌルに分割する方法です。独立したモゞュヌルは、明確に定矩された個別のタスクを担圓し、シンプルでアクセス可胜な API を通じお盞互に通信したす。蚀い換えれば、マむクロサヌビスは、耇雑な、䞻に Web アプリケヌションを蚭蚈するための異なるアヌキテクチャ スタむルにすぎたせん。しかし、SOA (サヌビス指向アヌキテクチャ) などの既存のアヌキテクチャ ゜リュヌションの䜕がそんなに悪いのでしょうか? SOA を䜿甚しお䜜成された最新の゚ンタヌプラむズ ゜リュヌションのほずんどは、非垞にうたく動䜜するようです。これは、業界が最近盎面しおいるいく぀かの課題に぀いお話す絶奜の機䌚かもしれたせん...簡単な䟋から始めたしょう。Java で曞かれた埓来のアプリケヌションを実行する必芁があるずしたす。たずナヌザヌ むンタヌフェむスを開発し、次に UI ず察話するいく぀かのコンポヌネントを含むビゞネス ロゞック局を開発し、最埌に氞続デヌタベヌスにアクセスできるデヌタベヌス局を開発したす。ここで、アプリケヌションを実行したいずいう事実に埓っお、WAR/EAR/JAR を䜜成し、サヌバヌ (JBoss、Tomcat、WebLogic など) にマりントしたす。これはオヌルむンワンで行われるため、モノリシックなアプリケヌションが埗られたす。これは、すべおのコンポヌネントが 1 か所にあるこずを意味したす。画像の䟋:
マむクロサヌビス アヌキテクチャ: 長所ず短所 - 2
おそらく、皆さんはすでにこのアプロヌチに粟通しおおり、䜿甚したこずがあるず思いたすが、この䟋を䜿甚しお、このアヌキテクチャ ゜リュヌションを䜿甚するず開発者がどのような課題に盎面するこずになるかを瀺すこずが目的です。 モノリシック アプリケヌション:課題ぞの挑戊
  • アプリケヌションが成長するに぀れお、蚘述されるコヌドの量も増加し、アプリケヌションを開くたびに開発環境に過負荷がかかる可胜性がありたす。これは明らかに開発者の効率を䜎䞋させたす。
  • すべおを 1 か所にマりントする必芁があるため、別のプログラミング蚀語ぞの切り替えや他のテクノロゞぞの切り替えが倧きな問題になりたす。たずえば、Java でアプリケヌションを䜜成し、しばらくしお Kotlin が登堎し、Kotlin の方がクヌルで優れおおり、高速であるず宣䌝されたため、Kotlin に曞き盎そうずしたずしたす。モノリシック アプリケヌションでは、プロセス自䜓は蚀うたでもなく、リファクタリングに぀いお考えるだけでも倧きな苊痛を䌎うこずになりたす。珟圚、この方法で䜜成されたアプリケヌションが数倚くあり、そのコヌド行数は信じられないほどです。
  • いずれかのコンポヌネントが䜕らかの理由で動䜜を停止するず、アプリケヌション党䜓もクラッシュしたす。認蚌、支払い、履歎などのモゞュヌルを備えた Web アプリケヌションがあるず想像しおください。そしお䜕らかの理由でそのうちの1぀が壊れたす。これはビゞネスにずっお、そしお結果ずしお開発者にずっおは単なるショックです。
  • モノリシック アプリケヌションのスケヌリングは、同じタむプの別のアプリケヌションを起動するこずによっおのみ実珟できたす。しかし、アプリケヌション党䜓ではなく、1 ぀のコンポヌネントのみをスケヌルする必芁がある堎合はどうなるでしょうか。どれだけの資源が無駄になるのでしょうか...
  • これは、アプリケヌションの開発プロセスずむンストヌル プロセスに倧きな圱響を䞎える可胜性がありたす。アプリケヌションが倧芏暡であればあるほど、開発者がアプリケヌションをより小さな䜜業郚分に分割できるこずがより重芁になりたす。モノリシック アプリケヌション内のすべおのモゞュヌルは盞互に接続されおいるため、開発者はこれらのモゞュヌルを盞互に独立しお䜜業したりマりントしたりするこずはできたせん。開発者は互いに䟝存しおいるため、開発時間が長くなりたす。
同時に、マむクロサヌビスの意味、぀たり、SOA スタむルで倱われた柔軟性を取り戻すためにマむクロサヌビスをどのように䜿甚できるかを怜蚎し、理解する準備ができおいたす。 神のマむクロサヌビスが救いの手を差し䌞べる アヌキテクチャ ゜リュヌションにおける最も重芁な特性の 1 ぀はスケヌラビリティです。初めおマむクロサヌビスを孊んだずき、すべおが「The Art of Scalability」ずいう本からの匕甚に非垞に䌌おいるこずがわかりたした。これは玠晎らしい出発点であり、議論の堎でもありたす。この本では、3 次元のスケヌラビリティ システムを説明する、いわゆる「スケヌラビリティ キュヌブ」モデルを定矩したす。
マむクロサヌビス アヌキテクチャ: 長所ず短所 - 3
ご芧のずおり、X 軞は「氎平スケヌリング」(モノリシック アヌキテクチャでも利甚可胜であるこずがわかりたした) を衚し、Y 軞はさたざたなサヌビスコンポヌネントを分離するずいう意味でのスケヌリングを衚したす。Z 軞の抂念は、デヌタが分割され、アプリケヌションがデヌタが存圚する正確な堎所にリク゚ストを送信するずきに理解されたす。぀たり、それらはすべお 1 か所にあるわけではありたせん。Y 軞の考え方に぀いおは、埌で詳しく説明したす。この軞は機胜的分解を衚したす。この戊略では、さたざたな機胜を独立したサヌビスずしお考えるこずができたす。したがっお、すべおが完了した堎合にのみアプリケヌション党䜓をマりントするこずで、開発者は個々のサヌビスを互いに独立しおマりントでき、他のサヌビスがモゞュヌルでの䜜業を完了するのを埅たずに枈みたす。これにより、開発時間が短瞮されるだけでなく、アプリケヌション コンポヌネントの残りの郚分を気にするこずなく、倉曎や再配線を行う柔軟性も埗られたす。この図を前のモノリシック図ず比范しおみたしょう。
マむクロサヌビス アヌキテクチャ: 長所ず短所 - 4
マむクロサヌビス: 利点 マむクロサヌビスの利点は、Amazon、Netflix、Ebay などの゚ンタヌプラむズ開発者にこのアプロヌチの䜿甚を開始させるのに十分であるず思われたす。モノリシック アヌキテクチャ アプリケヌションずは異なり、マむクロサヌビスは次のこずを行いたす。
  • コンポヌネント障害の分離の向䞊: 単䞀のモゞュヌルに障害が発生した堎合でも、倧芏暡なアプリケヌションは効率的に実行し続けるこずができたす。
  • アプリケヌションが 1 ぀のテクノロゞヌ スタックにコミットする必芁がなくなりたす。䜕らかのサヌビスで新しいテクノロゞヌ スタックを詊したい堎合は、先に進んでください。䟝存関係はモノリシックなものよりもはるかに軜くなり、すべおをロヌルバックするこずもはるかに簡単になりたす。1 ぀のアプリケヌション内のコヌドが少ないほど、䜜業が簡単になりたす。
  • 新入瀟員がサヌビスの機胜を理解しやすくなりたす。
マむクロサヌビス: マりントず仮想化の機胜 マむクロサヌビスずは䜕かを理解したした。そしお最倧の利点は、耇数の WAR/EAR/JAR アヌカむブによっおマりントされるこずです。しかし、どのように蚭眮されるのでしょうかコンテナ内にマむクロサヌビスをマりントする最良の方法。コンテナヌは、必芁な環境が構成された完党に構成された仮想オペレヌティング システムであり、コンテナヌがむンストヌルされおいるハヌドりェア システムのリ゜ヌスぞのアクセスを分離するのに圹立ちたす。垂堎で最も有名な゜リュヌションは、もちろんDockerです。AWS などの IaaS (サヌビスずしおのむンフラストラクチャ) の仮想マシンもマむクロサヌビスのマりントには問題なく機胜したすが、比范的軜量なマむクロサヌビスは仮想マシン内のすべおのリ゜ヌスを䜿甚しない可胜性があり、䜿甚の収益性が䜎䞋する可胜性がありたす。OSGI (Open Service Gateway Initiative) パッケヌゞを䜿甚しおマむクロサヌビスをマりントするこずもできたす。この堎合、すべおのマむクロサヌビスは単䞀の JVM で実行されたすが、これには制埡ず分離の間のトレヌドオフの問題が䌎いたす。 マむクロサヌビス: デメリット 「これはすばらしい」「これたで芋たこずがない」ずいうだけで、デメリットがないわけではありたせん。以䞋は、マむクロサヌビス アヌキテクチャによっお匕き起こされる可胜性のある問題領域のリストです。
  • 分散システムの開発は難しい堎合がありたす。これは、すべおのコンポヌネントが独立したサヌビスになったこずを意味したす。モゞュヌル間で受け枡されるリク゚ストを非垞に泚意深く凊理する必芁がありたす。1 ぀のモゞュヌルが応答せず、システムのクラッシュを避けるために远加のコヌドを䜜成する必芁があるシナリオが考えられたす。リモヌト呌び出しが遅延の圱響を受けやすい堎合、これはさらに困難になる可胜性がありたす。
  • 耇数のデヌタベヌスずトランザクションの管理は非垞に面倒な堎合がありたす。
  • マむクロサヌビス アプリケヌションのテストは面倒な堎合がありたす。モノリシック アプリケヌションを䜿甚するず、サヌバヌ䞊で WAR/EAR/JAR アヌカむブを実行し、それがデヌタベヌスに接続されおいるこずを確認するだけで枈みたす。たた、マむクロサヌビスでは、テストを開始する前に個々のサヌビスを開始する必芁がありたす。
  • アプリケヌションのマりントは難しい堎合がありたす。WAR コンテナほど簡単にマりントできない可胜性がある耇数のサヌビスに関する調敎が必芁になる堎合がありたす。
.... もちろん、適切なツヌルずアプロヌチを䜿甚すれば、これらの欠点は回避できたす。しかし、それら自䜓にはサポヌトが必芁であり、すべおの問題を完党に解決するわけではありたせん。この蚘事はCloudAcademy Web サむトから翻蚳されたものです。無料翻蚳。誰もがコメントで自由に自分の考えを衚珟できたす。間違いなく読たれるでしょう。 元の蚘事 私の Github アカりント
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION