こんにちは、メルカリMicroservices SREチームでEngineering Managerをしている@m4buyaこと渋谷です。
メルカリでは、昨年6月にSREチームの一部をマイナーアップデートし、プロダクトチームに寄り添いSREとしての専門性を活かし信頼性に貢献していくMicroservices SREチームを発足しました。本記事では、そうするに至った背景、何を目指しているのか、これまでに出来たこととまだ出来ていないことを振り返り、今後の展望についてご紹介します。
背景
メルカリでは、2015年よりSREチームを立ち上げ、お客様が安心・安全にメルカリサービスを利用していただくためのシステムの信頼性の維持向上に取り組んできました。年々プロダクトとして成長を続け、トラフィックも増加する一方のメルカリサービスに求められるスケーラビリティ向上において、メルカリSREチームは大きな役割を果たしてきました。一方、近年のシステム上・組織上の状況変化に伴い、SREチームのみではカバーしづらい領域が生まれつつあったことが背景にあります。
その要因としてもっとも大きなものの一つとして挙げられるのが、2018年頃より本格的に始動したマイクロサービスへの移行です。メルカリのサーバーサイドは、サービス開始当初よりPHPで書かれたモノリシックなアプリケーションで構成されていました。しかし今後のエンジニア組織拡大と開発スピードの向上を目指し、自分たちだけでお客様に価値を届けることのできる機能横断型の多数のマイクロサービスチームが多数のマイクロサービスチームが、それぞれ自らのサービスを開発・テスト・運用をする状況を目指すことを決断したのでした。
これによりマイクロサービスの運用に対しチームのオーナーシップが高まったことは大変好ましいことですが、一方でSREチームにとって把握し難い領域も生まれ、時にそういった部分より発生した障害によりサービス全体が機能停止に陥る状況も発生しました。
メルペイはマイクロサービス移行開始後の開発スタートということもあり当初より全面的にマイクロサービスアーキテクチャを採用しています。メルペイは金融サービスであるという性質上、メルカリよりも高いレベルで信頼性・機密性が求められます。それゆえSREチームをマイクロサービス体制に沿った形で組織しており、マイクロサービスチームは必要に応じSREチームから運用上のサポートを得ることができました。
ここがメルカリと状況が異なる点で、メルカリにおいてはマイクロサービス共通の基盤部分を開発・提供するPlatformチームがマイクロサービスチームの相談相手となっていました。しかし、あくまで基盤となるインフラやツールの提供者という立ち位置であり、マイクロサービスチーム特有の事情に合わせたサポートはなかなか行いづらい状況にありました。
こういった状況のもと、メルカリ・メルペイを横断した基盤チームの再編が行われることとなり、それに合わせてこの課題を改善できるような新たなチームを立ち上げることになりました。
解決しようとしている課題
漠然とした課題感をさらに掘り下げ検討を加えることで、解決しようとする課題を次のように定式化しました。
マイクロサービスの運用にまで十分手が回っていない
前述の通り、マイクロサービスチームはサービスを自ら開発・テスト・運用する機能横断的なチームとして組成されています。これはチーム外への依存を減らしアジリティを高めるために不可欠なことです。ですが、既存のバックエンドアプリケーション開発者が中心となり組織されたマイクロサービスチームは、プロダクトに求められる機能の開発に追われがちであり、システムの中長期的な運用に対し十分な投資ができている状態ではないことが多いです。
システムの開発に高い専門性が必要であるのと同様に、システムを安定して運用させることもまた、高い専門性を必要とします。運用において多くの経験を積み、アプリケーションよりも下のレイヤについての知識を多く持つSREが個別のマイクロサービスをサポートできる体制を作ることは、プロダクト全体としての信頼性を底上げしていくために不可欠と考えました。
サポートを受けるにあたっての敷居が高く、またマイクロサービス個別の事情を踏まえたサポートが欲しい
マイクロサービスチームを対象に行ったアンケートでは「サポートしてもらうたびに背景等を説明する必要があるので、日頃から相談先となっておりある程度情報を共有出来ている人がいると話が早い」「チーム付きのSREの方がいると、初心者質問でも気軽に聞きやすくてうれしい」といった声が寄せられており、マイクロサービスチームと日常的に一緒に仕事をするような距離感からサポートが提供できれば、より効果的なものにできると考えました。
また、メルカリの各マイクロサービスはPlatformチームが構築したクラウドインフラ基盤・ツールキットのもとで構築されており、マイクロサービスチームは必要に応じPlatformチームより技術面でのサポートを得ることができます。しかし、Platformチームはあくまで多くのマイクロサービスに共通した基盤を開発し提供する立場であり、そのミッションは問題をより一般化した形で解決する色合いが濃くなります。継続的にマイクロサービスチームの状況を追いかけ、そのコンテキストやドメイン知識を踏まえたサポートを行えるとよさそうです。
マイクロサービス基盤をより効果的に活用するためのサポートがもっと欲しい
マイクロサービスチームの本業は、当然ながらマイクロサービスを通じお客様にとっての価値提供を行うことにあります。Platformチームはその目的達成を補助するためにマイクロサービス基盤やその構成要素に精通せずとも利用できる使いやすい基盤を作るのが本業と言えます。とはいえマイクロサービスチームは実際の運用場面において難度の高い問題に遭遇したり、あるいは現状が本当にベストプラクティスに沿っているのか、見落としているものはないかといった不安を持つこともあるようです。同アンケートにおいてはKubenetesやDatadogといったマイクロサービス基盤の構成要素を利用する上でのサポートを求める声が多かったです。
以上のような課題を解消するために、Embedded SREとしてマイクロサービスチームとともにサービスの信頼性を改善できるSREチームを新たに組織するのが効果的ではないか、との結論に至りました。
Embedded SREとは
SREチームのあり方の一つで、個々のSREがプロダクトチームに「埋め込まれ」、ひとつのチームとして一体となり開発・運用を担っていくスタイルを指しています。SREチームの類型を示したこちらの記事「The Many Shapes of Site Reliability Engineering」が大変わかりやすく説明しているので、こちらの分類にそって要約します。
GoogleモデルのSRE
専任のSREチームがプロダクトの運用に責任を持つ。機能開発チームは別に存在するが、信頼性が不十分であれば機能開発チームにオンコール参加を求めるなどの方法を通じ信頼性のバランスを図っていく
Center of PracticeとしてのSRE
ひとつに集約されたSREチームが信頼性向上を推進し、そのためのツールを開発提供する。オンコールの範囲はそういったツールの領域に限定される
Embedded SRE
SREは職能横断的なプロダクトチームの一員として割り当てられ、プロダクトチームがサービスにとって必要な信頼性・スケーラビリティを維持することを手助けする。プロダクトチームとともにオンコールを担う
メルカリにおいて、Platformチームが担っているのは上記のうち「Center of PracticeとしてのSRE」であると考えています。そのポジションは、メルカリがマイクロサービスという技術的チャレンジを行っていく上で最新のテクノロジーを活用し、ベストプラクティスを打ち立てるために必要不可欠であったし、今後も大きな意味を持ち続けることは明らかです。その上で、それではカバーしきれないプロダクトチームの内側の領域をカバーできるEmbedded SREが存在することで、より解像度高く運用現場の内情を把握しそれをPlatformチームにフィードバックして改善していくサイクルが作れるのではないかと考えました。
ゴール
チームを新たに立ち上げるにあたり、チームとしてどうなりたいか、何を求め何をしていくのかコンセンサスが取れた状態を作ることは大変重要です。そこで周囲からの勧めもあり、アジャイル開発においてよく使われるインセプションデッキを整備しました。これは
- プロジェクトの背景
- プロジェクトが目指したいゴール
- プロジェクトが顧客にとってどんな価値を持っているのか
といった、プロジェクトを進めていく上で必要となる全体像を一つの資料にまとめた形式を取ります。マイクロサービスチームによっては英語話者の比重が大きく日常的に英語を利用するチームもある状況を踏まえ、英訳を併記しています。
「チームの根幹に関わる理由」は次のように定義しています。
メルカリJPではマイクロサービスチームに運用上のオーナーシップが大きく委ねられているが、実際の運用場面における専門性を要する課題解決や共通の知見を共有し、プロダクト全体を通してチームを横断し信頼性向上に取り組んでいくことでより大きな価値を提供できると考えられる。
Microservices SREはそのような状況を解消し、マイクロサービスチームがプロセスとしてのSREを実践してゆくことをリードする。また、信頼性に対する健全なカルチャーを醸成することでチームの枠を超え組織に対するスケーラブルな形での貢献を行っていく。
SREとはソフトウェアエンジニアリングの方法論をシステム運用に適用することで、ソフトウェア開発ライフサイクル全体としての最適化を実現することを目指す営みであり、プロセスやカルチャーについてのエンジニアリングを伴う。Microservices SREはSREとしてのベストプラクティスに対し理解を示しつつも、状況に合わせ柔軟に試行し変化していくことでメルカリにおけるマイクロサービス開発に最適なSREのあり方を追求する。
この目的を達成するために、Embedded SREとして特定のチームに深く関わりを持つところから始めつつ、徐々に様々なチームにEmbedded先を変え、多くのチームをローテーションしていくことでカルチャーの浸透を目指すこととなりました。
実際にやってみたこと
もともとメルカリSREのサブチームの一つであった「SRE Customer」チームを改め「Microservices SRE」チームとし、Embedded SREとしての体制を整えていく形を取りました。SRE Customerチームはメルカリコアシステムのアプリケーション寄り部分の運用を担ってきたチームであり、メルカリシステムの歴史的文脈を踏まえた幅広い知見を持っている点が強みです。一方、モノリシックなPHPアプリケーション、およびそのインフラを担ってきた来歴から、現在のPlatformで採用されている技術スタックの多くについてはキャッチアップが必要になる点がややチャレンジングであろうと見ていました。
Embedded SREとしてのジョイン先マイクロサービスチームの選定にあたっては、次のような方針のもとで行いました。
- 全く新しい取り組みとなるため、リスクとなる要因はなるべく減らす
- 既にSREチームとの関わりがあり関係性が確立されているチームがあればそこを優先する
- マイクロサービスの技術要素についてはキャッチアップからのスタートとなるため、その点について加入先チームの協力を得られること
- 信頼性や運用負荷の面で課題を感じており、この取り組みに対し労力をかけるモチベーションを持つチームであること
エンジニアリングマネージャーである自分自身もEmbedded SREの一人としてマイクロサービスチームにジョインしています。マネージャーとして動く必要のある分マイクロサービスチームに対して割くことのできる時間は減りますが、こういった新しい取り組みにおいては自分の目で現場を見て、実際に手を動かすことでチームとしての動き方にフィードバックしてゆけることが重要と考えました。
やってみてわかったこと
今年の6月にチームとして始動し、徐々に活動の規模を広げ約半年が経過しました。
このEmbedded SREの取り組みを始めるにあたり懸念としてあったのが、「本当に他のチームに乗り込んでいっていきなりバリューを出していけるのか?」という点です。われわれのチームがSREとして経験を積んでいるとはいえ、扱うのは技術スタックの異なる未知のシステムでです。それゆえ、「マイクロサービスチームにとって意味のある貢献」を行うのはかなりハードルが高いのではないかと感じていました。しかし実際に取り組んでみた結果、これは杞憂で比較的早期の段階からモニタリングやデータストアといった分野を中心に着実な成果を上げることができました。結果として、3ヶ月が経過した時点でジョイン先のチームを対象に行ったSurveyにおいても、Microservices SREの活動への満足度について5段階中で平均4.63の評価を得ることができるなど、十分評価に値する活動を行えたと考えています。実際にEmbedded SREとしてどのような技術的改善に取り組んだのか?については別の機会に紹介できればと考えています。
一方で、課題を感じている部分もあります。前述したようにEmbed先チームをローテーションすることにより支援対象をより広げていく必要があるわけですが、一度Embedded SREとしてジョインしたチームからいつ抜けるかを見極めることがなかなか難しいと考えています。この点についてはEmbed先チームとの間であらかじめどのような状態をゴールとして目指すかを合意した上で協業を始めることが有効なのではないかと考えています。
これから
Microservices SREチームはゴールとしてプロダクト全体の信頼性向上を通じユーザー体験にポジティブなインパクトを与えることを目指しており、そこに至るまでの道のりはまだ遠い段階です。
個々のチームをいかに支援できるかはある程度確立できつつあります。次のステップとして複数のマイクロサービスチームにおいて共通する課題をいかに見出し解決してゆけるかにフォーカスしたいと考えています。そのための手段として、特定のサービスで発生した問題の解決策を横展開していける仕組み作りや、運用上の共通の課題を解決できるツールの開発整備といった、小さな力であっても大きなインパクトを発揮し得るような施策に注力していきたいと考えています。
しかし、われわれはチームの規模もまだまだ小さく、そこに労力を投じることのできる余力が十分にあるわけではありません。そこでメルカリMicroservices SREチームではこういったミッションに共感し、われわれと一緒に最強のマイクロサービス運用を目指してくださる方を超積極大募集中です。
もしご興味を持っていただけたら、まずは転職意向など問わずカジュアルにお話させていただだくことも歓迎ですのでお気軽に@m4buyaまでお声をおかけください。ご連絡お待ちしております!