SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

BizReach Tech Blog

事業を横断してデータベース運用を支援するビズリーチの「DBRE(Database Reliability Engineering)」チーム

BizReach Tech Blog 第5回

DBREチームのアクティビティ

Backup Platformの開発

 現在私たちはBackup Platformの開発を行っています。ここでは、それがどのようなものか、を具体的に紹介させていただきます。

背景

 ビズリーチはそのほとんどすべてをAWSやGCPなどのManagedサービスで運用しています。特に比率が高いのはRDSやAuroraなどのAWSで提供されているMySQL系Relational Databaseサービスです。

 「え? ここまで来て今更Backup?」と思った方もいらっしゃるかと思いますが、そのとおりで、DBAというRoleが存在する組織や会社であれば当たり前に行われていることでしょう。実際DBAが存在するビズリーチサービスではBackupに対する手段とその運用が確立されています。

 しかしながら、規模の小さい事業や、新しくできた事業にはその知見やリソースがなく、RDSによる自動SnapShotしか取っていない事業も存在してしまっているのも現実としてあります。

 現段階では最低限事業継続のために必要なこと(Point In Time RecoveryやMonitoringなど)はAWSの仕組みにお任せすることに振り切っています。とはいえ、おかげさまで事業が成長し続けているため、AWSの自動SnapShotだけでは事業を存続するための要件を満たせなくなりました。

 具体的には個人情報や決算に関わる情報はレベル分けされ、それぞれX年保持する。という会社独自のポリシーです。皆様からお預かりしているデータなのでそれを安全に堅牢に保持し、不測の事態に備えるために重要なことです。

 AWSでは保存できるSnapshotの数そのものに制限があったり、これからずっと(弊社が決めた長期的な保持期間)SnapShotがRestoreできるとは限りません。そのため、私たちはPITRなどのサービス継続に必要なbackupに関してはRDSの機能で、それ以外ではStatement Baseでファイルに保存するという方法を選択しました。

開発におけるスローガン

  • 実現できることは枯れたコトかもしれない
  • でもそれを新しい技術を使って実現できたら僕たちも面白い

 この言葉のとおりですが、実際にBackup Platformとして開発してでき上がっていたものはものすごくレガシーなことです。業務要件や性能要件を無視すれば極端な話、

mysqldump --single-transaction --master-data=2 --all-databases --result-file=XXX

とcronに仕込めばいいかもしれません。とはいえBackupを取得することによって、Database Serverの負荷が上がって本番サービスに影響を与えてしまっては本末転倒ですよね。

 幸いにも私たちの所属する部署には組織横断的にインフラ基盤を整備するグループが存在するので、その方々の力を借りてDatabase OperationをCloud Nativeならではの方法で実現させることを考えながら技術選定を行い、開発することができています。

 その1番の理由は私たち自身がDatabaseだけでなく、インフラのトレンドを追い続けたい欲求があったからだと思います。

アーキテクチャ

 前提として事業が使っているAWSアカウントとDBREチームで管理しているアカウントは別物です。それを踏まえてこの図をごく簡単に説明させていただきます。

  1. Initialize
  2. Get SnapShot
    事業内のRDSでSnapShotを作成、コピー、DBREチームアカウントに共有
  3. Restore SnapShot
    DBREチーム内のアカウントに共有されたスナップショットを展開
  4. Create EC2
    dump用のECSコンテナインスタンスを作成
  5. Backup Exec and Out to EBS
    テーブル単位でパラレルにバックアップしEBSに保存
  6. Upload To S3
    EBSからS3にPUT
  7. Restore Test
  8. Cleanup

 この仕組みはmysqldumpの部分を別の、例えばpg_dumpに変えればPostgreSQLに対応できたり、データマスキングの仕組みに組み替えればマスキングプラットフォームができたりと使い回しができるというメリットがあります。

 本当は完全にServerlessで行いたかったのですが、これらの処理は時間がかかったり、ディスクI/Oを消費してしまったりするので、今回はDockerでEBSをマウントして解決をしています。この仕組みを入れるためにFargateでは実現できなかったため、一部でECS On EC2の環境を利用しています。

 そしてこれらの処理に必要なリソースは使用中に立ち上げ、処理が完了したら綺麗に掃除しているので本当に必要な時間帯のみ起動するように設計しました。

 また、Backupされたファイル自体はRestoreテストまで完了した時点で余程のことがない限り人が触れることがあってはならないため、独立したS3環境に配置するなど、セキュリティ的にも厳重に管理保管しています。

 せっかくここまでコード化されているので、今後ナレッジを貯めることによって、例えば全体のディスクサイズや1テーブルあたりのディスクサイズを確認して、このDatabaseは処理に時間がかかりそうだからインスタンスサイズを上げる、それでもダメならディスクサイズに応じて例えばi3ストレージを使ってみるなど、アーキテクチャそのものも自動的に、柔軟に選択できるようにしたいと考えています。

次のページ
ビズリーチサービスRestart Project

この記事は参考になりましたか?

BizReach Tech Blog連載記事一覧

もっと読む

この記事の著者

粟田 啓介(あわっち)(株式会社ビズリーチ)(アワタ ケイスケ)

大手サービス企業に入社後、アプリケーションエンジニアを経てDBAに転向。2018年3月にビズリーチ入社。現在はDBREとして全社的にDB基盤を整備している。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11607 2019/08/13 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー