Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
売れてる SaaS へのオブジェクトストレージ導入にまつわる泥臭い話 / JJUG CCC 2...
Search
west-c
May 18, 2019
Programming
3.6k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
売れてる SaaS へのオブジェクトストレージ導入にまつわる泥臭い話 / JJUG CCC 2019 Spring
west-c
May 18, 2019
More Decks by west-c
See All by west-c
大規模案件における手戻りを防ぐ要件定義・開発事例 / 2022-11-09 RAKUS Meetup
westc
0
1.5k
ローンチ1年目プロダクトのテストコード事情 / 2021-08-25 devtestlt
westc
0
160
はじめてのフロントエンド・バックエンド分離 / 2020-08-25 RAKUS Meetup
westc
3
3k
Other Decks in Programming
See All in Programming
FastAPI の並行処理モデルを完全に理解する
hoto17296
1
250
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
710
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
19k
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
190
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
6.1k
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
150
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
1
140
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4.9k
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
280
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
830
5分で問診!Composer セキュリティ健康診断
codmoninc
0
1.1k
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
600
Featured
See All Featured
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
660
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
430
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
680
We Are The Robots
honzajavorek
0
300
Deep Space Network (abreviated)
tonyrice
0
260
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
550
Amusing Abliteration
ianozsvald
1
250
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
470
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
300
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
460
Transcript
売れてる SaaS への オブジェクトストレージ導入に まつわる泥臭い話 株式会社ラクス 西角 知佳 JJUG CCC
2019 Spring 1
自己紹介 • 西角 知佳 • 所属:株式会社ラクス • 2015年に新卒入社(入社5年目) • 経費精算クラウドサービス
の機能開発を担当 2
本日の内容 • 「売れてる SaaS」へのオブジェクトストレージ導入 の背景 • 導入時に気を付けたこと • 導入後に発生したトラブル •
導入による効果 3
「売れてる SaaS」への オブジェクトストレージ導入の 背景 4
の概要 交通費・経費など、お金にかかわる全ての処理を 一元管理できるクラウド型の経費精算システム • 2009年サービス開始 • SaaS型経費精算システムで導入社数第1位 ※:ITR「ITR Market View:予算・経費・就業管理市場2018」SaaS型経費精算市場:
累計導入社数ランキング(初期出荷から2017年12月末までの累計導入社数) 5
• 累計導入社数 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 月末 累計導入社数の推移(単位:社)
楽楽精算が抱えていた課題 伝票に証票(領収書)ファイルを添付できる ファイルデータは DB 内にバイナリ型で保持 7 経費精算書 id file_name file
1 hoge.pdf … … … アップロード 申請者 データベース 証票 hoge.pdf
楽楽精算が抱えていた課題 ファイルデータのサイズ増加量が年々加速 8 0 50 100 150 200 250 300
2010 2011 2012 2013 2014 2015 2016 ファイルデータのサイズ増加量(単位:GB)
楽楽精算が抱えていた課題 DB内に保持するファイルデータ増加による: • DBサーバのディスク枯渇の懸念 • メンテナンス時間増大の懸念 • DBバックアップ・VACUUM・REINDEX・ANALYZE 9
楽楽精算が抱えていた課題 DB内に保持するファイルデータ増加による: • DBサーバのディスク枯渇の懸念 • メンテナンス時間増大の懸念 • DBバックアップ・VACUUM・REINDEX・ANALYZE 10 これ以上ディスクの
増設ができない……
楽楽精算が抱えていた課題 DB内に保持するファイルデータ増加による: • DBサーバのディスク枯渇の懸念 • メンテナンス時間増大の懸念 • DBバックアップ・VACUUM・REINDEX・ANALYZE 11 これ以上ディスクの
増設ができない…… メンテナンス時間が 24時間を超えそう……
楽楽精算が抱えていた課題 DB内に保持するファイルデータ増加による: • DBサーバのディスク枯渇の懸念 • メンテナンス時間増大の懸念 • DBバックアップ・VACUUM・REINDEX・ANALYZE 外部ストレージへのファイルデータの移行を決定 12
メンテナンス時間が 24時間を超えそう…… これ以上ディスクの 増設ができない……
導入による効果 13
導入後のDBサーバのディスク使用量 • 2TB 以上のファイルデータを移行 • データ量が最大のサーバで270GB → 27GB(約90%減) 14 外部ストレージに分離後、
DBよりファイルデータを削除
• データ量が最大のサーバで約 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%減
ストレージ選定 16
クラウドかオンプレか • クラウドストレージ(e.g. Amazon S3) • オンプレミスストレージ 17
クラウドかオンプレか • クラウドストレージ(e.g. Amazon S3) • 外部サービス利用による顧客心象の懸念 • オンプレミスストレージ •
クラウドよりもコスト増 コスト増は許容範囲内のためオンプレミスの方針で決定 18
製品選定 ファイルストレージ・オブジェクトストレージ含めベンダ選定 • コスト • 容量制限 • ベンダロックインが発生しうる技術の有無 • etc
19
製品選定 オブジェクトストレージ CLOUDIAN HyperStore を選定 • コストが低くスモールスタートで開始可能 • サーバ増設により無制限に容量追加が可能 •
Amazon S3 のインターフェースと互換 20
オブジェクトストレージ導入時に 気を付けたこと 21
導入時に気を付けたこと 22 データ移行による影響洗い出し 安全確実にデータ移行する方法
導入時に気を付けたこと 23 データ移行による影響洗い出し 安全確実にデータ移行する方法
楽楽精算の技術スタック • 使用言語:Java • データベース:PostgreSQL • オブジェクトストレージ操作ライブラリ: AWS SDK for
Java ←New! 24
アーキテクチャ 方針:データ構成は大きく変えずデータ参照先を切り替える • DAOでオブジェクトストレージへのアクセスを吸収する • オブジェクトキー・ファイル名等の情報はDBに格納 25
id file_name file 1 hoge.pdf … … 26 26 クライアント
データベース Controller file_name = hoge.pdf file = Before DAO DTO
27 27 id file_name object_key file 1 hoge.pdf 00123 …
… クライアント データベース オブジェクトストレージ Controller file_name = hoge.pdf file = After DAO DTO 00123
28 28 id file_name object_key file 1 hoge.pdf 00123 …
… クライアント データベース オブジェクトストレージ Controller file_name = hoge.pdf file = After DAO DTO DTOの中身は 変わらない 00123
DBからの移行で考えるべきこと DB内の情報とオブジェクトストレージ内のファイルデータの 整合性が崩れる可能性がある • DB上に存在しないデータがオブジェクトストレージ上に存 在する(浮いた状態) • DB上に存在するデータがオブジェクトストレージ上に存在 しない(参照が切れた状態) 29
DBからの移行で考えるべきこと DB内の情報とオブジェクトストレージ内のファイルデータの 整合性が崩れる可能性がある • DB上に存在しないデータがオブジェクトストレージ上に存 在する(浮いた状態) • DB上に存在するデータがオブジェクトストレージ上に存在 しない(参照が切れた状態) 30
既存の設計 31 データベース id file_name file 1 hoge.pdf id file_name
file ユーザ 削除操作 物理削除
32 データベース オブジェクトストレージ id file_name object_key 1 hoge.pdf 00001 id
file_name object_key ユーザ 既存に倣った設計で 外部ストレージ導入 削除操作 物理削除 物理削除
33 データベース オブジェクトストレージ id file_name object_key 1 hoge.pdf 00001 id
file_name object_key 1 hoge.pdf 00001 ロールバック id file_name object_key ユーザ 削除操作 参照先が 存在しない 物理削除 物理削除 既存に倣った設計で 外部ストレージ導入
採用した設計 34 データベース オブジェクトストレージ id file_name object_key 1 hoge.pdf 00001
id file_name object_key 1 hoge.pdf 00001 ユーザ 削除操作 論理削除 物理削除 物理削除 id file_name object_key バッチ 削除処理
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 ユーザ 削除操作 論理削除 採用した設計
導入時に気を付けたこと 36 データ移行による影響洗い出し 安全確実にデータ移行する方法
どのように移行するか 移行対象のファイルデータ合計は 2TB 以上 メンテナンス時間での一括データ移行は作業時間的に厳しい オブジェクトストレージ導入後にバッチで徐々に移行する • 移行完了したファイルはオブジェクトストレージを参照 • 未移行のファイルはデータベースを参照
37
どのくらい移行するか 移行過渡期はなるべく短期間にしたい • 20日で移行完了目標 実際のデータ量を調査し移行頻度・件数を調整 10分に1回移行バッチを起動 移行バッチ1回につき各テナント75件を移行 38
安全にデータを移行するために 移行完了後しばらくはファイルデータをDBと二重管理 • オブジェクトストレージの運用に慣れるまでは予期せぬト ラブルが発生する可能性が高い • 予期せぬトラブルによりお客様のファイルデータが消失し てしまう事態を避ける DBのファイルデータは次バージョンリリース時に削除 39
導入後に発生したトラブル 40
DBサーバのディスク容量枯渇危機 • データ移行時、DB内のオブジェクトキー情報を 更新するためレコードをUPDATE • カラム内にはファイルデータも存在する 41 id file_name object_key
file 1 hoge.pdf 00123 … … データベース オブジェクトストレージ PUT UPDATE オブジェクトキーのみ更新 移行バッチ
DBサーバのディスク容量枯渇危機 • アーカイブログが大量に出力されディスク容量が逼迫 • O/Rマッパーで全カラムUPDATEしていたため、ファイル データに対する更新も行われた 42 id file_name object_key
file 1 hoge.pdf 00123 … … データベース オブジェクトストレージ PUT UPDATE 全カラムをUPDATEしていた 移行バッチ
DBサーバのディスク容量枯渇危機 • 一時的にアーカイブログを手で削除することに…… ダミーデータを本番相当数用意して検証を行うべきだった 43
再掲:導入による効果 44
楽楽精算が抱えていた課題 DB内に保持するファイルデータ増加による: • DBサーバのディスク枯渇の懸念 • メンテナンス時間増大の懸念 • DBバックアップ・VACUUM・REINDEX・ANALYZE 45
DBサーバのディスク枯渇の懸念 • 2TB 以上のファイルデータを移行 • データ量が最大のサーバで270GB → 27GB(約90%減) 46 外部ストレージに分離後、
DBよりファイルデータを削除
• データ量が最大のサーバで約 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%減
まとめ 48
まとめ オブジェクトストレージ導入により楽楽精算が抱えていた 課題を解消することができた 導入時に意識する点: • DBとオブジェクトストレージとの整合性 • データ移行の方法・頻度 • データサイズが大きいレコード更新に伴う影響
• 必要に応じて本番を想定した検証の実施 49
ご清聴ありがとうございました 50