Slide 1

Slide 1 text

実際にリリースするための手段を知ろう ~ 当たり前にリリースしていくために必要なこと ~ Classi社様 新卒研修 第2回 そーだい塾

Slide 2

Slide 2 text

前回
 
 
 What is it?

Slide 3

Slide 3 text

サービスを壊さずにリリースする ~ 当たり前にリリースしていくために必要なこと ~ Classi社様 新卒研修 第1回 そーだい塾

Slide 4

Slide 4 text

価値を提供するために
 
 リリースを行う
 What is it?

Slide 5

Slide 5 text

リリースを継続的に行う
 
 
 What is it?

Slide 6

Slide 6 text

リリースを継続的に行う
 ↓
 価値を提供し続ける
 What is it?

Slide 7

Slide 7 text

しかし、リリースは常に
 
 変化を提供する
 What is it?

Slide 8

Slide 8 text

変化は時に驚きと問題を連れてくる
 
 
 What is it?

Slide 9

Slide 9 text

そのために必要な実践的な話
 
 
 What is it?

Slide 10

Slide 10 text

1. 自己紹介
 2. 小さく、素早く、始める
 3. データベースを生かしたまま動かす
 4. ログとリトライとリラン
 5. まとめ
 あじぇんだ

Slide 11

Slide 11 text

1. 自己紹介
 2. 小さく、素早く、始める
 3. データベースを生かしたまま動かす
 4. ログとリトライとリラン
 5. まとめ
 あじぇんだ

Slide 12

Slide 12 text

自己紹介
 曽根 壮大(36歳)
 Have Fun Tech LLC 代表社員
 
 そ  ね   たけ とも
 ● 日本PostgreSQLユーザ会 勉強会分科会 担当
 ● 3人の子供がいます(長女、次女、長男)
 ● 技術的にはWeb/LL言語/RDBMSが好きです
 ● コミュニティが好き

Slide 13

Slide 13 text

1. 自己紹介
 2. 小さく、素早く、始める
 3. データベースを生かしたまま動かす
 4. ログとリトライとリラン
 5. まとめ
 あじぇんだ

Slide 14

Slide 14 text

スコープは小さく
 
 リリースは素早く
 小さく、素早く、始める

Slide 15

Slide 15 text

Small is beautiful.
 
 小さいものは美しい
 小さく、素早く、始める

Slide 16

Slide 16 text

Small is beautiful. 小さなプログラムという発想 1. 小さなプログラムはわかりやすい 2. 小さなプログラムは保守しやすい 3. 小さなプログラムはシステム リソースに優しい 4. 小さなプログラムは他のツールと組 み合わせやすい https://amzn.to/33QPAdv

Slide 17

Slide 17 text

Make each program do one thing well.
 
 1つのプログラムには
 1つのことをうまくやらせる
 小さく、素早く、始める

Slide 18

Slide 18 text

Make each program do one thing well. 一つのことに集中することで プログラムに不要な部分をなくせる。 不要な部分があると、 実行速度が遅くなり、 不必要に複雑になり、 融通が効かない。 https://amzn.to/33QPAdv

Slide 19

Slide 19 text

Build a prototype as soon as possible.
 
 できるだけ早く試作する
 小さく、素早く、始める

Slide 20

Slide 20 text

Build a prototype as soon as possible. ソフトウェアには常に改善の余地はあるの はもちろんだし、時間的な制約などでその ソースコードは必ずしも最高の状態が保た れているわけではない。 ほとんどのソフトウェアは妥協の産物だ。 完成することはなく、ただリリースがあるだ けだ。 https://amzn.to/33QPAdv

Slide 21

Slide 21 text

Build a prototype as soon as possible. UNIXの考え方では、なるべくはやく第三のシス テムを構築するために、すばやく試作 することをおすすめしている。 直接、第三のシステムをつくることは できないのだ。 1. 短い機能仕様書を書く (3〜4枚程度) 2. ソフトウェアを書く 3. テストして書き直す。 満足できるまで、これを繰り返す。 4. 詳細なドキュメントを (必要なら)書く https://amzn.to/33QPAdv

Slide 22

Slide 22 text

Unixの哲学を
 
 どうやって実現するか
 小さく、素早く、始める

Slide 23

Slide 23 text

小さくリリースする
 
 
 小さく、素早く、始める

Slide 24

Slide 24 text

