マイクロサービス開発とは?メリット、注意点、事例の紹介

新規事業

2020年03月11日(水)掲載

マイクロサービスとは

マイクロサービス・アーキテクチャと呼ばれ、システムをそれぞれ複数の独立した機能で構成し、機能同士を連携してサービスを実現させるアーキテクチャです。
それぞれ異なるマシン上で稼働し、APIなどの軽量な手段で連携します。

従来利用されてきた、「モノリシック・アーキテクチャ」と比べると理解しやすいです。

より具体的に、見ていきましょう。
一般的なWebサービスやアプリを実現するシステムであれば、三層構造(ユーザーインターフェース、ビジネスロジック、データ)のように役割によって分かれた構造になっています。
ユーザーインターフェースを指すものがブラウザ、ビジネスロジックはアプリケーション、データがデータストアとなります。

モノリシック・アーキテクチャでは、ユーザーインターフェースからくるリクエストに対して、一つのマシン内で機能が統合された大きなアプリケーションを動かして処理を行います。
アプリケーションの内部では、機能ごとにプログラムが組まれていますが、同一マシン上で実装されているため、分割はできません。そのため、機能改修や追加を行う際には、影響範囲がシステム全体に及ぶ可能性があるため、調査や多くのテストが必要になります。
マイクロサービス・アーキテクチャでは、各機能が別のマシン上で実装されており、ネットワークプロトコルを介した通信とAPIによって連携し、サービスを実現します。
そのため、機能単位で独立しての改修や機能追加を行い反映させることができます。

また、マイクロサービスは、古くて新しいとされていますが、単なるバズワードではなくしっかりした考え方です。
モダンな開発方式として上記のようにバズワードとして紹介されるマイクロサービスですが、「大きなものは管理が難しいので、小さいものに分けて管理して、全体として機能させる」という考え方はソフトウェア業界では常識的です。よって、ただのブームとしてではなく、今後も十分に残っていく開発スタイルだと考えています。

例えば、Mike Gancarzの「UNIXという考え方」という古典的名著でも同じような考え方が下記のように言及されています。

‘’’1. Small is beautiful. 小さいものは美しい
小さいものは、大きい物にない利点がいくつもある。小さいもの同士なら簡単に独特の便利な方法で組み合わせることができる’’’
‘’’2. Make each program do one thing well. 1つのプログラムには1つのことをうまくやらせる
一つのことに集中することでプログラムに不要な部分をなくせる。
不要な部分があると、実行速度が遅くなり、不必要に複雑になり、融通が効かない。’’’

上記はプログラムに対する言及ですが、これをアプリケーションと置き換えたものがマイクロサービスと述べても大きなズレはないでしょう。

マイクロサービス開発のメリット

開発者が目指していることは、質の良いサービスやシステムをより迅速に提供することです。
その前提で、マイクロサービスは変化に強いシステムを作ることが可能と言えます。

・サービスごとに異なる技術を採用できる
・障害耐性・保守性が高い
・スケール・冗長化が容易
・開発チームを小さくできる
・サービス一つ一つが小さいため把握が容易
・サービスの再利用性が高くなる

マイクロサービスの設計時の留意点

マイクロサービスを採用して設計を行う場合には、求められる機能をどの粒度で分割するかが重要となります。

なぜなら、各機能を細かく分割しすぎると、コストやパフォーマンスに影響するようなオーバーヘッドが発生しやすくなります。
逆に、分割粒度が大きいとマイクロサービスのメリットが少なくなってしまうためです。
また、運用時の課題として監視対象が増えることによりサービスの死活監視やデータログの管理が煩雑になるといった問題も挙げられます。

データベースについても検討が必要です。
機能ごとにデータベースを管理し、各データベースは1つの機能のみからアクセスできるようにする必要があります。
このように設計することで、独立性が向上し、ロックやトランザクションなどにまつわるトラブルやパフォーマンス低下などを防ぐことが期待できます。

