Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
The Design for Serverless ETL
Pipeline
データ分析基盤のレガシーなデータロードを
サーバレスでフルリプレースするまでの道のり
株式会社リクルートライフスタイル
山田 雄・秋本 大樹・白鳥 昇治
2018/0...
■山田 雄(ヤマダ ユウ)
  @nii_yan
株式会社 リクルートライフスタイル
ネットビジネス本部データマネジメント2G
SIerにて主に組込み系の開発に従事したのち、フリーランスとし
て独立。フリーランスの間に、シミュレーションシステム...
会社紹介
Title text
一生のうち、数回つかうサービス
LIFE EVENT
日常的に、つかうサービス
LIFE STYLE
Title text
一生のうち、数回つかうサービス
LIFE EVENT
日常的に、つかうサービス
LIFE STYLE
リクルートライフスタイルの
データ分析基盤の歩み
分析基盤の変遷
2013
2014
2015
2016
2017
2018
✔TreasureData を一部 BQ へ移行
✔RedshiftSpectrum 導入
✔Redshift を一部 BQ へ移行
✔BigQuery 導入
✔Net...
分析基盤の概要
Spectrum
Oracle
Exadata
SPSS
Treasure
Data
aginity
CHEETAH
DIGITAL
Adobe
Analytics
CSV
外部データ
アクセスログ
アプリログ
HPB
JLN
...
■秋本 大樹(アキモト ダイキ)
株式会社 リクルートライフスタイル
ネットビジネス本部データマネジメント2G
2011年新卒としてSIerに入社。
2014年にゲーム会社に転職。ゲームデータを集積する分析基
盤の構築、および社内KPI算出の自...
■白鳥 昇治( シロトリ ショウジ)
  @irotoris
