開発Tweet事例つき!マイクロサービスとは?基礎知識からメリットとデメリットまでを解説マイクロサービスは複数の小さなサービスをAPIによって連携させるアーキテクチャのことです。単位ごとの修正や変更が容易でスピーディな運用がメリットで、AmazonやLINE、グノシーなどの大企業が導入していることで注目が集まっています。今回はマイクロサービスの基礎知識や、メリット・デメリットを解説、事例までご紹介いたします。■無料メルマガ:デジタルシフトのヒントが毎週届く■マイクロサービスとは?マイクロサービスは、小さなサービス単位を互いに連携させるアーキテクチャです。この記事では、サービスをどのように分割しているか、メリット、デメリットなどをご紹介します。マイクロサービスを導入している企業についても、事例を掲載しています。マイクロサービスアーキテクチャとはマイクロサービス(Microservices)は、個々に開発された複数の小さな(マイクロ)サービスを連携させて管理、運営をおこなっていくソフトウェアのアーキテクチャです。ソフトウェアのエンジニアであるマーチン・ファウラー氏らによって書かれた2014年の記事に登場して以来、一種のバズワードとして知られるようになりました。Fowlerhttps://martinfowler.com/articles/microservices.htmlマイクロサービスは、小さなサービス単位をHTTP経由のAPIといった軽量な通信で連携することによって、従来ネックとされていた処理速度の向上を実現しています。2017.09.19いまAPIが重要視されている理由とその活用方法web関係のことを調べていたり仕事で関わったりすると、一度ならず度々耳にしたり目にするのがAPIという言葉。APIという言葉は知っていても、意外と意味そのものはあまり世間に知られていなかったりしていることもあり、APIという言葉だけ...マイクロサービスの設計手法マイクロサービスは、1サービスを1プロセスとして稼働させる仕組みをとっています。サービス同士はAPIによって最小限の連携をもつのみで、基本的にはそれぞれ独立しています。そのため、設計にあたってはそれぞれのサービスに特化した手法をとることができます。障害が起きた時は1つのサービスごとに影響をチェック可能です。マイクロサービス関連知識「API」マイクロサービスを理解する上で知っておきたい知識に、まず「API」があります。Interface)は、プログラムとプログラムの呼出仕様のことです。API」で、そのシンプルさから多くの場面で用いられています。サービス同士が物理的に離れた場所にあっても、それらを連携させて大きなサービスとして運用することができるなど、実用的な特徴があります。Gatewayというものがあります。これは、マイクロサービスの特定のグループに対して単一のエントリポイントを提供するというサービスです。frontend)と呼ばれる場合もあります。ニーズを考えながらビルドするためにクライアントアプリとマイクロサービスの間を取り持つ役割を果たしています。認証SSL終了キャッシュなどの機能を提供することも可能です。仮想化技術の一つであり、プロセスの区画整備をするのがコンテナです。マイクロサービスの基盤技術「コンテナ」クラウド環境で稼働するマイクロサービスの基盤的な技術として主流になりつつあるのが「コンテナ」です。コンテナは、仮想化技術の一つで、OS上にそれぞれのアプリケーションの専用区画を作成します。プロセスごとにコンテナが用意され、プロセス間の連携をAPIでおこなっていくイメージです。コンテナ単位での入れ替えができるので、機能変更もスピーディにおこなえるというメリットがあります。現在コンテナの技術で主流となっているのは、Linux由来であるDocker(ドッカー)です。Dockerは、2013年にオープンソースのプロジェクトとして公開されました。導入や運用の手軽さや豊富なプレビルドイメージの提供により、さまざまなシーンで普及しています。Dockerコンテナの運用ツール「Kubernetes」Kubernetes(クーベルネティス)は、複数台のホストによって構成される実行環境を1台のように取り扱うことができるDockerコンテナの運用ツールの一つです。クラスタのどこにコンテナを配置するかをスケジューリングしてくれる上、CPUやメモリの足りない場合もノード(再配布ポイント)を増やすだけで拡張することができます。Dockerは、ホストの外とのやりとりや連携が煩雑になるという課題がありました。「Kubernetes」は、それを解決するためのツールといえます。マイクロサービス関連知識「トランザクション」トランザクションは、システムにおける永続的なデータへの不可分処理のことです。マイクロサービスのデータベースにおいて課題となるのがトランザクションで、複数のデータベースにまたがる分散トランザクションなどは、管理が困難になる問題点の一つとしてよく知られています。全体を一つのシステム構造とするモノリシックアーキテクチャでは容易ですが、細分化された個々が連携しているマイクロサービスにおいては、共有や結合といった関係性が弱いため、こうした課題がうまれます。この課題は、一連の処理を1つのワークフローとして再実装することで解決できます。2018.11.07モノリシック:用語解説から成り立ちまで!マイクロサービスとの比較も紹介!「モノリシック」というワードをご存知でしょうか。ICや工法、デザインのコンセプトとしても用いられている言葉で、ソフトウェアにおけるモノリシックはカーネルの構造において用いられています。現在、モノリシックからマイクロサービスへと移行す...マイクロサービス関連知識「フレームワーク」マイクロサービスフレームワークは、マイクロサービスの開発に使うことができるフレームワークです。アーキテクチャを支える文字通り「骨組み」、「枠組み」であり、各言語に存在します。マイクロサービスフレームワーク「Lumen」PHPのマイクロフレームワークが「Lumen」です。Laravelがベースとなっているため、Laravelにコードをコンバート可能です。「Slim」もPHPのマイクロサービスフレームワークです。アプリケーションやAPIを描きやすいシンプルなフレームワークとして定評があります。画像出典:Slimhttps://www.slimframework.com/マイクロサービスフレームワーク「Lagom」Javaのマイクロサービスフレームワーク「Lagom」は、「マイクロ(小さな)」という言葉にこだわらず「適切なサイズ」のサービス作成を念頭においています。ネーミングはスウェーデン語で「十分な」を意味しています。「Bottle」は、Pythonのフレームワークです。単一ファイルモジュールとして配布されました。シンプルで軽いことを特徴としています。画像出典:Bottlehttp://bottlepy.org/docs/dev/index.htmlマイクロサービスフレームワーク「Pyramid」Pythonのマイクロサービスフレームワーク「Pyramid」は、「小さく、早く、堅実」がキャッチフレーズ。簡単なセットアップが可能なので、サンプルスクリプトの確認も容易です。画像出典:Pyramidhttps://docs.pylonsproject.org/projects/pyramid/en/latest/マイクロサービスのメリットとデメリットモノリシックアーキテクチャと大きく異なるマイクロサービス。そのメリットとデメリットはどのようなものなのでしょうか。更改が容易という点が挙げられます。1プロセスで1サービスというマイクロサービスの特性は、サービス同士の依存関係が薄く、特異性、独自性を一定程度保持することができます。そのため、障害が起きても局所にとどめて影響を少なくすることができ、なおかつ新たな技術を取り入れたい場合、一部分の変更をしたい場合も身軽に動けます。マイクロサービスのデメリットマイクロサービスのデメリットには、サービスを的確に分割して設計するのが難しい一貫性に欠けるため、運用業務の負担が増加するという点が挙げられます。そもそもサービスをどのように分割するべきかという問題については、慎重に検討がなされるべきです。自社だけでの検討が不安ということであれば、外部のコンサルタントに相談するなどして、全体の細分化および設計について熟慮することをオススメします。2つめの運用業務については、1つのシステムを個々のサービスに分けるというマイクロサービスは、サービスごとの管理業務が必要になるということです。統合的に管理するシステムづくりによって、新たにコストが発生する可能性もあります。マイクロサービスの事例5選では、ここで企業の導入例をみてみましょう。クックパッドクックパッドは当初の「レシピ投稿・検索」から事業領域を広げ、「食を中心とした生活のインフラ」としてさまざまなサービスを提供しています。これにともなってクックパッドはソフトウェアアーキテクチャを見直し、拡大した事業を運営しやすいかたちに転換をはかりました。モノリシックアーキテクチャからマイクロサービスへの転換によって、独立性の高い個々のチームがスピーディに「価値」を創出し、ユーザーへ届けることによって成長を遂げています。Amazon巨大化したモノリシックアーキテクチャに限界を感じたAmazonは、早いうちからHTTPSのAPIのみで連携させるシステム作りに大きく舵を切っています。teams」、2枚のピザで満腹にならないような規模のチームは作るな、というルールがうまれたといわれています。LINELINEは、Twitter社が開発したオープンソース「Zipkin(分散トレーシングシステム)」を活用して、リクエスト単位でAPIのコールパスを可視化して分析。マイクロサービス導入時のリスクとして考えられる、パフォーマンスの低下に対して対策しています。NetflixAWSの先進ユーザーとしても知られる米国のストリーミング配信事業会社Netflix(ネットフリックス)は、数千のマイクロサービスから構成されたシステムを開発することで、機能変更の期間を大幅に短縮することに成功しています。エラー発生時に全体に影響が及ばないようにすることで、ユーザーの信頼を損なわないシステム運営が可能になっています。Gunosyグノシーは、iOSアプリでのニュース配信時に急激な負荷がかかりすぎ、APIの応答が遅くなったという経緯から、マイクロサービス指向の開発へ切り替えています。小さな単位は、使わなくなったAPIはメンテナンスをせずに削除できる点でも利便性が高いとしています。画像出典:株式会社Gunosy(グノシー)https://gunosy.co.jp/まとめマイクロサービスは、小回りの効いた設計によって日々スピードを増すデジタルテクノロジーに対応しています。いえ、どのようにサービスを分割するかについては専門的な知識やノウハウが不可欠です。そもそも自社のシステムをモノリシックアーキテクチャからマイクロサービスへ転換する必要があるかなどは、外部への相談も含め、慎重な検討が必要といえるでしょう。特集マスから個別の時代へ。