2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
リンクをコピー
記事をブックマーク
takonomura氏:ここまで、どういうふうにして時間を効率的に使っていくかという話をしたのですが、ここからは本番で失敗しないためにどういうことを考えているか、みたいな話をします。
というのも、最初にソロでやっていく上でのデメリットとして「視点が少ない」ということを挙げたんですが、ソロだとほかの3人チームとかよりもちょっとしたミスが命取りになりやすいと個人的には思っています。
なので、そういうものをいかに解決していくかというか、そういうことにならないようにしていくかをいろいろと考える必要があります。
その上ですごく重要なこととして、競技時間中は冷静じゃなくなるんですよね。自分は毎年そうなのですが、ソロで参加していると誰かに相談することはまったくできないので、時間の制限もあって、どんどん冷静じゃなくなります。そうなってくるとどんどんミスもしやすくなってしまって、どんどん悪循環に陥ってしまうと個人的には思っています。
ふだんの開発はそういうことになることはあまりない気がしていて。今までの自分の感覚的に、障害対応をしている時に近いのかなと思ったりします。
時間の制限があって「早く直さなきゃ」と思っているような障害対応みたいな状況と、ISUCONの競技時間中は、なにか近いものがあるんじゃないかなと思っていて、そういうところからノウハウが活かせるんじゃないかなと考えています。
できる限り冷静に保つように努力をするために、深呼吸をするとかいろいろあると思うのですが、深呼吸をしてもどうしてもいつもより冷静じゃないことはあると思うので、そういった時でも本来の自分のパフォーマンスを発揮できるようにいろいろと準備しておく必要があるかなと思います。
そのために1つやれることとして思っているのは、さまざまなプランを考えておくことだと思います。想定外のことは、パニックになったり冷静じゃなくなる要因の1つだと思っています。
例えば過去のISUCONであった話だと、「nginx」じゃないからアクセスログの設定方法が違って、うまくアクセスログの集計ができなくて困っちゃうということがあったり、MySQLだと思ったらSQLiteも使っているせいでスロークエリログが吐けないとか、いろいろあると思うんですよね。
そうなると、どうしたらいいかわからなくなって、なにも手がつけられなくなるみたいなことがあると思いますが、「そういうのがあるかもしれない」という可能性だけでも考えておくのは、すごく重要だと思います。
なので、例えばスロークエリログが吐けなかった場合には、なんとかして近いログをアプリケーション側から吐けるような方法を考えておくとかをしておけば、MySQLでもSQLiteでもPostgreSQLでも、なにが来てもある程度近いものが取れるようにしておくという考え方ができると思うんですよね。
すべてに対して準備をしておくのはなかなか難しいと思うし、不可能だとは思いますが、いろいろと考えておいて、「こういうふうにしたらそういう場合でもどうにかなるんじゃないか」みたいなことを考えておくと、気持ちが楽になって、本番でできるかぎり冷静な対処ができるようになる要因なんじゃないかなと思っています。
次に重要だと思っているのが、メモを用意することです。これはISUCON10で自分が優勝した時に一番気をつけていたことかなとも思います。「冷静じゃない時でもメモのとおりに動けばなんとかなる」みたいなレベルのものを用意しておくことが重要かなと思っています。
このあたりは障害対応用にSREとかでRunbookを書いておく文化があるらしいのですが、そういうのとかからも着想を得ています。「とにかく手順どおりに進めばなんとかなっていくように」ということをいろいろと考えていたりします。
冷静じゃない時に読むことを前提に書くので、「ふだんできることもできなくなっている時に読むもの」と思って書いています。なので、当たり前のことも全部書きます。
例えば、「ベンチマーク後に計測結果を見ましょう」。「そりゃそうでしょう」と思うと思いますが、冷静じゃないとそういうことができなくなるので、全部書いておきます。
あとは、よくあるミスも全部まとめておくようにしています。例えばGo言語だと、mapの初期化を忘れて、makeを忘れたせいでnilでpanicを起こすみたいなことが、けっこう自分はやりがちだったんですよね。
そういうのはエラーが出ちゃえばすぐ直せるので難しい問題じゃないのですが、そういうのも書いておくことで、冷静じゃない時にそれを見ながらコードを書けば、ちょっとでも気を配れるようになって、ミスを減らすことができ、時間の短縮にもつながると思うので、こういうことがけっこう重要になってくるんじゃないかなと思っています。
そういうメモをいろいろと書いておいて、競技時間中はとりあえずメモを読むことを癖にしました。ベンチマークを流し始めた瞬間にとりあえずメモを一瞬見てから計測結果を見るようにするとか、本当に細々としたタイミングでとりあえずメモをちらっと見るだけでもけっこう効果があったりするので、そういうのが重要かなと思います。
(スライドを示して)具体的にどういうメモを書いていたかということで、これは一例ですが、自分はやることのチェックリストをいろいろと書いてあります。
事前の準備の部分でも、GitHubのリポジトリを作成したかどうか、レギュレーションを確認したかどうか、Slackに通知やリマインドの設定をしたかどうかみたいなのものを、1個1個チェックボックスをつけながらやるみたいなことをやっています。
競技が始まった初動の部分でも、「SSHの設定をしました」「サーバーの初期セットアップのスクリプトを流しました」「初回のベンチマークを実行しました」「当日のマニュアルを読みました」みたいなことを1個1個チェックボックスをつけながらやることをやっています。
あと、再起動試験はけっこう忘れがちだと思うので、自分は終了1時間前ぐらいのタイミングで、Slackのリマインドを使って「再起動試験しましょうね」ということを流すようにしています。
それが流れたら、チェックリストを基に、サーバーが複数台ある場合は順番を変えながら再起動しても問題がないかとか、再起動した直後にアプリケーションが正常に動いているかという動作チェックをやってみるとかを必ずやるようにしています。
あと書いてあるものとしては、例えばベンチマーク後に確認する項目として、これはけっこう重要だと思っているのですが、当然のように計測結果をいろいろ見るんですが、メトリクスのどこを最初に見るかをいろいろと書いてあります。
例えば、とりあえず最初にエラーログを見て、エラーが出ているんだったらそれを最初に直しましょうとか、CPUの使用率を見て使用率が異常に高かったら、まずデータベースなのかアプリケーションなのかをチェックして、アプリケーションだったらプロファイルを見にいって、というフローみたいな感じにして、なにを見ていけばいいかをまとめておいています。
これは冷静じゃないとそのとおりに見ずにボトルネックを見逃したりするので、けっこう重要かなと思います。
先ほど言った、改善点の優先順位みたいな話もありますね。
あとは改善に使えそうなテクニックとして、「N+1を直しましょう」ということが書いてあったり、並列化できるものは並列化しようとか、キャッシュがどうとかというのも、全部当然のことではあるのですが、当然のことも全部書いておいています。どうやって直そうか悩んだ時は、それらを見るみたいなことをやっていました。
最後にまとめです。もう1回繰り返しにはなるのですが、自分に1番合った戦い方を探すのが本当に大事だと思います。今回発表した内容は、自分がソロで戦う時にどうしたら良かったかという内容なので、人によっていろいろと(合う合わないは)違うとは思いますが、いろいろな人のやり方を参考にしながら、自分に合ったものを探していくのが重要かなと思います。
当日パニックにならないためにも、先ほど言ったようにメモを書いておくとか、いろいろと事前準備をしておくのがすごく重要になってくると思うので、練習とか効率化も含めてやっていきましょう。
みなさん、優勝を目指してがんばりましょうということで、発表を終わりたいと思います。ありがとうございました。
関連タグ:
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