小さくリリースする
 ↓
 例えば、段階的リリース
 小さく、素早く、始める

Slide 25

Slide 25 text

サンプル

PHPのテストです。

= $view_flag ? $view : null ?> https://hoge.com?v=true 特定のフラグのときだけ、特定 の表示する 1. ボタン 2. リンク 3. バナー 4. コンポーネント 5. 画面 6. 機能 Viewを見せない

Slide 26

Slide 26 text

全てを同時にリリースしない
 
 
 小さく、素早く、始める

Slide 27

Slide 27 text

全てを同時にリリースしない
 ↓
 影響範囲を分割する
 小さく、素早く、始める

Slide 28

Slide 28 text

影響範囲を分割する
 ● データベースの変更だけ行う
 ○ テーブル・カラム追加とコードのリリースを分ける
 ● CSSやJSなどの静的ファイルを先にリリースする
 ● フロントとバックエンドのリリースを分ける ...etc
 小さく、素早く、始める

Slide 29

Slide 29 text

影響範囲を分割する
 ● ALBでリリース対象をロードバランシングする
 ● DNSで切り替える
 ○ pre.host.name → prod.host.name
 ● 参照するデータを分ける
 小さく、素早く、始める

Slide 30

Slide 30 text

スコープは小さく
 
 新たな複雑を導入しない
 小さく、素早く、始める

Slide 31

Slide 31 text

シンプルと
 
 イージーは違う
 小さく、素早く、始める

Slide 32

Slide 32 text

小さく、素早く、始める

Slide 33

Slide 33 text

常にロールバックを出来る
 
 
 小さく、素早く、始める

Slide 34

Slide 34 text

1. 自己紹介
 2. 小さく、素早く、始める
 3. データベースを生かしたまま動かす
 4. ログとリトライとリラン
 5. まとめ
 あじぇんだ

Slide 35

Slide 35 text

小さくリリースするためには
 
 データベースが鬼門
 データベースを生かしたまま動かす

Slide 36

Slide 36 text

データベースは状態を持つ
 ● UPDATEやDELETEは破壊的変更
 ● テーブル変更やカラム変更も破壊的変更
 ○ データが変わると元には戻しにくい
 ○ ロールバックしずらい
 データベースを生かしたまま動かす

Slide 37

Slide 37 text

状態が変更されると
 
 元に戻せないから難しい
 データベースを生かしたまま動かす

Slide 38

Slide 38 text

データベースから状態を排除する
 
 
 データベースを生かしたまま動かす

Slide 39

Slide 39 text

データベースから状態を排除する
 ↓
 それは設計の役目
 データベースを生かしたまま動かす

Slide 40

Slide 40 text

https://soudai.hatenablog.com/entry/2018/05/01/204442 データベースを生かしたまま動かす

Slide 41

Slide 41 text

リリースする時、データベースの変更は
 
 先にリリースできないか考えること
 データベースを生かしたまま動かす

Slide 42

Slide 42 text

ADDで対応する
 
 
 データベースを生かしたまま動かす

Slide 43

Slide 43 text

ADDで対応する
 ● INSERTとDELETEだけで設計する
 ● テーブルやカラムもADD
 ● flagやstatusを追加したくなったとき、
 そのテーブルの責務が大きすぎないか考えること
 データベースを生かしたまま動かす

Slide 44

Slide 44 text

データベースの責務を考えるタイミング
 ● 一つのテーブルに5つ目のINDEXを設定する時
 ● テーブルにUPDATEを手動で実行したい
 ● 一つのテーブルで複数の意味を持つことに気付いた
 ● 実行したい集計SQLが難しい
 データベースを生かしたまま動かす

Slide 45

Slide 45 text

そーだい本


Slide 46

Slide 46 text

どこまで行くと
 
 元に戻せないリリースになるのか
 データベースを生かしたまま動かす つまりここがバックアップが必要になるポイント!

Slide 47

Slide 47 text

事前に切り戻す条件を
 
 決めておくこと
 データベースを生かしたまま動かす

Slide 48

Slide 48 text

ロールバック出来ない時にどうするか
 ● 転ばぬ先の杖のバックアップ
 ○ 戻すのにどれくらい時間がかかるかもセット
 ● 覚悟を決めて突き進む
 ○ バグが出たら戦うしか無い
 ○ 影響範囲を小さく→深夜リリースの機運
 データベースを生かしたまま動かす

Slide 49

