2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
リンクをコピー
記事をブックマーク
中尾俊介氏:それでは「モバイルアプリのSLI/SLOについて」の発表を始めます。よろしくお願いします。
(会場拍手)
ありがとうございます。(スライドを示して)まず簡単に自己紹介をします。合同会社DMM.com プラットフォーム開発本部でiOSエンジニアをしている、中尾と申します。「Twitter(現X)」などのSNSではnaoという名前でやっています。DMMでは「DMMポイントクラブ」というアプリのiOS開発をリードしています。先日あったtry! Swift TokyoではDMMのブースの運営をしていました。
今回のイベントのビラをその時に配りまくっていたので、try! Swift Tokyoで今回のこのDMM.swift #2のことを知って来てくださった方がいたら、とてもうれしく思います。
(スライドを示して)今回私の発表で話すのは、モバイルアプリ開発におけるサービスのモニタリングで、特にSLI/SLOについてモバイルアプリ開発ではどうやるのがいいんだっけ? という話をこちらの3本立てで話していきます。
最初にSLI/SLOって何だっけ?というところを確認します。次にモバイルアプリのサービスレベルについてどう捉えていくかを考えていきます。最後にモバイルアプリの信頼性を確保するためにどうしたらいいのかという流れで話していきます。
まずはSLI/SLOについての確認からやっていきます。SLI/SLOという単語や概要を聞いたことがある方も多いんじゃないかなと思っていますが、モバイルエンジニアが関わる世界ではあまり馴染みがなかったりすると思うので、あらためて、どういうものなのかの定義の確認をしていきます。
(スライドを示して)SLI/SLOは、Googleが提唱するSite Reliability Engineering、通称SREという概論の中で出てくるサービスを正しく管理するための指標を指しています。「SLI/SLOをある程度知っているよ」という方だったら、だいたい本番環境にデプロイされているサービスの品質や状態をモニタリングするためのものという認識を持っているんじゃないかなと思っています。
そのSLI/SLOの一方でSite Reliability Engineering、SREについてはモバイルアプリ開発の世界であまり話されていないと思うので、あまりピンとこないかなと思っています。SREはだいたいインフラ、クラウドまわりのバックエンドの世界でよく出てくるテーマだとは思いますが、これの中身や歴史を深掘りして見ていくと、実はモバイルアプリ開発でも扱えるテーマなんですよね。私はそう思っています。
なので今回の話は、SLI/SLOを始めとして、SREとは何なのか。また、その歴史や成り立ち。そしてそれをどうモバイルアプリ開発に応用できるのかを話していきます。
さっそく、SREとは何なのかというところですが、SREはDevOpsを実現するためのGoogleが提唱した具体的なプラクティスです。DevOpsとSREの関係は、アジャイルとスクラムの関係に似ているかなと思っています。具体的には、その方針や思想と、それを実現するための具体的な手段という関係に近いかなと思っています。
これに関して、Googleがわかりやすい表現を出してくれているので、次のスライドで示します。
(スライドを示して)その表現というのが、class SRE implements DevOpsですね。SREはDevOpsというインターフェイスの実装であるということですよね。プログラマティックな表現かなと思います。ここに貼っているYouTube動画で詳細な話はDevOpsとSREの関係をGoogleのエンジニアが詳しく話しているので、詳細はそちらに譲りますが、興味がある方は見てみるといいかなと思います。
今言ったとおり、SREとDevOpsの関係は規約とその実装の関係なので、誕生した時系列としてはDevOpsのほうが先になります。DevOpsという言葉は、一昔前に流行ったと思うので「知っているよ」という方もいるかもしれません。DevOpsが生まれた歴史的なところを話すと、かつては企業はソフトウェアを運用するために、開発者と運用者を組織体制として分けていました。
この頃はまだクラウドの技術が一般的ではなかった時代で、2000年代とか、それ以前の時代の話になります。今ではクラウド技術が発達して、自社でマシンを調達してオンプレとしてサーバーを立てて運用してみたいな、そのへんの運用作業をする必要が、クラウドが浸透したことによってなくなってきているので、開発者が運用もカバーできる時代になってきています。
ですが、それまではソフトウェアの開発のスキルを持つ人は貴重な存在だったので、その人たちがソフトウェアを作ってそれ以外がマニュアルに沿ってソフトウェアを運用する構図だったんじゃないかなと認識しています。こうした開発者と運用者を分かつ組織体制は、責任がそれぞれの組織で分割されるので衝突を生んだんですよね。
開発者は機能のリリースによる価値提供をもって、ソフトウェアのビジネス価値の向上に責任を持つので、作ったものを早くリリースしたいという思いがあります。一方で運用者はソフトウェアの運用を任されているので、ソフトウェアを安定して動かし続けるところに責任を持っています。機能のリリースにはソフトウェアの変更が加わるわけなので、その動作や品質には影響が当然出てきます。
なので運用者としてはリリースされるものの品質を保証した上でリリースしたいというのが常だと思うんですよね。ですが、それには当然品質の保証に時間はかかるので、運用者は開発者の希望するスピードに追従できず否定するみたいな状況が生まれていました。これを俯瞰して見ると、実装は速いけどリリースで開発速度にブレーキをかけているという構図になっているのがわかるかなと思います。
(スライドを示して)俯瞰して見ると、開発者の持つ価値の提供という責任と、運用者の持つ信頼性の担保という責任は、それぞれ目指すミッションは違うのですが、それぞれのミッションの行きつく先は同じところのはずなんですよね。作った製品のビジネス価値を向上させるところが共通の目的として存在しているはずです。
そこの価値の提供と信頼性の担保は対立するものじゃなくてビジネスの価値の向上という共通のミッションを目指して、DevとOpsはお互いに協調しようという方針を示したのがDevOpsになります。これがDevOpsという概念であり、実践であり、文化かなと思っています。
コラム的な話をすると、DevOpsの成り立ちはけっこう曖昧だと思っていて、具体的にどこで誰がその方針を定義して宣言したものなのかは、私の知る限りだと明確にはないと思っています。アジャイルでいう、アジャイルソフトウェア宣言みたいなものがDevOpsにはないんじゃないかなと思っています。
2009年にベルギーで初めて開催されたDevOps Daysというイベントで、「DevOps」というワードが初めて出てきて、それをきっかけに普及したみたいです。具体的にはそのDevOpsという定義や原則は、そこから生まれたDevOpsという方針を支持する人がいくつか出しているみたいな感じの認識です。そのへんに詳しい方がいたら、後の懇親会とかでお話を聞ければなと思っています。
ここでちょっと話を戻しますが、DevOpsのエッセンスである価値提供と信頼性の担保の協調と、それによって達成する製品のビジネス価値の向上はモバイルアプリにおいてもソフトウェアなので同じだと思っています。なので、モバイルアプリ開発の世界でDevOpsやSREの話は出てくることは少ないのですが、私個人としては重要な話かなと思っています。
今回のイベントに参加いただいている方々はモバイルアプリ開発、特にiOS開発に携わっている方が多いと思います。ぜひその自分の携わっているアプリについて次のことを考えてみていただきたいと思います。
開発しているアプリの開発速度を維持できていますか?バグや不具合対応に押されて機能開発が遅くなったりしていませんか?というところですね。
開発しているアプリの品質は適切に管理できていますか? 本番に上がっているアプリの信頼性をモニタリングできていますか?というところです。そのへんを正しく監視・計測するための方法がSREだと思っています。特にSLI/SLOは、SREの中のコアとなるプラクティスだということが、この章で伝えたいことです。
(スライドを示して)補足として、SREの中で具体的に語られているプラクティスの全体像を、ここで載せておこうと思います。DevOpsは先ほど話したとおり、具体的な原則は存在しなくて、DevとOpsが協調しようという運動のようなものです。このDevOpsの協調のエッセンスをどう実現するかをGoogleが解釈したのが、その真ん中に書いてある5つになります。
具体的にここに書いてあることをそのまま読み上げると、組織のサイロを削減しよう、エラー発生を普通と捉えよう、段階的変更を実施しよう、ツールと自動化を活用しよう、すべてを測定しようですね。これを具体的にどんなことをすればいいのかという実践のところは、それぞれSREの中で対応する実践が定義されています。
組織のサイロの削減に関しては、所有権の共有ですね。エラー発生を普通と捉えるのは、エラーバジェットによる許容。段階的変更を実施するに関しては、カナリアリリース。ツールと自動化の活用に関しては、手作業の自動化。すべてを測定することに関しては、苦労と信頼性の計測になります。今回はこの中でもモニタリングとオブザーバビリティに関する話なので、ハイライトしている2つにフォーカスして、次から話をしていきます。
ここまでの話をいったんまとめると、DevOpsとSREは方針とそのプラクティスの関係です。その目的は迅速に価値をエンドユーザーに届けるためにSREのプラクティスを実践しようというところですね。今回の話でいくと、SLI/SLOを用いてどこまでなら失敗を許容できるかを定めようということをお伝えしました。
先ほどチラッとワードが出ましたが、エラーバジェットもSLI/SLOに密接する重要な概念になるのですが、そのへんまで話すと時間が足りないので、今回は割愛します。
(次回へつづく)
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