「マイクロサービス化への課題と開発運用法」レポート
こんにちは、さくらインターネットの大喜多です。
2019年6月13日に、Interop Tokyo 2019にてマイクロサービス化への課題と開発運用法と題したセッションがありました。本セッションは、巨大化するWebサービスの課題と、それを解決するとされているマイクロサービス化の背景について、SRE(Site Reliability Engineering=サイト信頼性エンジニアリング)の観点でのシステムアーキテクチャと開発運用手法について取り扱うセッションでした。
本セッションはさくらインターネット株式会社の伊勢 幸一がモデレータを務め、事業会社でマイクロサービス化をおこなっている立場としてLINE株式会社から佐藤 春旗 氏が、マイクロサービス化を支援する立場としてグーグル合同会社からIan Lewis 氏が登壇しました。
インターネットの歴史とコンテナ化
インターネットの歴史にはじまり、Webの使われる用途が変化してきたこと、それに伴って巨大化したWebサービスをどのようにメンテナンスしていくかが課題となって、コンテナ化に至った経緯が解説されました。
1991年に、世界中の科学者で実験データを共有する目的ではじまったWWW(ワールド・ワイド・ウェブ)は、主に情報発信を目的として用いられていましたが、通販(eコマース)の用途で使われるようになり、その他にもどんどん用途が広がっていきました。
規模の拡大に伴い、1台のサーバーでおこなっていた処理を分散していくWebシステムの三層構造化(Webサーバー・アプリケーションサーバー・データベースサーバー)や、三層構造化されたものを1つのクラスタとして、複数のクラスタを用意してロードバランスさせるなどの手法が用いられ、サーバーの台数は飛躍的に増大していきました。
ここで課題となってくるのが、膨大な台数のサーバーへのアプリケーションのデプロイやOS・ミドルウェア等の保守です。数が増えるほど運用作業の負荷が増し、一部のサーバーで作業がうまくいかないなどの可能性も出てきます。
このようにモノリシック化したシステムを開発・保守しやすくするために登場したアプローチがマイクロサービスであり、マイクロサービス化を実現する1つの技術がコンテナであるということです。
サービス開発側からみたマイクロサービス
LINEでサーバーサイド開発のマネージャーを担当している佐藤氏からは、サービスを作る側からの視点で「Webサービスにとってのマイクロサービス」についての話がありました。
マイクロサービスのメリットとして、「機能ごとのリソースの最適化ができる」ということがあります。例として挙げられた「LINEおみくじ」は、LINEスタンプを購入するとおみくじがもらえるというキャンペーンですが、機能ごとに求められることが違っていたとのことです。
Webアプリケーションは短時間に大量のアクセスが来るという特性があり、ピーク時はとにかく大量のリソースが必要となる一方で、キャンペーンが終わったら数が減らせることなどが要件としてありました。
一方、Event Consumerの方はメッセージを送るという非同期処理であるため、数秒から遅くとも1分程度の遅延は許容されるという観点から、メッセージの量を予測し必要十分なリソースを確保したと説明されました。
また、LINEでは、「マイクロサービスは、よく分かれていて、よく共有されていること」が重要であるという理念のもと開発されているということです。認証・ロギング・モニタリングなどは多くの場面で共通して利用される特性があり、再利用されることを前提として開発されています。一方で、分割してしまうとシステムが複雑化してしまったり処理が難しくなったりするものはまとめるなど、機能ごとに適したマイクロサービス設計をしているとのことでした。
その他、マイクロサービスによって開発の迅速化や個別の改善がしやすくなるといったメリットにも触れられていました。
マイクロサービスが生まれた経緯とアーキテクチャ
ユーザーのマイクロサービス化を支援する一方、Googleは自身もマイクロサービスのビッグユーザーです。Ian氏からは、Googleがマイクロサービス化してきた経緯と、マイクロサービスに適したアーキテクチャとしてのコンテナとKubernetesについての話がありました。
Googleではサービスの拡大につれて、1つの大きなアプリケーションであるモノリシックアプリケーションでは、リソースの最適化ができなかったり、分担が難しく開発のスピードが下がったりするといった問題に直面していたそうです。
そこでアプリケーションを機能ごとに分割し、機能ごとに最適なリソース配分ができ、それぞれの機能がそれぞれにスケールし、細分化による開発のスピードアップを実現したのがマイクロサービスであったとのことです。
このようにアプリケーションごとにリソースを分割するにあたって、共通のサーバーや仮想サーバーよりも管理しやすいインフラとしてコンテナが使われるようになり、コンテナをクラスタとして管理できるしくみとしてKubernetesが生まれたという説明がなされました。
コンテナに移行できなかったサービスはあるか?
最後に質疑応答があり、「仮想サーバーからコンテナに移行できなかったケースはあるのですか」という質問が上がっていました。これに対して佐藤氏から「特定のライブラリに依存するアプリケーションや、仮想マシン上で動かさなければいけないサードパーティアプリケーションなどは移行できなかったケースとしてあります」という回答がされていました。
まとめ
大規模化したWebサービスにおいて、リソースの最適化や開発のスピードアップが実現できるマイクロサービス化は非常に有効な手法である一方、アーキテクチャが複雑化する要因ともなるので、設計が重要であることがセッションの中でも触れられていました。さくらのナレッジでも、今後もコンテナ、Kubernetesやマイクロサービス化といったモダンなアーキテクチャの動向や最新情報をお伝えできるよう取り組んでいきたいと思います。