2017/08/25
株式会社Fusic 平田 哲
ピタゴラなんとかスイッチを
作って破壊した話
Fusic Co., Ltd.
自己紹介
3
平田 哲(HIRATA, Satoshi)
id: debility
‘Kiban Unit’ as Fusic Co., Ltd.
http://fusic.co.jp/
Fukuoka.pm
Program, Server, Network, and “Nomikai”
Splatoon2 Main Weapon: N-ZAP85
icon: © mutsuking
Fusic Co., Ltd.
何の話か
4
マネしてはいけないサーバレスの話
それを改善した話
スライド70枚超えたのでがんばります
Fusic Co., Ltd.
要件
5
「定期的にAPI経由でデータを取得して、いい
感じに整形して、RDSに保存したい」
Fusic Co., Ltd.
要件
6
「定期的にAPI経由でデータを取得して、いい
感じに整形して、RDSに保存したい」
「かしこまり」
Fusic Co., Ltd.
想定
7
Fusic Co., Ltd.
問題発生
8
「あれ、私のリクエスト多すぎ。。。?」
Fusic Co., Ltd.
問題発生
9
「あれ、私のリクエスト多すぎ。。。?」
「実行時間足りなさそう。。。」
※ AWS Lambdaは5分の時間制限がある
Fusic Co., Ltd.
問題発生
10
「あれ、私のリクエスト多すぎ。。。?」
「実行時間足りなさそう。。。」
※ AWS Lambdaは5分の時間制限がある
「並列でがしがしリクエスト投げていいですか」
Fusic Co., Ltd.
問題発生
11
「あれ、私のリクエスト多すぎ。。。?」
「実行時間足りなさそう。。。」
※ AWS Lambdaは5分の時間制限がある
「並列でがしがしリクエスト投げていいですか」
「だめです」
「」
Fusic Co., Ltd.
仕方ないので
12
put json
Fusic Co., Ltd.
仕方ないので
13
put json event
(put object)
Fusic Co., Ltd.
仕方ないので
14
put json event
(put object)
API
Fusic Co., Ltd.
仕方ないので
15
put json event
(put object)
API
data
Fusic Co., Ltd.
仕方ないので
16
put json event
(put object)
API
data
put json
Fusic Co., Ltd.
仕方ないので
17
put json event
(put object)
API
data
put json
(n回繰り返し)
Fusic Co., Ltd.
仕方ないので
18
event
(put object)
data
put json
API
put json
Fusic Co., Ltd.
そのままじゃ怖い
19
何かミスってたら
無限ループしそう
Fusic Co., Ltd.
ので
20
Fusic Co., Ltd.
breakerを追加
21
event
(put object)
put json
Fusic Co., Ltd.
breakerを追加
22
event
(put object)
put json
check
breaker
Fusic Co., Ltd.
breakerを追加
23
event
(put object)
put json
check
breaker
Fusic Co., Ltd.
最終形
24
event
(put object)
put json
check
breaker
data
API
put json
Fusic Co., Ltd.
理想(再掲)
25
Fusic Co., Ltd.
結果
26
Fusic Co., Ltd.
結果その2
27
Fusic Co., Ltd.
どうしてこうなった
28
http://imgcc.naver.jp/kaze/mission/USER/20121215/13/10
85203/17/640x355xa7ad18ad7d894eecd5f9239b.jpg
Fusic Co., Ltd.
さっき見たスライド
29
Fusic Co., Ltd.
さっき見たスライド
30
Fusic Co., Ltd.
さっき見たスライド2
31
Fusic Co., Ltd.
ある日
32
Fusic Co., Ltd.
ある日
33
×ものすごく大量
Fusic Co., Ltd.
問題発生
34
1. Lambdaがめっちゃエラーになる
Fusic Co., Ltd.
問題発生
35
1. Lambdaがめっちゃエラーになる
2. faultlineにめっちゃリクエストが飛ぶ
Fusic Co., Ltd.
問題発生
36
1. Lambdaがめっちゃエラーになる
2. faultlineにめっちゃリクエストが飛ぶ
3. faultlineが落ちて通知が大量に来る
Fusic Co., Ltd.
問題発生
37
1. Lambdaがめっちゃエラーになる
2. faultlineにめっちゃリクエストが飛ぶ
3. faultlineが落ちて通知が大量に来る
4. それでもfaultlineに投げ続ける
Fusic Co., Ltd.
問題発生
38
1. Lambdaがめっちゃエラーになる
2. faultlineにめっちゃリクエストが飛ぶ
3. faultlineが落ちて通知が大量に来る
4. それでもfaultlineに投げ続ける
作ってて良かったブレーカー。
Fusic Co., Ltd.
結果
39
Fusic Co., Ltd.
結果
40
実行回数: 約463万回
処理時間: 約930万秒
Fusic Co., Ltd.
結果
41
実行回数: 約463万回
処理時間: 約930万秒
※ 無料枠が320万秒
Fusic Co., Ltd.
結果
42
実行回数: 約463万回
処理時間: 約930万秒
※ 無料枠が320万秒
➜ あわせて$13程度の課金発生
Fusic Co., Ltd.
改善したい
43
・実行回数上限を定めておくとか
Fusic Co., Ltd.
改善したい
44
・実行回数上限を定めておくとか
・そもそも方式を変えるとか
Fusic Co., Ltd.
改善したい
45
・実行回数上限を定めておくとか
・そもそも方式を変えるとか
・Step Functionsとか使うといいのでは
Fusic Co., Ltd.
改善したい
46
・実行回数上限を定めておくとか
・そもそも方式を変えるとか
・Step Functionsとか使うといいのでは
・並列化できないのならcronとかでいいので
は
Fusic Co., Ltd.
改善したい
47
・実行回数上限を定めておくとか
・そもそも方式を変えるとか
・Step Functionsとか使うといいのでは
・並列化できないのならcronとかでいいので
は
Fusic Co., Ltd.
AWS Step Functions
48
Fusic Co., Ltd.
AWS Step Functions
49
こういうのを
JSONで定義して
実行できて
視覚的に管理できる
Fusic Co., Ltd.
こういうのが
50
Fusic Co., Ltd.
こうなった
51
Fusic Co., Ltd.
JSON定義
52
Fusic Co., Ltd.
繰り返し処理(再掲)
53
put json event
(put object)
API
data
put json
(n回繰り返し)
Fusic Co., Ltd.
同じことをやっている個所
54
Fusic Co., Ltd.
同じことをやっている個所
55
Fusic Co., Ltd.
Choiceを使う
56
Fusic Co., Ltd.
Choiceを使う
57
Fusic Co., Ltd.
Lambda側
58
Fusic Co., Ltd.
Breakerは?
59
event
(put object)
put json
check
breaker
data
API
put json
Fusic Co., Ltd.
コンソールから停止できる
60
Fusic Co., Ltd.
その他改善事項
61
エラー処理を集約
Fusic Co., Ltd.
改善した部分
62
Fusic Co., Ltd.
改善した部分
63
・処理の進行が見える化できた
Fusic Co., Ltd.
改善した部分
64
・処理の進行が見える化できた
・「誰が見ても」視覚的に分かりやすくなった
Fusic Co., Ltd.
改善した部分
65
・処理の進行が見える化できた
・「誰が見ても」視覚的に分かりやすくなった
・各Lambdaが疎結合になった
Fusic Co., Ltd.
改善した部分
66
・処理の進行が見える化できた
・「誰が見ても」視覚的に分かりやすくなった
・各Lambdaが疎結合になった
・Lambdaの実装量が減った
Fusic Co., Ltd.
改善した部分
67
・処理の進行が見える化できた
・「誰が見ても」視覚的に分かりやすくなった
・各Lambdaが疎結合になった
・Lambdaの実装量が減った
・担保する挙動が減ったため
Fusic Co., Ltd.
改善していない部分
68
・Step課金なので費用は増えた
Fusic Co., Ltd.
改善していない部分
69
・Step課金なので費用は増えた
(状態遷移1回あたり 0.000025 USD)
Fusic Co., Ltd.
改善していない部分
70
・Step課金なので費用は増えた
(状態遷移1回あたり 0.000025 USD)
・暴走(無限ループとか)は別の対策を用いる
必要がある
Fusic Co., Ltd.
改善していない部分
71
・Step課金なので費用は増えた
(状態遷移1回あたり 0.000025 USD)
・暴走(無限ループとか)は別の対策を用いる
必要がある
・そもそもの複雑さが改善していない
Fusic Co., Ltd.
改善していない部分
72
・Step課金なので費用は増えた
(状態遷移1回あたり 0.000025 USD)
・暴走(無限ループとか)は別の対策を用いる
必要がある
・そもそもの複雑さが改善していない
・要件が要件なのでしょうがない
Fusic Co., Ltd.
まとめ
73
・ピタゴラ的な作りで頑張ることはできる
・ただしつらい
Fusic Co., Ltd.
まとめ
74
・ピタゴラ的な作りで頑張ることはできる
・ただしつらい
・AWS Step Functionsを使うと捗る
・ただし金はかかる
Fusic Co., Ltd.
まとめ
75
・ピタゴラ的な作りで頑張ることはできる
・ただしつらい
・AWS Step Functionsを使うと捗る
・ただし金はかかる
・要件大事
Fusic Co., Ltd.
まとめ
76
・ピタゴラ的な作りで頑張ることはできる
・ただしつらい
・AWS Step Functionsを使うと捗る
・ただし金はかかる
・要件大事
・LTで直前の発表とネタがかぶるとつらい
Fusic Co., Ltd.
ご清聴ありがとうございました。

ピタゴラなんとかスイッチを作って破壊した話