Slide 1

Slide 1 text

売れてる SaaS への オブジェクトストレージ導入に まつわる泥臭い話 株式会社ラクス 西角 知佳 JJUG CCC 2019 Spring 1

Slide 2

Slide 2 text

自己紹介 • 西角 知佳 • 所属:株式会社ラクス • 2015年に新卒入社(入社5年目) • 経費精算クラウドサービス の機能開発を担当 2

Slide 3

Slide 3 text

本日の内容 • 「売れてる SaaS」へのオブジェクトストレージ導入 の背景 • 導入時に気を付けたこと • 導入後に発生したトラブル • 導入による効果 3

Slide 4

Slide 4 text

「売れてる SaaS」への オブジェクトストレージ導入の 背景 4

Slide 5

Slide 5 text

の概要 交通費・経費など、お金にかかわる全ての処理を 一元管理できるクラウド型の経費精算システム • 2009年サービス開始 • SaaS型経費精算システムで導入社数第1位 ※:ITR「ITR Market View:予算・経費・就業管理市場2018」SaaS型経費精算市場: 累計導入社数ランキング(初期出荷から2017年12月末までの累計導入社数) 5

Slide 6

Slide 6 text

• 累計導入社数 4,382社(2019年3月末) • 2018年度の新規受注 1,355社 の概要 6 17 44 107 229 417 760 1,236 1,957 3,027 4,382 2 0 1 0 年 3 月末 2 0 1 1 年 3 月末 2 0 1 2 年 3 月末 2 0 1 3 年 3 月末 2 0 1 4 年 3 月末 2 0 1 5 年 3 月末 2 0 1 6 年 3 月末 2 0 1 7 年 3 月末 2 0 1 8 年 3 月末 2 0 1 9 年 3 月末 累計導入社数の推移(単位:社)

Slide 7

Slide 7 text

楽楽精算が抱えていた課題 伝票に証票(領収書)ファイルを添付できる ファイルデータは DB 内にバイナリ型で保持 7 経費精算書 id file_name file 1 hoge.pdf … … … アップロード 申請者 データベース 証票 hoge.pdf

Slide 8

Slide 8 text

楽楽精算が抱えていた課題 ファイルデータのサイズ増加量が年々加速 8 0 50 100 150 200 250 300 2010 2011 2012 2013 2014 2015 2016 ファイルデータのサイズ増加量(単位:GB)

Slide 9

Slide 9 text

楽楽精算が抱えていた課題 DB内に保持するファイルデータ増加による: • DBサーバのディスク枯渇の懸念 • メンテナンス時間増大の懸念 • DBバックアップ・VACUUM・REINDEX・ANALYZE 9

Slide 10

Slide 10 text

楽楽精算が抱えていた課題 DB内に保持するファイルデータ増加による: • DBサーバのディスク枯渇の懸念 • メンテナンス時間増大の懸念 • DBバックアップ・VACUUM・REINDEX・ANALYZE 10 これ以上ディスクの 増設ができない……

Slide 11

Slide 11 text

楽楽精算が抱えていた課題 DB内に保持するファイルデータ増加による: • DBサーバのディスク枯渇の懸念 • メンテナンス時間増大の懸念 • DBバックアップ・VACUUM・REINDEX・ANALYZE 11 これ以上ディスクの 増設ができない…… メンテナンス時間が 24時間を超えそう……

Slide 12

Slide 12 text

楽楽精算が抱えていた課題 DB内に保持するファイルデータ増加による: • DBサーバのディスク枯渇の懸念 • メンテナンス時間増大の懸念 • DBバックアップ・VACUUM・REINDEX・ANALYZE 外部ストレージへのファイルデータの移行を決定 12 メンテナンス時間が 24時間を超えそう…… これ以上ディスクの 増設ができない……

Slide 13

Slide 13 text

導入による効果 13

Slide 14

Slide 14 text

導入後のDBサーバのディスク使用量 • 2TB 以上のファイルデータを移行 • データ量が最大のサーバで270GB → 27GB(約90%減) 14 外部ストレージに分離後、 DBよりファイルデータを削除

Slide 15

Slide 15 text

