マイクロサービスは、変化に強い柔軟性に富んだサービスが実現できることから、近年大きな注目を集めています。
なぜマイクロサービスを導入するのか、そもそもマイクロサービスとはどういうものなのか、導入する際に検討段階から考えておくべきポイントを紹介します。
モノリシックなシステムからの脱却
まずは、これまでのシステム開発の主流であり、マイクロサービスと対になるモノリシック(一枚岩)なシステムについて説明します。
モノリシックなシステムでは、複数のサービスやサブシステムを1つの集合体としてアプリケーションを構築します(図1)。レガシーシステムの多くは古い技術や仕組みが使われていて、モノリシックなシステムとなっているケースが多く、近年、お客様から、以下のような相談を受けることが多くなっています。
・システムの一部だけ機能を修正してリリースする場合も、全ての機能をリリースする必要があるので運用の負担が大きい。
・システムの追加、改修を繰り返し、アプリケーションが肥大化してしまい、プログラムがスパゲッティ状態になってしまった。
・特定の機能にだけアクセスが集中した場合でも、全ての機能に影響を与えてしまう。
・システム開発当時のメンバーが残っておらず、機能改修が思うように進まない。
2018年に経済産業省が発表しているDX(デジタルトランスフォーメーション)レポート※でも、複雑化・老朽化・ブラックボックス化した既存システムが残存した場合、爆発的に増加するデータを活用しきれずにDXを実現できず、デジタル競争の敗者になる恐れがある、とうたわれています。
これらの問題を解決する手法として、マイクロサービスアーキテクチャが注目されています。
※経済産業省 「DXレポート ~ITシステム「2025年の崖」克服とDXの本格的な展開~」
マイクロサービスアーキテクチャ
マイクロサービスアーキテクチャとは、アプリケーションをモノリシックなシステムとして動作させるのではなく、機能単位で独立させて動作させる手法です(図2)。
まずは、マイクロサービスアーキテクチャのメリットを見てみましょう。
・機能単位で修正とリリースが可能、保守・メンテナンス性・拡張性が高い。
・機能単位で独立している。プログラムがスパゲッティ状態になりにくい。
・アクセスが集中している機能のみスケールできる。
・一部の障害がアプリケーション全体には影響しない。
つまり、マイクロサービスアーキテクチャは、変化に強い柔軟性に富んだサービスの実現が可能です。 しかし、マイクロサービス(マイクロサービスアーキテクチャを導入したシステム)の場合は各機能を連結して管理するため。事前にCI/CD(Continuous Integration/Continuous Delivery)の導入やインフラストラクチャの検討が必要になります。では、この2つについて見ていきましょう。
CI/CDの導入
まず、CI/CDについて簡単に説明します。
CIは継続的インテグレーションの略で、アプリケーション開発において、静的分析、ビルド、テストなどの実行を自動化する手法です。CDは継続的デリバリーの略で、自動的に本番環境へのリリース準備を実行する手法です(図3)。
既存のアプリケーションの機能を改修する場合、改修した機能のテストはもちろんですが、機能同士が疎結合で連結しているため、変更していない機能も影響がないことを繰り返しテストする必要があります。これらの作業を自動化することで、改修にかかるコストや開発期間を大幅に削減することが可能です。
また、マイクロサービスの場合、機能単位でリリースできるため、モノリシックなシステムに比べてリリース頻度が大幅に増加します。リリース準備を自動化することでリリース作業を軽減することが可能です。
ただし、テストの自動化など作業を全て自動化するとコストがかかり過ぎてしまい、本末転倒になるケースもあります。サービスとして重要な機能や頻繁に変更が入る機能など、自動化する部分を検討することも重要なポイントです。
インフラストラクチャの検討
マイクロサービスでは機能単位で可用性などを担保する必要があるため、インフラストラクチャも重要な要素の1つです。
インフラストラクチャの可用性などを検討する場合、コストや運用の作業負荷を考慮し、AWSなどのパブリッククラウドを利用するケースが増えています。下表では、パブリッククラウドの中でもマイクロサービスの実現に関係性の深いCaaS(Container as a Service)、PaaS(Platform as a Service)、FaaS(Function as a Service)について、特徴やメリット、デメリットをまとめています。
もちろん、IaaS(Infrastructure as a Service)でもマイクロサービスは実現できます。
しかし、開発スピードや柔軟性を考慮すると、IaaSに一から環境を構築するよりも、CaaS、PaaS、FaaSの3つを組み合わせ、それぞれの特徴を活かして利用する方が多くのメリットを享受できると考えます。
マイクロサービスの事例
マイクロサービスを採用するには、システムに関するさまざまなステークホルダーの理解が必要となるケースもあり、技術的な面だけなく組織全体を巻き込んで検討していく場合もあります。
ある事例では、既存システムがスパゲッティ状態になっていたため、データから正規化を行い、徐々にサービスを分割するアプローチをとりました。運用業務の大幅な効率化が実現できたものの、マイクロサービス化で疎結合になることでAPIの呼び出し回数などが増えたため、パフォーマンスに影響を与えるという課題が発生しました。そこでこの事例では、BFF(Backends For Frontends)やCDN(Content Delivery Network)の導入を行うことで課題の解決を図っています。
最後に
マイクロサービスについての特徴と導入する前に考えておくべきポイントを紹介しました。紹介した事例ではパフォーマンスに課題がありましたが、マイクロサービス導入するには、サービスの適切な分割、トランザクションの管理、非同期処理など、一冊の本が作れるほど検討すべき内容があります。
「マイクロサービスはハードルが高そう・・・」と感想を持たれたかもしれませんが、大丈夫です。既存システムの全てをマイクロサービス化する必要はなく、システムの一部の機能だけをマイクロサービス化するだけでも、大きなメリットが得られるはずです。
既存システムの改修でお困りの方やマイクロサービスについてもっと詳しく聞きたいという方は、ぜひ富士ソフトに問い合わせしてみてください。