Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
システムの堅牢性
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
kanayannet
September 11, 2023
Programming
350
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
システムの堅牢性
gunma.web #50
kanayannet
September 11, 2023
More Decks by kanayannet
See All by kanayannet
リファクタリング ハーネス
kanayannet
1
150
厳密な定義
kanayannet
0
160
Mcp Training
kanayannet
0
330
MCP で「こいつ動くぞ」
kanayannet
0
200
無関心の谷
kanayannet
0
1.4k
生成AIの使いどころ
kanayannet
0
280
github copilot と 心理的安全性
kanayannet
0
300
FW と ライブラリ の考え方
kanayannet
0
290
TDDと今まで
kanayannet
0
820
Other Decks in Programming
See All in Programming
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
130
クラウドエージェントは、 何がそんなに便利なのか / what makes cloud agents so useful
rkaga
3
560
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3k
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
1k
AIが生成したコードは読むべきか?抽象化設計とコードの品質保証 / abstraction-design-and-quality
minodriven
6
3.1k
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
3
440
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
460
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
970
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
250
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
190
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
ChromeでローカルLLM
ryu1013
0
160
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
540
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Navigating Team Friction
lara
192
16k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
380
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
580
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
420
Game over? The fight for quality and originality in the time of robots
wayneb77
1
310
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
610
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Technical Leadership for Architectural Decision Making
baasie
3
610
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Producing Creativity
orderedlist
PRO
348
41k
Transcript
システムの堅牢性 システムの堅牢性 Gunma.web #50 Gunma.web #50 @kanayannet
前提 前提 堅牢性の話は実はあまりない 主にウィークポイントを把握する話
今回の対象 今回の対象 開発して終わりじゃない方 リリース後から本番だと思っている方 検証大好きな人 稼働し続けるWEB サービスの中身が好きな人
対象外 対象外 100% の精度以外は認めない価値観 開発までしか考えないケース
やろうと思ったきっかけ やろうと思ったきっかけ
WEB+DB PRESS WEB+DB PRESS 休刊 さびしい
これからは これからは
カオスエンジニアリング特集 !! カオスエンジニアリング特集 !! これだ!
カオスエンジニアリング カオスエンジニアリング システムに疑似障害を故意に発生させる どこが予期せぬ異常を起こしたか?把握する 結果、障害に対しての対策が可能になる
具体例 具体例 会員制のBBS 閲覧は誰でも可能 ログインしないと書き込みは不可
構成図 構成図
テストケース テストケース ログインせず 閲覧できる 書き込みできない ログイン後 閲覧できる 書き込みできる
ここまでは普通のテストで試せる ここまでは普通のテストで試せる
RDS( ユーザ情報 ) RDS( ユーザ情報 ) わざと落とす どうなるか?
ありがちな不具合 1 ありがちな不具合 1 ログインしようとしたら... 500 番エラーで何も表示されない
def is_login(sid, token) User.find_by(sid: sid, token: token).present? end
原因 原因 DB 接続できず 接続できなかった場合の処理が全く書いてない 予期せぬエラーで落ちた
ありがちな不具合 2 ありがちな不具合 2 ログインしてないのに 書き込み出来ちゃったw
def is_login(sid, token) ret = true begin ret = User.find_by(sid:
sid, token: token).present? rescue # 握りつぶす! end ret end
原因 原因 RDB が落ちた場合に回避コードは書いてあったが... ログイン成功とみなしていた default: true !! 握りつぶしすぎ!
ありがちな不具合 3 ありがちな不具合 3 全く何も見れない ALL 500 番エラー
class Data def initialize(sid, token) @is_login = self.is_login(sid, token) end
def is_login(sid, token) User.find_by(sid: sid, token: token).present? end def articles Articles.all.order(id: 'desc') end def
原因 原因 ページ閲覧の際にもログイン情報を参照し 接続できない場合の例外処理を書いてなかった
そもそもな発見 そもそもな発見 閲覧のみならユーザ情報 参照するなよw 不必要な処理で裏じゃこっそりサーバ負荷上げてる
なんでカオス? なんでカオス? ここまで来ると解ったと思います。 予期せぬ障害を加えると、ソフトウェアは どういう振る舞いをするか?予想するのは困難である カオス的な振るまい
落ちない仕組みにすればいいのでは? 落ちない仕組みにすればいいのでは? 落ちずらい仕組みは目指せると思う マルチAZ フルマネージドなサービス: Aurora など
100% 落ちないはあり得ない 100% 落ちないはあり得ない
お金の問題もある お金の問題もある マルチリージョン, マルチAZ, オートスケーリング.. やればやるほど... 本当に全部が全部これ必要? 落とし所は欲しいよね?
先ほどの検証で解った事 先ほどの検証で解った事 今のままじゃダメだw コードを修正すればダウンする範囲を限定できそう 不必要な処理も直せそう
検知も欲しいよね? 検知も欲しいよね? 正常ではないレスポンスの検出 AWS: Synthetics Canary ..etc 独自に作ってもいいのでは? 今回の検証で どこに仕掛ければ良いか?
勘所が把握できたはず
まとめ まとめ
まとめ まとめ テストを実施する人に「丸投げ」パターンは限界あるよ 弱い箇所を知ることが本当に出来る? テストする人 = 構成を把握してますか? 「構成」を把握してないと「どこに何が潜んでいそうか?」 判断しずらいよね? 「落とす」ことにより色々発覚する
まとめ ( 心構え ) まとめ ( 心構え ) カオス =
怖い = 触りたくない -> これじゃダメ どう向き合うか?が重要 向き合う考え方をまとめたものがカオスエンジニアリング 予期せぬ挙動 = ダメ ではない 予期せぬ挙動が解った = 前進である
余談 余談 web+db press 復活して欲しい 休刊なので お待ちしてます! Software Design しばらく読んでます
Netflix こういう話題多いよね?
ご清聴 ご清聴 ありがとうございました。 ありがとうございました。
None