2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
メルペイの信頼性へのチャレンジ(全1記事)
リンクをコピー
記事をブックマーク
高木潤一郎氏:それでは「メルペイの信頼性へのチャレンジ」というタイトルで発表します。私は高木潤一郎という名前で、Twitterは@tjunというIDでやっています。
SREとしてメルペイに入社して、最近はエンジニアリングマネージャーもやっています。
今日は信頼性の話をしようかなと思っていまして、アジェンダを考えるにあたってなにかいい話をしてくれと言われたので、信頼性というテーマでお話しようと思います。
まず、今日のテーマ「信頼性とは何か」を考えてみました。
メルペイはご存じのとおり金融サービスですので、信頼性がとても大事です。例えばお店で決済しようとしたときに使えないとか、その決済が10秒かかるといった体験が続くと、使ってもらえないサービスになってしまいます。
なので、いつでも使えて当たり前ですし、そうやって買い物したときに残高が合っていないと、それも使ってもらえないので、常にちゃんと正しく動く、そういう高い信頼性がメルペイに求められています。
ですので、今日のテーマであるBold Challengeを考えたときに、目指すところは信頼性100パーセントなのかと考えるわけです。ですが、それって実は正しいゴールではないかなと考えています。
正しいゴールとは何かと考えたとき、信頼性をつくるには時間とお金がかかります。今動いているメルペイにさわらなければ信頼性が高い状態を維持できるかもしれませんが、今後我々は信頼性以外の価値を提供していかなければならないので、そういったところで機能を追加したり、サービス追加したり、そういった変化やチャレンジをやっていかなければならないと考えています。
一方で、「信頼性上げましょう、Reliability上げましょう」というと、いろいろなリリースのプロセスを厳しくしたり、テストをいっぱい書くようにしたり、いろいろな検証を増やしたり、そういったことをガチガチにすれば信頼性を上げることは可能です。
ただ、そういうことをガチガチにしていくと、開発速度がどんどん落ちてしまいます。信頼性を高めるという目標も大事なんですが、そのバランスをどう見ていくかが非常に大事かなと思っています。
こうやって高い信頼性を考えるにあたってどんなステップがあるか考えてみると、ここに書いてあるような3つのステップに分かれるのかなと思います。
最初に、目指す信頼性についてです。どんな信頼性をターゲットにして、なにを目指していくのか、ゴールを決める。次に、そのゴールが達成できているのか・できていないのかをちゃんと見る。最後に、一度達成したゴールを常に達成し続けるような仕組みを作って、新機能を追加してもその信頼性を維持する。そういった3ステップがあると考えています。
この最初のステップにおいて、まずは目指す信頼性を定義するところで使っている仕組みとして「SLO(Service Level Objective)」というものがあります。これはSREの本にも出てくる考え方です。SLOとは何かというと、サービスが実現すべき数値の目標みたいなものです。
例えば我々のサービスで決めるとしたら、例えばiD決済のリクエストが99.99パーセントは成功しますよという目標になります。まれになんらかの理由で失敗してしまうけど、 失敗率が0.01パーセント以内なら許容する。そういった目標を決める。
こうやって目標を決めることの何がいいかというと、例えばSLOを99.99パーセントとするとしましょう。そうなったときに、我々は信頼性を実現できているのか、あるいはできていないのか。目的としているお客様の体験を実現できているのか、あるいは実現できていないのか。そういった判断が可能になります。
なので、もし目的とするSLOを達成できていないのであれば、新機能の開発を止めてでも今のサービスの改善をすべきですし、逆に今達成しているのであれば、改善はそこまでしなくても、新しいチャレンジがまたできるよねと。そういったチャレンジや改善の基準となるような目標。それがSLOなのかなと思います。
なので最初に話したように、単純に高い目標を設定すればいいというわけではありません。適切な目標を決めることで、次にチャレンジをするためのエンジニアリングのリソースですとか、チャンスをつくる基準なのかなと思っています。
そうした信頼性を誰が実現するのかということを考えたとき、僕のチームであるSREはもちろんその役割を持ってはいますが、とはいえ、SREが実際のアプリケーションのコードを書くわけではないですし、そのバグを直せるわけでもありません。私たちはあくまで基準を作ったり仕組みを作ったりするサポートはしますが、SREだけでは信頼性を実現できません。
では、すべてのエンジニアが信頼性を考えればいいのかというと、実はそうでもなくて。先ほど言ったように、信頼性はバランスですので、組織として、我々はどこで信頼性を目指すのかを決める必要があります。
先ほど紹介したSLOも、単純にエンジニアだけが決めているわけではなくて、メルペイではPMとテックリードが話し合って決めています。PMとしてはお客様の体験を上げたいのでこういう値を目指したいけど、技術的にはこれだと難しいとか、そういったいろいろな制約があるなかで決めていくものですので、そういう意味でもエンジニアだけで信頼性をつくるわけではなく、組織として合意して決めていくものかなと考えています。
ここまでは、信頼性をどうやって我々が考えてきたかというところを紹介しました。次は、メルペイをリリースするにあたってどんなことをやってきたかを紹介したいと思います。
まず簡単に、自分が入社してから、あるいはSREチームとしてどんなことをやってきたかを紹介します。僕が入社したのは2018年の4月です。メルペイには、最初のSREとして入りました。
最初、SRE1人だし、とくにできることもないので、入社1ヶ月ぐらいでいきなりメルカリのマイクロサービスプラットフォームチームに混じってプラットフォームを良くしていく仕事をしていました。
プラットフォームとしてメルペイに必要な機能を入れたりといったことに取り組み、夏ぐらいから、メルペイのリリースに向けて信頼性をどう考えていくか、そんなことを考え始めました。
例えば、必要なインフラを作ったりリリースや運用のルールや仕組みを作ったり、リリースに向けて何が必要か、そんなことを考えていました。その頃はSREも僕だけでなく人も増えて少しずついろんなことをやれるようになって、リリースに向けた準備を進めてきました。
そんな感じでやってましたが、自分がメルペイに入社してリリースを考えるにあたって、いろいろ難しいなと思った点があります。
メルペイに入る前は自分は新規事業など小さなサービスのリリースを経験してきました。最初は使う人がそんなにいないので、まずは出してみて出しながらちょっとずつ改善していけばいいかなというサービスが多かったんですが、メルペイの場合は、いきなりメルカリアプリにメルペイ用のタブができるので、リリース直後から、かなりの数のリクエストが来ます。
しかも金融サービスなので「出してみたらうまく動きませんでした。ごめんなさい」が許されない部分もあります。それに加えて、メルカリとつないでいく、あるいはメルカリからの機能移行もあるという複雑性があって、かなりリリースを難しく考えていました。
そのほかにも技術的なチャレンジがありました。先ほどdeeeetさんの発表にもあったように、マイクロサービスアーキテクチャの上で金融サービスを作らなければいけません。マイクロサービスアーキテクチャにすることでが良い点もいろいろありますが、逆にマイクロサービスならではの難しいところも結構あったかなと思っています。
ここに書いてあるようにいろいろ考えることがあって、それぞれメルカリのテックブログなどで紹介してはいるんですが、今日のテーマであるマイクロサービスの信頼性、そこをSREとしてどう考えていくのか、去年の夏頃から考えて動いていました。
SREがやってきたこと、あるいはSREに近いチームとかそういうチームを巻き込んでやってきたこととして、大きく分けてこの3つがあるかなと思っています。
1つは共通のインフラの構築です。マイクロサービスといってもいろんなサービスがありますが、とはいえインフラとして共通部分もあるので、そこをちゃんと整えて決済の基盤として耐えられるものにしていく。まずそういうことをやっていました。
次に、最初に紹介したSLOのほかにも、リリースのためのフローを整備したり、あるいは障害が起きたあとの対応フローを整理したり。あとはリリースに向けていろんな設定をレビューしたりなど、マイクロサービスの開発運用のサポートもやってきました。
SREだけでなくアーキテクトチームと一緒にやってますし、SLOを組織全体に落とすときにはVPoEのhidekさんの力を借りたり、いろいろなチームの協力を求めながら、信頼性をどうやって作っていくか、リリースに向けて考えてきました。
去年の年末から1月にかけていろいろな大変なことがあったんですが、なんとか2月に無事にリリースができたので、めでたしめでたしという感じです。
今までの話は、なんとかリリースできていい話っぽい感じなんですが、とはいえ、そんなに世の中甘くありません。リリースしてみたらやっぱり問題はいろいろ起きました。
メルペイのサービス運用、理想的にはクラウドを使ってフルマネージドなデータストアを使っていますし、Kubernetesは全部オートスケールしてオートヒーリングするので放っておいても運用しなくてもよねと。エンジニアも優秀ですし、テストやQAもかなりちゃんとやっているので、そんなに問題は起きないでしょうと思うかもしれません。
あとは、メルペイはいろいろなパートナーサービスと連携していますが、我々よりもちゃんとした会社が提供している実績あるシステムなので、「まぁ大丈夫でしょう」という感じで最初は考えていました。
でも、実際運用してみるとそんなことはなく、クラウドにももちろん大小いろんな問題が常に起きますし、インフラの問題で自分たちにどうしようもできないこともあるし、あるいは設定をミスっていることもあるし、なにかツールのバグを踏んでいるということもあります。
また、自分たちのコードが期待どおりに動いていないこともあれば、使っているライブラリで予期せぬ問題が起きていることもあります。パートナーのサービスももちろん障害が起きることもあります。
もちろんあらかじめわかっていたことでして、ちゃんと準備しても障害は起きるよねと。そんな前提で開発や運用の仕組みを整えていくことも大事かなと思っています。
大きく分けて、2つやっていることがあります。1つはObservabilityです。ちゃんと自分たちのシステムやサービスがどんな状態なのかを見えるようにして、なにか大きな問題があったら気づけるようにする。
あとはインシデントが起きたときにも、どうやって早く気づいてそれを対応するか。それはもちろんエンジニアがバグを直すだけではなく、お客様にコミュニケーションすることもあれば、パートナーとのコミュニケーションもある。そういったいろいろなフローが必要です。
そういったところをあらかじめ準備しつつ、今も改善をしながら信頼性について考えています。
今話したとおり、信頼性はサービスをリリースしてOKというものではなく、リリースしてからがむしろスタートみたいなところです。サービスを運用して改善していくなかでだんだん高めていく、そんな感じのものかなと考えています。
最後に今後のChallengeについて話します。今までメルペイのリリースまでどんなことをやってきたか駆け足で紹介して来ましたが、今後は我々がどんなチャレンジをしていくのか考えてみました。
最初の話に戻りまして、信頼性って結局何だったのかを考えてみると、信頼性とは、メルペイが提供する機能の中で、すべてのお客様が使う一番大事な機能かなと僕は考えています。なので、SREは裏方のように見えて、実は大事な機能をやっているチームでもあるなと思っています。
最初に3つステップを紹介しました。
SLOで信頼性を定義するという部分はすでにできていて、2つ目の実現できているかどうかを確認するというところもメトリクスを取れるようなダッシュボードを用意して、一応確認できるようになっています。ただ、今後信頼性を達成し続けて、さらにより高い信頼性をつくり続けるためにはどうすればいいか?というところがまだできていないところです。
最初の絵に戻って、VelocityとReliabilityの図がありました。Reliabilityを今後も高めていくには、開発速度をより遅くしてReliabilityに時間を割けばいいという考え方ももしかしたらあるかもしれませんが、メルペイは今後もいろいろな機能をどんどん出し続けて、どんどんチャレンジして新たなサービスを提供して、新たなお客様を獲得していくというフェーズにあるので、Reliabilityばかりやっているわけにはいかないというのがあります。
なので、欲張りなんですけれども、信頼性ももちろん高めたいんですが、新たなサービスや新たな価値もどんどん提供していきたい。
そういったなかで、我々の新しいチャレンジって何かなと考えると、SREもそうですが、いかにソフトウェアの力を使ってより少ないコストで高い信頼性を実現するか、そこがおもしろいチャレンジなんじゃないかなと思います。
共通基盤を整えるのも1つですし、例えばサービスメッシュなどの技術を試して、そこでより安定した基盤を作る、それがもしかしたらより高い信頼性につながるかもしれないですし、あるいは、各マイクロサービスのチームたちが今より少ない運用コストで運用を改善できるような仕組みを作ったり。そういったソフトウェアでの自動化を入れていくことで、より高い信頼性を少ないコストで実現できるんじゃないか考えています。
なので、我々のSREを中心としたNext Bold Challengeとしては、信頼性を達成し続ける仕組みを作って、その上でメルペイの新たなチャレンジを加速できればいいのかなと考えています。
発表は以上になります。ありがとうございました。
(会場拍手)
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05