Upgrade to Pro — share decks privately, control downloads, hide ads and more …

売れてる SaaS へのオブジェクトストレージ導入にまつわる泥臭い話 / JJUG CCC 2019 Spring

west-c
May 18, 2019

売れてる SaaS へのオブジェクトストレージ導入にまつわる泥臭い話 / JJUG CCC 2019 Spring

west-c

May 18, 2019
Tweet

More Decks by west-c

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  6. • 累計導入社数 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 月末
    累計導入社数の推移(単位:社)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. 導入による効果
    13

    View Slide

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

    View Slide

  15. • データ量が最大のサーバで約 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%減

    View Slide

  16. ストレージ選定
    16

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  35. 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
    ユーザ
    削除操作
    論理削除
    採用した設計

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  44. 再掲:導入による効果
    44

    View Slide

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

    View Slide

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

    View Slide

  47. • データ量が最大のサーバで約 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%減

    View Slide

  48. まとめ
    48

    View Slide

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

    View Slide

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

    View Slide