株式会社 リクルートライフスタイル
ネットビジネス本部データマネジメント2G
インフラエンジニアとしてオンプレミスKubernetes環境の開発・
運用に従事後、2017年にリクルー...
レガシーな構成のつらみ
技術のツギハギ
● 自前サーバで動くシェルで書かれたレガシーなコード
○ 800行を超えるシェルスクリプトファイル
● 複数システムをツギハギするスケジュール実行
○ 終了するタイミングを見計らって後続の処理を実行
● データ量に関連した処理の...
データ間の依存関係
● 後続のマート作成で用いるテーブルは優先度を高めてロードする
必要がある。
● データマート間にも依存関係がある。
● 現在はJP1での「イベント受信」機能を用いて優先度を実現してい
る。
優先度高
ロード
優先度低
ロー...
スケジュール実行での運用が
つらい
● 障害発生時のリカバリが大変。
● 1つの実行単位に複数のテーブルを含めており、テーブル単位で
のロードができていない。
● 前の処理の時間をずらすと、後続の処理も合わせて時間をずらす
必要がある。
JP1
自前サーバでの開発がつらい
● テスト環境がないので気軽にテストできない。
● 本番に影響が出るので古いバージョンでの開発を強いられてい
る。
● 800行を超えるシェルスクリプトのメンテが辛すぎる。
古いパッケージ シェルスクリプト
本番に影...
つらみを解消したい
そう、それがMigaloo Project
The Design for Serverless ETL
Pipeline
と、その前に
前回のServerlessconf Tokyo !!
● サーバーレスにしてサーバー管理を極力少なく
● イベントドリブンでオーケストレートする構成
● 自動リトライとアラートを作り込んで
● 運用0を目指しました
前回のServerlessconf Tokyo !!
前回のServerlessconf Tokyo !!
Q.「いま運用どうですか?」
データ量:増えてる
機械学習バッチのリソース使用量:増えてる
前回のServerlessconf Tokyo !!
Q.「いま運用どうですか?」
データ量:増えてる
機械学習バッチのリソース使用量:増えてる
A.「全然、運用ないです」
前回のServerlessconf Tokyo !!
A.「全然、運用ないです」
● Slackのアラート確認はしてるけど、だいたい自動リトライ済み
● データ量も処理量も増えてるけどデータ量に応じてスケールする
● システムモニタリング用途の...
うまくいったので今回もLet's
Serverless!!
前回のServerlessconf Tokyo !!
The Design for Serverless ETL
Pipeline
● サーバー管理が極力少ないパイプラインと実行環境
● イベントドリブン & 疎結合なアーキテクチャ
● スケーラビリティと処理の並列数の管理
● イベント(データ)のステータス管理と活用
● 運用が楽になるロギング・モニタリング
アーキテクチ...
File/Log (CSV/JSON)
HPB
JLN
HPG
Database
Redshift /
Spectrum
BigQuery
Data Lake (S3)
Runtime
Pipeline(Load to DataLake)
Pi...
Pipeline(Load to DataLake)
Serverless ETL Pipeline
Pipeline(Load to Redshift)
Pipeline(Load to BigQuery)
EventStatus
+Runt...
Pipeline(Load to DataLake)
Serverless ETL Pipeline
Pipeline(Load to Redshift)
Pipeline(Load to BigQuery)
EventStatus
+Runt...
Serverless ETL Pipeline
File/Log (CSV/JSON)
HPB
JLN
HPG
Database
EventStatus
Redshift /
Spectrum
BigQuery
Data Lake (S3)
P...
Serverless ETL Pipeline
File/Log (CSV/JSON)
HPB
JLN
HPG
Database
EventStatus
Redshift /
Spectrum
BigQuery
Data Lake (S3)
P...
● サーバー管理が極力少ないパイプラインと実行環境
● イベントドリブン & 疎結合なアーキテクチャ
● スケーラビリティと処理の並列数の管理
● イベント(データ)のステータス管理と活用
● 運用が楽になるロギング・モニタリング
アーキテクチ...
サーバーレスなパイプラインと実行環境
● パイプラインはStep Functionsなどのワークフローエンジンと
AWS Lambdaをベースに処理を定義
● 実行環境はスケーラブルなAWS Batch、Glue、GKE
● 要件により一部はオ...
サーバーレスなパイプラインと実行環境
● パイプラインはStep Functionsなどのワークフローエンジンと
AWS Lambdaをベースに処理を定義
● 実行環境はスケーラブルなAWS Batch、Glue、GKE
● 要件により一部はオ...
● サーバー管理が極力少ないパイプラインと実行環境
● イベントドリブン & 疎結合なアーキテクチャ
● スケーラビリティと処理の並列数の管理
● イベント(データ)のステータス管理と活用
● 運用が楽になるロギング・モニタリング
アーキテクチ...
Redshift /
Spectrum
BigQuery
Data Lake (S3)
Pipeline(Load to DataLake)
Serverless ETL Pipeline
Pipeline(Load to Redshift)
...
File/Log (CSV/JSON)
HPB
JLN
HPG
Database
Redshift /
Spectrum
BigQuery
Pipeline(Load to Redshift)
Pipeline(Load to BigQuery...
File/Log (CSV/JSON)
Pipeline(Load to DataLake)
EventStatus
Runtime
HPB
JLN
HPG
Database
Redshift /
Spectrum
BigQuery
Pipel...
Data Lake (S3)
Redshift /
SpectrumPipeline(Load to BigQuery)
File/Log (CSV/JSON)
Pipeline(Load to DataLake)
EventStatus
Ru...
Data Lake (S3)
Pipeline(Load to BigQuery)
File/Log (CSV/JSON)
Pipeline(Load to DataLake)
EventStatus
Runtime
HPB
JLN
HPG
D...
File/Log (CSV/JSON)
HPB
JLN
HPG
Database
Redshift /
Spectrum
BigQuery
Data Lake (S3)
Runtime
Pipeline(Load to DataLake)
Pi...
File/Log (CSV/JSON)
HPB
JLN
HPG
Database
Redshift /
Spectrum
BigQuery
Data Lake (S3)
Runtime
Pipeline(Load to DataLake)
Pi...
File/Log (CSV/JSON)
HPB
JLN
HPG
Database
Redshift /
Spectrum
BigQuery
Data Lake (S3)
Runtime
Pipeline(Load to DataLake)
Pi...
File/Log (CSV/JSON)
HPB
JLN
HPG
Database
Redshift /
Spectrum
BigQuery
Data Lake (S3)
Runtime
Pipeline(Load to DataLake)
Pi...
File/Log (CSV/JSON)
HPB
JLN
HPG
Database
Redshift /
Spectrum
BigQuery
Data Lake (S3)
Runtime
Pipeline(Load to DataLake)
Pi...
File/Log (CSV/JSON)
HPB
JLN
HPG
Database
Redshift /
Spectrum
BigQuery
Data Lake (S3)
Runtime
Pipeline(Load to DataLake)
Pi...
● サーバー管理が極力少ないパイプラインと実行環境
● イベントドリブン & 疎結合なアーキテクチャ
● スケーラビリティと処理の並列数の管理
● イベント(データ)のステータス管理と活用
● 運用が楽になるロギング・モニタリング
アーキテクチ...
パイプラインとスケーラビリティ
● マネージドなパイプラインにより無限のスケーラビリティを確
保
Runtime
Pipeline(Load to DataLake)
Eve
nt
Eve
ntEvent
スケールします
×1,000
スケール...
● マネージドなパイプラインにより無限のスケーラビリティを確
保
● しかしデータロード先がRedshiftなど処理がスケールしない
場合、イベントの同時処理の制御が必要
パイプラインとスケーラビリティ
Runtime
Pipeline(Loa...
● マネージドなパイプラインにより無限のスケーラビリティを確
保
● しかしデータロード先がRedshiftなど処理がスケールしない
場合、イベントの同時処理の制御が必要
● SQSの処理中のメッセージ数をポーリングし、処理中の同時
実行数を確...
● マネージドなパイプラインにより無限のスケーラビリティを確
保
● しかしデータロード先がRedshiftなど処理がスケールしない
場合、イベントの同時処理の制御が必要
● SQSの処理中のメッセージ数をポーリングし、処理中の同時
実行数を確...
● マネージドなパイプラインにより無限のスケーラビリティを確
保
● もちろんロード処理の宛先がスケールする場合は並列度を
気にせず実行できる
パイプラインとスケーラビリティ
Pipeline(Load to DataLake)
Eve
nt
...
● サーバー管理が極力少ないパイプラインと実行環境
● イベントドリブン & 疎結合なアーキテクチャ
● スケーラビリティと処理の並列数の管理
● イベント(データ)のステータス管理と活用
● 運用が楽になるロギング・モニタリング
アーキテクチ...
イベントとデータのステータス管理
● 各パイプラインで、現在のイベントと処理ステータスを
一元的にDynamoDBで管理
○ システム:Lambdaの2重発火による重複起動を制御
○ システム:データロード後のマート作成実行を制御
○ ユーザー...
イベントとデータのステータス管理
● イベントとステータスの変更履歴をRDSで管理・分析
● DynamoDB Streamsでアイテムの変更をRDSへストリーミン
グインサート
● メンバのスキル的にSQLによる分析が可能→RDSに決定
Pi...
イベントとデータのステータス管理
● イベントとステータスの変更履歴をRDSで管理・分析
● DynamoDB Streamsでアイテムの変更をRDSへストリーミン
グインサート
● メンバのスキル的にSQLによる分析が可能→RDSに決定
Pi...
● サーバー管理が極力少ないパイプラインと実行環境
● イベントドリブン & 疎結合なアーキテクチャ
● スケーラビリティと処理の並列数の管理
● イベント(データ)のステータス管理と活用
● 運用が楽になるロギング・モニタリング
アーキテクチ...
アプリケーションログとシステムモニタリング
● ログはDatadogに集約。重要な通知はSlackへ。
● Lambda、AWS Batch、On-Premiseの様々な実行環境のプ
ログラムログを一元的に検索可能。
Logging Alert
アプリケーションログとシステムモニタリング
● マネージドサービスのメトリクスのアラートもDatadogに集
約。重要な通知はSlackへ。
Metrics Alert
アプリケーションログとシステムモニタリング
● マネージドサービスのメトリクスのアラートもDatadogに集
約。重要な通知はSlackへ。
Metrics Alert
Datadogでログとメトリクスを
一元的に管理・検索・モニタリング
File/Log (CSV/JSON)
HPB
JLN
HPG
Database
Redshift /
Spectrum
BigQuery
Data Lake (S3)
Runtime
Pipeline(Load to DataLake)
Pi...
リプレースの際の教訓
既存の運用に
設計が引きずられる
● 運用をなるべく変えないようにすると、既存のインターフェースに引
きずられてサーバ依存の設計になりがち。
● 運用も含めて、リプレースの対象だという共通認識を作る。ただし
これには運用者の同意も必要なので事前...
スコープの肥大化
● システムのリプレースにおいては、今までのつらみを解消しようとし
てスコープが肥大化しがち。
● 要望を明文化して残しておき「やるやらない」の判断をしてからプロ
ジェクトを進めるようにする。
新しいシステムが全てを叶えてくれ...
       エンジニア募集中!!
The Design for Serverless ETL Pipeline データ分析基盤のレガシーなデータロードをサーバレスでフルリプレースするまで道のり
The Design for Serverless ETL Pipeline データ分析基盤のレガシーなデータロードをサーバレスでフルリプレースするまで道のり
Upcoming SlideShare
Loading in …5
×

The Design for Serverless ETL Pipeline データ分析基盤のレガシーなデータロードをサーバレスでフルリプレースするまで道のり

1,392 views

Published on

2018年9月30日開催『Serverlessconf Tokyo 2018』での発表資料。
http://tokyo.serverlessconf.io/home.html

株式会社リクルートライフスタイル
山田 雄・秋本 大樹・白鳥 昇治

Published in: Engineering
  • Be the first to comment

The Design for Serverless ETL Pipeline データ分析基盤のレガシーなデータロードをサーバレスでフルリプレースするまで道のり

  1. 1. The Design for Serverless ETL Pipeline データ分析基盤のレガシーなデータロードを サーバレスでフルリプレースするまでの道のり 株式会社リクルートライフスタイル 山田 雄・秋本 大樹・白鳥 昇治 2018/09/30
  2. 2. ■山田 雄(ヤマダ ユウ)   @nii_yan 株式会社 リクルートライフスタイル ネットビジネス本部データマネジメント2G SIerにて主に組込み系の開発に従事したのち、フリーランスとし て独立。フリーランスの間に、シミュレーションシステムの開発 や、大手ECサイトのメールマーケティング用分析基盤の構築を 経験。2015年リクルートライフスタイルへ転職。リクルートライフ スタイルの共通分析基盤を構築する傍ら、chatbotの開発や、 メールマーケティングにも関わる。 ビッグデータ周りの技術が好物。あと焼きそばも好物。
  3. 3. 会社紹介
  4. 4. Title text 一生のうち、数回つかうサービス LIFE EVENT 日常的に、つかうサービス LIFE STYLE
  5. 5. Title text 一生のうち、数回つかうサービス LIFE EVENT 日常的に、つかうサービス LIFE STYLE
  6. 6. リクルートライフスタイルの データ分析基盤の歩み
  7. 7. 分析基盤の変遷 2013 2014 2015 2016 2017 2018 ✔TreasureData を一部 BQ へ移行 ✔RedshiftSpectrum 導入 ✔Redshift を一部 BQ へ移行 ✔BigQuery 導入 ✔NetezzaEOSL ✔DataLake 構成導入 ✔Exadata 導入 ✔Hadoop 除却 ✔TreasureData 導入 ✔Redshift のノード拡張 ✔リクルート分社化に伴い、独自の 分析基盤 Hadoop 提供スタート ✔Netezza, Redshift 導入 ✔オンプレ- AWS 間に専用線導入 ✔Redshift のノード拡張 ✔Netezza のスケール検討 ✔Netezza のスケールアウト完了 ✔Redshift のノード拡張 ✔Redshift の multi クラスタ導入
  8. 8. 分析基盤の概要 Spectrum Oracle Exadata SPSS Treasure Data aginity CHEETAH DIGITAL Adobe Analytics CSV 外部データ アクセスログ アプリログ HPB JLN HPG 事業データ BigQuery IBM Watson Campaign Automation S3 Redshift
  9. 9. ■秋本 大樹(アキモト ダイキ) 株式会社 リクルートライフスタイル ネットビジネス本部データマネジメント2G 2011年新卒としてSIerに入社。 2014年にゲーム会社に転職。ゲームデータを集積する分析基 盤の構築、および社内KPI算出の自動化を行う。 2017年12月よりリクルートライフスタイルに転職。現在は次期 ETL基盤の構築とクラウドAIサービスの社内導入に奮闘中。 最近のいち推しサービスはGoogleColaboratory 趣味は将棋を見ること。
  10. 10. ■白鳥 昇治( シロトリ ショウジ)   @irotoris 株式会社 リクルートライフスタイル ネットビジネス本部データマネジメント2G インフラエンジニアとしてオンプレミスKubernetes環境の開発・ 運用に従事後、2017年にリクルートライフスタイルに入社。 データエンジニアとしてデータ分析基盤やサーバーレスな機械 学習基盤の開発・運用などに携わる。 Docker ❤ Kubernetes ❤ CD/CI ❤ Serverless ❤ BigData 夢は山でペンション経営。
  11. 11. レガシーな構成のつらみ
  12. 12. 技術のツギハギ ● 自前サーバで動くシェルで書かれたレガシーなコード ○ 800行を超えるシェルスクリプトファイル ● 複数システムをツギハギするスケジュール実行 ○ 終了するタイミングを見計らって後続の処理を実行 ● データ量に関連した処理の長時間化Shell Script 自前サーバ AWS GCP
  13. 13. データ間の依存関係 ● 後続のマート作成で用いるテーブルは優先度を高めてロードする 必要がある。 ● データマート間にも依存関係がある。 ● 現在はJP1での「イベント受信」機能を用いて優先度を実現してい る。 優先度高 ロード 優先度低 ロード マートA 作成 マートB 作成 マートC 作成 JP1
  14. 14. スケジュール実行での運用が つらい ● 障害発生時のリカバリが大変。 ● 1つの実行単位に複数のテーブルを含めており、テーブル単位で のロードができていない。 ● 前の処理の時間をずらすと、後続の処理も合わせて時間をずらす 必要がある。 JP1
  15. 15. 自前サーバでの開発がつらい ● テスト環境がないので気軽にテストできない。 ● 本番に影響が出るので古いバージョンでの開発を強いられてい る。 ● 800行を超えるシェルスクリプトのメンテが辛すぎる。 古いパッケージ シェルスクリプト 本番に影響が出る
  16. 16. つらみを解消したい そう、それがMigaloo Project
  17. 17. The Design for Serverless ETL Pipeline
  18. 18. と、その前に
  19. 19. 前回のServerlessconf Tokyo !!
  20. 20. ● サーバーレスにしてサーバー管理を極力少なく ● イベントドリブンでオーケストレートする構成 ● 自動リトライとアラートを作り込んで ● 運用0を目指しました 前回のServerlessconf Tokyo !!
  21. 21. 前回のServerlessconf Tokyo !! Q.「いま運用どうですか?」 データ量:増えてる 機械学習バッチのリソース使用量:増えてる
  22. 22. 前回のServerlessconf Tokyo !! Q.「いま運用どうですか?」 データ量:増えてる 機械学習バッチのリソース使用量:増えてる A.「全然、運用ないです」
  23. 23. 前回のServerlessconf Tokyo !! A.「全然、運用ないです」 ● Slackのアラート確認はしてるけど、だいたい自動リトライ済み ● データ量も処理量も増えてるけどデータ量に応じてスケールする ● システムモニタリング用途のAmazon Elasticsearch Serviceのリソース見直しの運 用を実施
  24. 24. うまくいったので今回もLet's Serverless!! 前回のServerlessconf Tokyo !!
  25. 25. The Design for Serverless ETL Pipeline
  26. 26. ● サーバー管理が極力少ないパイプラインと実行環境 ● イベントドリブン & 疎結合なアーキテクチャ ● スケーラビリティと処理の並列数の管理 ● イベント(データ)のステータス管理と活用 ● 運用が楽になるロギング・モニタリング アーキテクチャ設計思想
  27. 27. File/Log (CSV/JSON) HPB JLN HPG Database Redshift / Spectrum BigQuery Data Lake (S3) Runtime Pipeline(Load to DataLake) Pipeline(Load to Redshift) Pipeline(Load to BigQuery) EventStatus +Runtime +Runtime Serverless ETL Pipeline
  28. 28. Pipeline(Load to DataLake) Serverless ETL Pipeline Pipeline(Load to Redshift) Pipeline(Load to BigQuery) EventStatus +Runtime +Runtime Runtime Redshift / Spectrum BigQuery File/Log (CSV/JSON) HPB JLN HPG Database Data Lake (S3)
  29. 29. Pipeline(Load to DataLake) Serverless ETL Pipeline Pipeline(Load to Redshift) Pipeline(Load to BigQuery) EventStatus +Runtime +Runtime Runtime Redshift / Spectrum BigQuery File/Log (CSV/JSON) HPB JLN HPG Database Data Lake (S3) Data Source Data Lake Data Warehouse
  30. 30. Serverless ETL Pipeline File/Log (CSV/JSON) HPB JLN HPG Database EventStatus Redshift / Spectrum BigQuery Data Lake (S3) Pipeline(Load to DataLake) Runtime Pipeline(Load to Redshift) Pipeline(Load to BigQuery) +Runtime +Runtime
  31. 31. Serverless ETL Pipeline File/Log (CSV/JSON) HPB JLN HPG Database EventStatus Redshift / Spectrum BigQuery Data Lake (S3) Pipeline(Load to DataLake) Runtime Pipeline(Load to Redshift) Pipeline(Load to BigQuery) +Runtime +Runtime ETL Pipeline + Runtime ETL Pipeline + Runtime ETL Pipeline + Runtime
  32. 32. ● サーバー管理が極力少ないパイプラインと実行環境 ● イベントドリブン & 疎結合なアーキテクチャ ● スケーラビリティと処理の並列数の管理 ● イベント(データ)のステータス管理と活用 ● 運用が楽になるロギング・モニタリング アーキテクチャ設計思想
  33. 33. サーバーレスなパイプラインと実行環境 ● パイプラインはStep Functionsなどのワークフローエンジンと AWS Lambdaをベースに処理を定義 ● 実行環境はスケーラブルなAWS Batch、Glue、GKE ● 要件により一部はオンプレサーバーを利用。これもワークフ ローからイベントドリブンで実行可能な状態で設計 ● ※オンプレのケース:大量データの圧縮処理してからデータ転送 Runtime Pipeline(Load to DataLake) Event スケール スケール OK スケール
  34. 34. サーバーレスなパイプラインと実行環境 ● パイプラインはStep Functionsなどのワークフローエンジンと AWS Lambdaをベースに処理を定義 ● 実行環境はスケーラブルなAWS Batch、Glue、GKE ● 要件により一部はオンプレサーバーを利用。これもワークフ ローからイベントドリブンで実行可能な状態で設計 ● ※オンプレのケース:大量データの圧縮処理してからデータ転送 Runtime Pipeline(Load to DataLake) Event スケール スケール OK スケール パイプラインはフルサーバレスで定義 コンテナベースでオンデマンドに起動する実行環境 要件によりサーバーをサーバーレスっぽく使う
  35. 35. ● サーバー管理が極力少ないパイプラインと実行環境 ● イベントドリブン & 疎結合なアーキテクチャ ● スケーラビリティと処理の並列数の管理 ● イベント(データ)のステータス管理と活用 ● 運用が楽になるロギング・モニタリング アーキテクチャ設計思想
  36. 36. Redshift / Spectrum BigQuery Data Lake (S3) Pipeline(Load to DataLake) Serverless ETL Pipeline Pipeline(Load to Redshift) Pipeline(Load to BigQuery) EventStatus +Runtime +Runtime Runtime File/Log (CSV/JSON) HPB JLN HPG Database Event Data
  37. 37. File/Log (CSV/JSON) HPB JLN HPG Database Redshift / Spectrum BigQuery Pipeline(Load to Redshift) Pipeline(Load to BigQuery) +Runtime +Runtime Data Lake (S3) Pipeline(Load to DataLake) Serverless ETL Pipeline EventStatus Runtime Event Data
  38. 38. File/Log (CSV/JSON) Pipeline(Load to DataLake) EventStatus Runtime HPB JLN HPG Database Redshift / Spectrum BigQuery Pipeline(Load to Redshift) Pipeline(Load to BigQuery) +Runtime +Runtime Serverless ETL Pipeline Data Lake (S3) Event Data
  39. 39. Data Lake (S3) Redshift / SpectrumPipeline(Load to BigQuery) File/Log (CSV/JSON) Pipeline(Load to DataLake) EventStatus Runtime HPB JLN HPG Database BigQuery+Runtime Serverless ETL Pipeline Data Pipeline(Load to Redshift) +Runtime Event
  40. 40. Data Lake (S3) Pipeline(Load to BigQuery) File/Log (CSV/JSON) Pipeline(Load to DataLake) EventStatus Runtime HPB JLN HPG Database BigQuery+Runtime Serverless ETL Pipeline Pipeline(Load to Redshift) +Runtime Redshift / Spectrum Data Event
  41. 41. File/Log (CSV/JSON) HPB JLN HPG Database Redshift / Spectrum BigQuery Data Lake (S3) Runtime Pipeline(Load to DataLake) Pipeline(Load to Redshift) Pipeline(Load to BigQuery) EventStatus +Runtime +Runtime Serverless ETL PipelineEvent Event Event 1イベント=1データがどこかに到達したとき イベントドリブン=データが到達したときに 次の処理が実行される
  42. 42. File/Log (CSV/JSON) HPB JLN HPG Database Redshift / Spectrum BigQuery Data Lake (S3) Runtime Pipeline(Load to DataLake) Pipeline(Load to Redshift) Pipeline(Load to BigQuery) EventStatus +Runtime +Runtime Serverless ETL Pipeline Event Message Event Message Event Message
  43. 43. File/Log (CSV/JSON) HPB JLN HPG Database Redshift / Spectrum BigQuery Data Lake (S3) Runtime Pipeline(Load to DataLake) Pipeline(Load to Redshift) Pipeline(Load to BigQuery) EventStatus +Runtime +Runtime Serverless ETL Pipeline Event Message Event Message
  44. 44. File/Log (CSV/JSON) HPB JLN HPG Database Redshift / Spectrum BigQuery Data Lake (S3) Runtime Pipeline(Load to DataLake) Pipeline(Load to Redshift) Pipeline(Load to BigQuery) EventStatus +Runtime +Runtime Serverless ETL Pipeline リトライ上限を超えて 失敗したイベントは DLQへ 別のパイプラインの失敗 は影響しない 後から来るイベントに は影響しない
  45. 45. File/Log (CSV/JSON) HPB JLN HPG Database Redshift / Spectrum BigQuery Data Lake (S3) Runtime Pipeline(Load to DataLake) Pipeline(Load to Redshift) Pipeline(Load to BigQuery) EventStatus +Runtime +Runtime Serverless ETL Pipeline ここだけ修正してデプ ロイ
  46. 46. File/Log (CSV/JSON) HPB JLN HPG Database Redshift / Spectrum BigQuery Data Lake (S3) Runtime Pipeline(Load to DataLake) Pipeline(Load to Redshift) Pipeline(Load to BigQuery) EventStatus +Runtime +Runtime Serverless ETL Pipeline ここだけ修正してデプ ロイ 各パイプラインの起動にSQSを挟むことで パイプライン同士を疎結合に保ち 1. 障害発生時の影響を小さくする 2. 小さく素早い変更を可能にする
  47. 47. ● サーバー管理が極力少ないパイプラインと実行環境 ● イベントドリブン & 疎結合なアーキテクチャ ● スケーラビリティと処理の並列数の管理 ● イベント(データ)のステータス管理と活用 ● 運用が楽になるロギング・モニタリング アーキテクチャ設計思想
  48. 48. パイプラインとスケーラビリティ ● マネージドなパイプラインにより無限のスケーラビリティを確 保 Runtime Pipeline(Load to DataLake) Eve nt Eve ntEvent スケールします ×1,000 スケールします ×1,000 ×1,000
  49. 49. ● マネージドなパイプラインにより無限のスケーラビリティを確 保 ● しかしデータロード先がRedshiftなど処理がスケールしない 場合、イベントの同時処理の制御が必要 パイプラインとスケーラビリティ Runtime Pipeline(Load to DataLake) Eve nt Eve ntEvent ×1,000 しんどい
  50. 50. ● マネージドなパイプラインにより無限のスケーラビリティを確 保 ● しかしデータロード先がRedshiftなど処理がスケールしない 場合、イベントの同時処理の制御が必要 ● SQSの処理中のメッセージ数をポーリングし、処理中の同時 実行数を確認、指定された同時実行数の場合は処理しない 制御を実現 パイプラインとスケーラビリティ Pipeline(Load to DataLake) Eve nt Eve ntEvent ×1,000 セーフ いま処理が最大並列数に達してる ので、このメッセージはまた後で実 行しよ。
  51. 51. ● マネージドなパイプラインにより無限のスケーラビリティを確 保 ● しかしデータロード先がRedshiftなど処理がスケールしない 場合、イベントの同時処理の制御が必要 ● SQSの処理中のメッセージ数をポーリングし、処理中の同時 実行数を確認、指定された同時実行数の場合は処理しない 制御を実現 パイプラインとスケーラビリティ Pipeline(Load to DataLake) Eve nt Eve ntEvent ×1,000 セーフ いま処理が最大並列数に達してる ので、このメッセージはまた後で実 行しよ。 DWH、RDBMSなどの処理がスケールしない環境の場合 SQS + Lambda + CloudWatch Eventで パイプラインの並列度をコントロール
  52. 52. ● マネージドなパイプラインにより無限のスケーラビリティを確 保 ● もちろんロード処理の宛先がスケールする場合は並列度を 気にせず実行できる パイプラインとスケーラビリティ Pipeline(Load to DataLake) Eve nt Eve ntEvent ×1,000 余裕一気に1,000イベント いくぞッ!
  53. 53. ● サーバー管理が極力少ないパイプラインと実行環境 ● イベントドリブン & 疎結合なアーキテクチャ ● スケーラビリティと処理の並列数の管理 ● イベント(データ)のステータス管理と活用 ● 運用が楽になるロギング・モニタリング アーキテクチャ設計思想
  54. 54. イベントとデータのステータス管理 ● 各パイプラインで、現在のイベントと処理ステータスを 一元的にDynamoDBで管理 ○ システム:Lambdaの2重発火による重複起動を制御 ○ システム:データロード後のマート作成実行を制御 ○ ユーザー:データロード完了時間(=データ鮮度)を確認 Pipeline(Load to DataLake) Event EventStatus このデータは 処理中だよ このデータは 処理完了だよ UpdateStatus
  55. 55. イベントとデータのステータス管理 ● イベントとステータスの変更履歴をRDSで管理・分析 ● DynamoDB Streamsでアイテムの変更をRDSへストリーミン グインサート ● メンバのスキル的にSQLによる分析が可能→RDSに決定 Pipeline(Load to DataLake) Event EventLogEventStatus Update
  56. 56. イベントとデータのステータス管理 ● イベントとステータスの変更履歴をRDSで管理・分析 ● DynamoDB Streamsでアイテムの変更をRDSへストリーミン グインサート ● メンバのスキル的にSQLによる分析が可能→RDSに決定 Pipeline(Load to DataLake) Event EventLogEventStatus Update システム間連携、ユーザビリティのためステータスを管理 ステータスログはデバッグ用に正規化して保全しておく
  57. 57. ● サーバー管理が極力少ないパイプラインと実行環境 ● イベントドリブン & 疎結合なアーキテクチャ ● スケーラビリティと処理の並列数の管理 ● イベント(データ)のステータス管理と活用 ● 運用が楽になるロギング・モニタリング アーキテクチャ設計思想
  58. 58. アプリケーションログとシステムモニタリング ● ログはDatadogに集約。重要な通知はSlackへ。 ● Lambda、AWS Batch、On-Premiseの様々な実行環境のプ ログラムログを一元的に検索可能。 Logging Alert
  59. 59. アプリケーションログとシステムモニタリング ● マネージドサービスのメトリクスのアラートもDatadogに集 約。重要な通知はSlackへ。 Metrics Alert
  60. 60. アプリケーションログとシステムモニタリング ● マネージドサービスのメトリクスのアラートもDatadogに集 約。重要な通知はSlackへ。 Metrics Alert Datadogでログとメトリクスを 一元的に管理・検索・モニタリング
  61. 61. File/Log (CSV/JSON) HPB JLN HPG Database Redshift / Spectrum BigQuery Data Lake (S3) Runtime Pipeline(Load to DataLake) Pipeline(Load to Redshift) Pipeline(Load to BigQuery) EventStatus +Runtime +Runtime Serverless ETL Pipeline ●サーバー管理が極力少ないパイプラインと実行環境 ●イベントドリブン & 疎結合なアーキテクチャ ●スケーラビリティと処理の並列数の管理 ●イベント(データ)のステータス管理と活用 ●運用が楽になるロギング・モニタリング
  62. 62. リプレースの際の教訓
  63. 63. 既存の運用に 設計が引きずられる ● 運用をなるべく変えないようにすると、既存のインターフェースに引 きずられてサーバ依存の設計になりがち。 ● 運用も含めて、リプレースの対象だという共通認識を作る。ただし これには運用者の同意も必要なので事前の調整が必須。 慣れた運用からの脱却 ログの保存先の変更 新しいツールの学習
  64. 64. スコープの肥大化 ● システムのリプレースにおいては、今までのつらみを解消しようとし てスコープが肥大化しがち。 ● 要望を明文化して残しておき「やるやらない」の判断をしてからプロ ジェクトを進めるようにする。 新しいシステムが全てを叶えてくれるわけではない。 スコープ スコープ あれもやりたい これもやりたい 一度リストに集約 そのままだと 膨れ上がる スコープの範囲を 明確化する
  65. 65.        エンジニア募集中!!

×