• データ量が最大のサーバで約 90% のメンテナンス時間短縮 導入後のメンテナンス時間 15 導入前の 所要時間(h) 導入後の 所要時間(h) DBバックアップ 7.00 0.75 VACUUM 3.50 0.25 REINDEX 1.00 0.25 ANALYZE 1.50 0.25 合計 13.00 1.5 約90%減

Slide 16

Slide 16 text

ストレージ選定 16

Slide 17

Slide 17 text

クラウドかオンプレか • クラウドストレージ(e.g. Amazon S3) • オンプレミスストレージ 17

Slide 18

Slide 18 text

クラウドかオンプレか • クラウドストレージ(e.g. Amazon S3) • 外部サービス利用による顧客心象の懸念 • オンプレミスストレージ • クラウドよりもコスト増 コスト増は許容範囲内のためオンプレミスの方針で決定 18

Slide 19

Slide 19 text

製品選定 ファイルストレージ・オブジェクトストレージ含めベンダ選定 • コスト • 容量制限 • ベンダロックインが発生しうる技術の有無 • etc 19

Slide 20

Slide 20 text

製品選定 オブジェクトストレージ CLOUDIAN HyperStore を選定 • コストが低くスモールスタートで開始可能 • サーバ増設により無制限に容量追加が可能 • Amazon S3 のインターフェースと互換 20

Slide 21

Slide 21 text

オブジェクトストレージ導入時に 気を付けたこと 21

Slide 22

Slide 22 text

導入時に気を付けたこと 22 データ移行による影響洗い出し 安全確実にデータ移行する方法

Slide 23

Slide 23 text

導入時に気を付けたこと 23 データ移行による影響洗い出し 安全確実にデータ移行する方法

Slide 24

Slide 24 text

楽楽精算の技術スタック • 使用言語:Java • データベース:PostgreSQL • オブジェクトストレージ操作ライブラリ: AWS SDK for Java ←New! 24

Slide 25

Slide 25 text

アーキテクチャ 方針:データ構成は大きく変えずデータ参照先を切り替える • DAOでオブジェクトストレージへのアクセスを吸収する • オブジェクトキー・ファイル名等の情報はDBに格納 25

Slide 26

Slide 26 text

id file_name file 1 hoge.pdf … … 26 26 クライアント データベース Controller file_name = hoge.pdf file = Before DAO DTO

Slide 27

Slide 27 text

27 27 id file_name object_key file 1 hoge.pdf 00123 … … クライアント データベース オブジェクトストレージ Controller file_name = hoge.pdf file = After DAO DTO 00123

Slide 28

Slide 28 text

28 28 id file_name object_key file 1 hoge.pdf 00123 … … クライアント データベース オブジェクトストレージ Controller file_name = hoge.pdf file = After DAO DTO DTOの中身は 変わらない 00123

Slide 29

Slide 29 text

DBからの移行で考えるべきこと DB内の情報とオブジェクトストレージ内のファイルデータの 整合性が崩れる可能性がある • DB上に存在しないデータがオブジェクトストレージ上に存 在する(浮いた状態) • DB上に存在するデータがオブジェクトストレージ上に存在 しない(参照が切れた状態) 29

Slide 30

Slide 30 text

DBからの移行で考えるべきこと DB内の情報とオブジェクトストレージ内のファイルデータの 整合性が崩れる可能性がある • DB上に存在しないデータがオブジェクトストレージ上に存 在する(浮いた状態) • DB上に存在するデータがオブジェクトストレージ上に存在 しない(参照が切れた状態) 30

Slide 31

Slide 31 text

既存の設計 31 データベース id file_name file 1 hoge.pdf id file_name file ユーザ 削除操作 物理削除

Slide 32

Slide 32 text

32 データベース オブジェクトストレージ id file_name object_key 1 hoge.pdf 00001 id file_name object_key ユーザ 既存に倣った設計で 外部ストレージ導入 削除操作 物理削除 物理削除

Slide 33

Slide 33 text

33 データベース オブジェクトストレージ id file_name object_key 1 hoge.pdf 00001 id file_name object_key 1 hoge.pdf 00001 ロールバック id file_name object_key ユーザ 削除操作 参照先が 存在しない 物理削除 物理削除 既存に倣った設計で 外部ストレージ導入

Slide 34

Slide 34 text

