<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>devkuma – MSA</title>
    <link>https://www.devkuma.com/jp/tags/msa/</link>
    <image>
      <url>https://www.devkuma.com/jp/tags/msa/logo/180x180.jpg</url>
      <title>MSA</title>
      <link>https://www.devkuma.com/jp/tags/msa/</link>
    </image>
    <description>Recent content in MSA on devkuma</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>jp</language>
    <managingEditor>kc@example.com (kc kim)</managingEditor>
    <webMaster>kc@example.com (kc kim)</webMaster>
    <copyright>The devkuma</copyright>
    
	  <atom:link href="https://www.devkuma.com/jp/tags/msa/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>MSA(Microservices Architecture) マイクロサービスアーキテクチャ</title>
      <link>https://www.devkuma.com/jp/docs/msa/</link>
      <pubDate>Thu, 30 Sep 2021 14:54:00 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/msa/</guid>
      <description>
        
        
        &lt;h2 id=&#34;msaとは&#34;&gt;MSAとは?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Microservices Architecture。&lt;/li&gt;
&lt;li&gt;すべてのシステム構成要素が1つのプロジェクトに統合されているMonolithic Architecture(モノリシックアーキテクチャ)の限界を克服するために登場した。&lt;/li&gt;
&lt;li&gt;小さく、独立してデプロイ可能な、それぞれ特定の機能を担うサービスで構成されたフレームワークである。&lt;/li&gt;
&lt;li&gt;MSAは1つのシステムを完全に独立してデプロイ可能な個別サービスに分割する。&lt;/li&gt;
&lt;li&gt;各サービスはRESTful APIを通じてデータをやり取りし、1つの大きなサービスを構成する。&lt;/li&gt;
&lt;li&gt;異なる技術スタック(開発言語、データベースなど)を利用できる単一の事業領域に焦点を当てる。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;msaの特徴&#34;&gt;MSAの特徴&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;APIを通じてのみ相互作用できる。&lt;/li&gt;
&lt;li&gt;サービスのend-point(接点)をAPIの形で外部に公開する。&lt;/li&gt;
&lt;li&gt;実際の詳細はすべて抽象化する。&lt;/li&gt;
&lt;li&gt;内部の実装ロジック、アーキテクチャ、プログラミング言語、データベース、品質維持体系のような技術的事項は、サービスAPIによって徹底的に隠蔽される。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;msaのメリット&#34;&gt;MSAのメリット&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;各サービスはモジュール化されており、これらのモジュール同士はRPCまたはMessage-driven APIなどを利用して通信する。&lt;/li&gt;
&lt;li&gt;個々のサービス開発を速くし、保守もしやすくする。&lt;/li&gt;
&lt;li&gt;サービスごとに適切な水準の技術スタックを変えて採用できる。&lt;/li&gt;
&lt;li&gt;サービスごとに独立してデプロイできる。
&lt;ul&gt;
&lt;li&gt;継続的デプロイ(CD)もモノリシックに比べて軽く行える。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;各サービスの負荷に応じて個別にScale-outできる。
&lt;ul&gt;
&lt;li&gt;これはメモリやCPUの面で大きな利点になる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;一部のサービスで障害が発生しても、サービス全体の障害にはならない。&lt;/li&gt;
&lt;li&gt;各サービスは異なる言語やフレームワークで構成できる。&lt;/li&gt;
&lt;li&gt;サービスの拡張が容易である。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;msaのデメリット&#34;&gt;MSAのデメリット&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;モノリシックに比べて相対的にかなり複雑である。&lt;/li&gt;
&lt;li&gt;サービス間でRESTful APIを使って通信するため、そのコストが発生する。&lt;/li&gt;
&lt;li&gt;サービスが分離されているため、テストやトランザクション処理などが難しい。
&lt;ul&gt;
&lt;li&gt;通信障害やサーバー負荷がある場合、どのようにtransactionを維持するかを決定し、実装しなければならない。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;サービス間の呼び出しが連続するため、デバッグや統合テストが難しい。&lt;/li&gt;
&lt;li&gt;実際の運用環境へデプロイすることが容易ではない。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;msaサーバー構成&#34;&gt;MSAサーバー構成&lt;/h2&gt;
&lt;h3 id=&#34;サービスディスカバリサーバー&#34;&gt;サービスディスカバリサーバー&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Spring: Netflix Eureka&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;webサービスクライアント&#34;&gt;Webサービスクライアント&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Spring: Netflix Feign&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;クライアントサイドロードバランサー&#34;&gt;クライアントサイドロードバランサー&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Spring: Netflix Ribbon&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;サーキットブレーカーcircuit-breaker&#34;&gt;サーキットブレーカー(Circuit Breaker)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Spring: Netflix Hystrix&lt;/li&gt;
&lt;li&gt;クライアントからリモートサーバーへ送信したリクエストの失敗率が特定のしきい値(threshold)を超えると、サーバーに問題があると判断し、それ以上無意味なリクエストを送らず、すばやくエラーを発生させる方法(fail fast)である。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;apiゲートウェイgateway&#34;&gt;APIゲートウェイ(Gateway)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Spring: Netflix Zuul, Gateway&lt;/li&gt;
&lt;li&gt;リバースプロキシサーバー。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://futurecreator.github.io/2018/09/14/what-is-microservices-architecture/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;マイクロサービス Microservices アーキテクチャ&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
      
      <category>MSA</category>
      
    </item>
    
  </channel>
</rss>