Slide 49 text

データベースが複数ある時
 
 この問題が掛け算で発生する
 データベースを生かしたまま動かす

Slide 50

Slide 50 text

データストアは最後の最後まで
 
 最小限の数に抑えるべき
 データベースを生かしたまま動かす シャーディングはやらなくていいならやらない

Slide 51

Slide 51 text

1. 自己紹介
 2. 小さく、素早く、始める
 3. データベースを生かしたまま動かす
 4. ログとリトライとリラン
 5. まとめ
 あじぇんだ

Slide 52

Slide 52 text

今からエンジニア人生で
 
 とても大事なことを伝えます
 ログとリトライとリラン

Slide 53

Slide 53 text

とにかくログを正しく残せっ!!
 
 
 ログとリトライとリラン

Slide 54

Slide 54 text

とにかくログを正しく残せっ!!
 ↓
 そして再利用できる仕組みを用意する
 ログとリトライとリラン

Slide 55

Slide 55 text

再利用できる仕組み
 
 
 ログとリトライとリラン

Slide 56

Slide 56 text

再利用できる仕組み
 ↓
 リトライとリラン
 ログとリトライとリラン

Slide 57

Slide 57 text

ログとリトライとリラン

Slide 58

Slide 58 text

ログとリトライとリラン

Slide 59

Slide 59 text

最初から失敗を許容する
 
 
 ログとリトライとリラン

Slide 60

Slide 60 text

失敗を許容する
 ● ログを元に再実行できる
 ○ 冪等性
 ● ログを元にデータを再現できる
 ○ 再現性
 ● ログを元にどこまで・何が・どうなったかわかる
 ○ 可観測性
 ログとリトライとリラン

Slide 61

Slide 61 text

Batchは冪等にすること
 
 
 ログとリトライとリラン

Slide 62

Slide 62 text

外部APIのリクエストやコネクションは
 
 失敗したらリトライする
 ログとリトライとリラン

Slide 63

Slide 63 text

ロングトランザクションは
 
 トレースできること
 ログとリトライとリラン 例えば状態変更の履歴とか

Slide 64

Slide 64 text

ログとリトライとリランができれば
 
 多くの問題は解決する
 ログとリトライとリラン

Slide 65

Slide 65 text

それを実現するためには
 
 シンプルなシステムであることが重要
 ログとリトライとリラン

Slide 66

Slide 66 text

1. 自己紹介
 2. 小さく、素早く、始める
 3. データベースを生かしたまま動かす
 4. ログとリトライとリラン
 5. まとめ
 あじぇんだ

Slide 67

Slide 67 text

事故を未然に防げる仕組み
 
 事故から復旧できる仕組み
 まとめ

Slide 68

Slide 68 text

失敗を最初から考慮する
 
 
 まとめ

Slide 69

Slide 69 text

失敗を最初から考慮する
 ↓
 ロールバック、リトライ、リラン
 まとめ

Slide 70

Slide 70 text

どうしても破壊的な変更が必要なら
 
 その決断は本当に必要か考える
 まとめ いい方法が思い浮かばないときは時期早々 (技術的な観点では)

Slide 71

Slide 71 text

“科学の成果をどういう風に役立たせるか、これが技術ですね。
 科学の価値は、どれほど新しい知識か、という点で評価されます。
 (中略)
 自然界のルールを解明する体系的な知識が科学であり、それを社会や
 企業の利益、医療の向上のため活用するノウハウが技術です。”
 https://www.shinryo.com/special/contents01_3.html 
 ノーベル物理学賞 江崎 玲於奈
 まとめ

Slide 72

Slide 72 text

科学を活用して
 
 問題を解決する力
 まとめ

Slide 73

Slide 73 text

科学(ソフトウェア)を活用して
 
 問題を解決する力
 まとめ

Slide 74

Slide 74 text

ソフトウェアを活用して
 
 問題を解決するのが
 
 ソフトウェアエンジニア
 まとめ

Slide 75

Slide 75 text

ソフトウェアが解決する問題の
 
 価値のサイズが我々の価値
 まとめ

Slide 76

Slide 76 text

価値を提供するために
 
 リリースをしよう!
 まとめ

Slide 77

Slide 77 text

手を動かしたものだけが世界を変える
 
 -- id:onishi
 まとめ

Slide 78

Slide 78 text

ご清聴ありがとうございました
 
 
 まとめ