採用した設計 34 データベース オブジェクトストレージ id file_name object_key 1 hoge.pdf 00001 id file_name object_key 1 hoge.pdf 00001 ユーザ 削除操作 論理削除 物理削除 物理削除 id file_name object_key バッチ 削除処理

Slide 35

Slide 35 text

35 データベース オブジェクトストレージ id file_name object_key 1 hoge.pdf 00001 id file_name object_key 1 hoge.pdf 00001 ロールバック id file_name object_key 1 hoge.pdf 00001 ユーザ 削除操作 論理削除 採用した設計

Slide 36

Slide 36 text

導入時に気を付けたこと 36 データ移行による影響洗い出し 安全確実にデータ移行する方法

Slide 37

Slide 37 text

どのように移行するか 移行対象のファイルデータ合計は 2TB 以上 メンテナンス時間での一括データ移行は作業時間的に厳しい オブジェクトストレージ導入後にバッチで徐々に移行する • 移行完了したファイルはオブジェクトストレージを参照 • 未移行のファイルはデータベースを参照 37

Slide 38

Slide 38 text

どのくらい移行するか 移行過渡期はなるべく短期間にしたい • 20日で移行完了目標 実際のデータ量を調査し移行頻度・件数を調整 10分に1回移行バッチを起動 移行バッチ1回につき各テナント75件を移行 38

Slide 39

Slide 39 text

安全にデータを移行するために 移行完了後しばらくはファイルデータをDBと二重管理 • オブジェクトストレージの運用に慣れるまでは予期せぬト ラブルが発生する可能性が高い • 予期せぬトラブルによりお客様のファイルデータが消失し てしまう事態を避ける DBのファイルデータは次バージョンリリース時に削除 39

Slide 40

Slide 40 text

導入後に発生したトラブル 40

Slide 41

Slide 41 text

DBサーバのディスク容量枯渇危機 • データ移行時、DB内のオブジェクトキー情報を 更新するためレコードをUPDATE • カラム内にはファイルデータも存在する 41 id file_name object_key file 1 hoge.pdf 00123 … … データベース オブジェクトストレージ PUT UPDATE オブジェクトキーのみ更新 移行バッチ

Slide 42

Slide 42 text

DBサーバのディスク容量枯渇危機 • アーカイブログが大量に出力されディスク容量が逼迫 • O/Rマッパーで全カラムUPDATEしていたため、ファイル データに対する更新も行われた 42 id file_name object_key file 1 hoge.pdf 00123 … … データベース オブジェクトストレージ PUT UPDATE 全カラムをUPDATEしていた 移行バッチ

Slide 43

Slide 43 text

DBサーバのディスク容量枯渇危機 • 一時的にアーカイブログを手で削除することに…… ダミーデータを本番相当数用意して検証を行うべきだった 43

Slide 44

Slide 44 text

再掲:導入による効果 44

Slide 45

Slide 45 text

楽楽精算が抱えていた課題 DB内に保持するファイルデータ増加による: • DBサーバのディスク枯渇の懸念 • メンテナンス時間増大の懸念 • DBバックアップ・VACUUM・REINDEX・ANALYZE 45

Slide 46

Slide 46 text

DBサーバのディスク枯渇の懸念 • 2TB 以上のファイルデータを移行 • データ量が最大のサーバで270GB → 27GB(約90%減) 46 外部ストレージに分離後、 DBよりファイルデータを削除

Slide 47

Slide 47 text

• データ量が最大のサーバで約 90% のメンテナンス時間短縮 メンテナンス時間増大の懸念 47 導入前の 所要時間(h) 導入後の 所要時間(h) DBバックアップ 7.00 0.75 VACUUM 3.50 0.25 REINDEX 1.00 0.25 ANALYZE 1.50 0.25 合計 13.00 1.5 約90%減

Slide 48

Slide 48 text

まとめ 48

Slide 49

Slide 49 text

まとめ オブジェクトストレージ導入により楽楽精算が抱えていた 課題を解消することができた 導入時に意識する点: • DBとオブジェクトストレージとの整合性 • データ移行の方法・頻度 • データサイズが大きいレコード更新に伴う影響 • 必要に応じて本番を想定した検証の実施 49

Slide 50

Slide 50 text

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