そして、機能同士の連携については同期的な手法と非同期的な手法の2種類があり、通信方法の選定もマイクロサービス・アーキテクチャを利用するに当たって重要なポイントとなります。
同期的なメッセージ通信の実現手法として一般的なのが、HTTPベースでやりとりを行う「REST」と「RPC(RPC over HTTP)」という手法があり、よく使われています。

マイクロサービスを選択する場合、このような問題を認識した上で、設計時には十分な検討が必要と言えます。

マイクロサービス開発の事例

事例1. クックパッド株式会社の事例
クックパッドの中核サービスであるレシピサービスのアーキテクチャ改善プロジェクトにて、全面的にマイクロサービス化しています。
これによって、独立性の高いチームが比較的小さなサービスを素早く開発し、ユーザーにスピード感をもって価値を届けるという体制を作ることができたそうです。

事例2. Amazon.comの事例
Amazon.comではマイクロサービスという言葉が出てくる前から、現在でいうマイクロサービスを採用しています。当時、モノリシック・アーキテクチャの限界を感じたファウンダーのジェフ・ベゾスが、肥大したシステムをマイクロサービス化し、各システムはHTTPSのAPIだけで連携させるように全社に向けて発信しました。
しかもAPIには、当時はまだ主流ではなかったREST APIを採用しました。
これを徹底するために、正当な許可なくマイクロサービス以外のシステム、API以外で他サービスと連携するシステムを作ったエンジニアはクビにするとまで言い切ったそうです。

事例3. 株式会社メルカリの事例
価値の高いものを生み出していくために、一人ひとりのエンジニアが「こうしたい」と思ったことを実現できる環境づくりに力を入れるため、マイクロサービス化したそうです。
マイクロサービス移行プロジェクトは2018年頭ごろに本格的にスタートしました。

事例4. LINE株式会社の事例
Amazon.comと同様、当時は、マイクロサービスという言葉はありませんでしたが、独自にLINE流マイクロサービスを採用していたそうです。
メッセージングサービスの核になる「Talk-server」が中心にあり、個々の機能をサービスとして開発し、すべてAPIでつながっています。
また、各サービスは開発言語もバラバラで、独立して開発されています。
そのため、全体としてはシンプルで、効率よく開発できると言われています。

事例5. Netflix株式会社の事例
マイクロサービスと継続的デリバリ(アプリケーションの新しいバージョンを低コストで迅速かつ簡単に、自信を持って展開できるようにするためのソフトウェア開発プラクティス)を組み合わせることで、新しいアイデアを素早くテストし、顧客エクスペリエンスを継続的に改善しています。

まとめ

有名企業の多くがマイクロサービス化に移行中、または検討しています。
変化の激しいこの時代で、世の中のニーズに対して柔軟に素早く対応することが可能となるマイクロサービスを採用するメリットは大いにあると言えます。

ただし、マイクロサービスはメリットも多くありますが、設計時の注意点もあります。
各機能の規模は小さくなりますが、開発にあたるエンジニアはビジネスロジックの構築はもちろんのこと、同期・非同期通信やDB、インフラまで幅広い知識が求められます。
そして、機能の分割粒度に関しては特に十分な検討が必要です。

そのため、既存のシステムをマイクロサービスに移行する際には、メインの処理をモノリシックで構築し、一部の処理についてマイクロサービスの思想を採用し、ハイブリッドな形で構築するという手法も選択肢の一つであると考えられます。

単に、「主流になってきたから」や「勢いのある企業が利用しているから」などの理由でマイクロサービスを採用するのではなく、事前に対象システムがマイクロサービスに適しているのかについて十分に検討を行い、採用する必要があります。

ライターH.K氏

投資顧問会社に入社し、アナリストやファンドマネジャーとして活躍。その後、ミドルベンチャーに転職し、エンジニアとして高い実績を残す。独立後、ベンチャー企業に取締役として参画した後、会社を設立。金融×ARのベンチャー企業設立後、売却。現在2社の代表を務める。

関連コラム

ページTOPへ戻る