BigData-JAWS 勉強会#18 登壇資料
https://jawsug-bigdata.connpass.com/event/215161/
こちらのイベントで発表した内容です。
〜 のデータ基盤〜MWAA+Redshiftで構成されたデータ基盤の構築2021/09/07 19:00~BigData-JAWS 勉強会#18面白法人カヤック 池田将士 @mashiike
View Slide
アジェンダ1. 自己紹介・会社紹介・事業紹介2. 背景・課題3. 設計・構築4. 成果5. まとめ6. 次回予告
自己紹介※アイコンは季節によってバリエーションがありますGithub,Twitter: @mashiike所属: 技術部役割:● データエンジニア● サーバーサイドエンジニア● SRE趣味: オンラインゲーム※2021/09 時点ではElite: Dangerousをプレイ日本酒: 八海山
会社紹介商号:株式会社カヤック所在地:鎌倉事業内容:日本的面白コンテンツ事業
会社紹介 は、一言でいうと・・・誰かが面白そうだ!と思ったことを一緒にやる会社(語弊)『つくる人を増やす』そんな経営理念の会社ですhttps://www.kayac.com/vision/vision 弊社ホームページより
事業紹介『大会』は選手にとって晴れ舞台しかし、大会を主催するためには大きな労力が必要大会主催者の力になる!このミッションを実現する世界的な大会プラットフォームを目指しています
アジェンダ(再掲)1. 自己紹介・会社紹介・事業紹介2. 背景・課題3. 設計・構築4. 成果5. まとめ6. 次回予告
背景Tonamelは2017年7月7日からβサービス開始(当時の名前はLobi-tournament)モジュラモノリスなPerlアプリケーションとして成長本番Aurora MySQLDB Readerに直接アクセス
背景2020年11月にダブルエリミネーションの実装トーナメント表管理モジュールが独立し、Go言語製のマイクロサービスユースケースや負荷等に適切であろうDynamoDBをデータソースとして採用Read Heavy『Purpose built databases』
背景Redashからトーナメント表のデータにアクセスできない!!!サービスの成長により、アプリケーションの構成が変わり、データのサイロ化が加速し始めました。新たなるデータ基盤の必要性2021年1月、、、Tonamelデータ基盤構築プロジェクトが始動(立案は2020年12月)
課題1. サービスの状況由来の課題として● 今後は旧来の様々なモジュールの分離独立を予想● 新機能は最初から、マイクロサービスとして実装モジュラモノリスアーキテクチャー =>マイクロサービスアーキテクチャーデータソースは多種多様、データ量の著しい増大2. データ基盤の構築における課題として● 社内のデータエンジニアの層が薄い。人という意味でコストが厳しい構築は1人(分業)保守・運用も1人(分業)期間は7月くらいまでに何かそれっぽいものが・・・楽に作れる! 管理コストの低め ! スケーラブルなデータ基盤が必要!!!!
un 本格運用構築調査・設計立案スケジュール構想2020年11月: プロジェクト構想(※当時別事業部)2020年12月: プロジェクト立案(リソース調整)2021年1月: データ基盤設計(現状のワークロード調査)2020年 2021年2021年3月: 構築開始2021年7月~: 本格運用人員数: 0.5人 (1人が分業)期間: 7ヶ月〜
主な検討要素1. ワークフローオーケストレーションはどうするのか?● Cron(or CloudWatch Events)+スクラッチ開発● Glue● Step Functions● Apache Airflow=> 使い勝手はステロイドCronなのでよいが、インフラ管理が大変2. データ保管場所(どこにデータを集める?) そしてクエリエンジンどうする?● S3 + Athena● Aurora MySQL● Redshift● BigQuery?コレ使いたいが、インフラの構成と管理が大変
主な検討要素https://www.youtube.com/watch?v=xiOsbCs7T9kその当時、AWS re:Invent 2020 救世主現る実はre:Inventの直前に発表はされてたhttps://aws.amazon.com/jp/about-aws/whats-new/2020/11/introducing-amazon-managed-workflows-for-apache-airflow-mwaa/マネージドなAirflowがAWSに来た・・・だと・・・使うなら今しかないっしょ!!!ワークフローオーケストレーションMWAAを採用
どこにデータを集めるのか?最終的にS3案とRedshift案まで絞ることができました。その際、AWSの方とご相談する機会があり、大いなるお力添えを頂きました。 ※BigQueryは今後のデータ量増大によるNATGatwayの通信量とノウハウの少なさから選択肢からなくなる。RedshiftS3 (+ Aurora MySQL)
どこにデータを集めるのか?データを集める場所を決める際の大きな決定要素● データレイクの構築ノウハウがない● サイロ化はできるだけ防ぎたい● Redshiftの運用ノウハウは社内にある。● SQL実行構文の差異をできるだけ少なくしたい(PrestoとMySQLは結構差がでかい)MWAA + Redshiftによるデータ基盤最終的にはに決定
設計完了 Redshift案(再掲)RedshiftMWAA
un 本格運用構築調査・設計立案スケジュール(再掲)構想2020年11月: プロジェクト構想(※当時別事業部)2020年12月: プロジェクト立案(リソース調整)2021年1月: データ基盤設計(現状のワークロード調査)2020年 2021年2021年3月: 構築開始2021年7月~: 本格運用人員数: 0.5人 (1人が分業)期間: 7ヶ月〜2月初旬:設計完了
実際に構築を開始してみたら・・・● 必要となるユースケースの優先順序が低下● Redshift MySQL Federated Queryのプレビューが開始構築を先送り楽に構築でき、プレビューでの使用感も良いのでFederated QueryのGAを待つことに
実際に構築を開始してみたら・・・SUPERがDynamoDBと相性良い!● DDB StreamをKinesisで取り込み。● PartiQLでわかりやすいアクセス!
実際に構築を開始してみたら・・・JSON string value にSuper型が救世主LogがJSON in JSONSpectrumではvarchar(max)として読むJSON_PERSEでSuper型に!
実際に構築を開始してみたら・・・JSON string value にSuper型が救世主LogがJSON in JSONSpectrumではvarchar(max)として読むJSON_PERSEでSuper型に!JSON in JSON
実際に構築を開始してみたら・・・JSON string value にSuper型が救世主LogがJSON in JSONSpectrumではvarchar(max)として読むJSON_PERSEでSuper型に!Varcharで定義してjson_parseでSuper型に
実際に構築を開始してみたら・・・JSON string value にSuper型が救世主LogがJSON in JSONSpectrumではvarchar(max)として読むJSON_PERSEでSuper型に!クエリしやすい!※enable_case_sensitive_identifier を TRUEにしておくことCamelCaseのKeyなJSONデータも読めるのでおすすめ。
実際に構築を開始してみたら・・・AirflowはDAGと呼ばれるものの単位でワークフローを表現DAGはタスクの依存関係で表現タスクの実装は以下の組み合わせで表現● Operator : 処理を実行するもの● Sensor : 処理を待つもの・検出するもの3rdParty製のOperatorがたくさんある自作のCustomOperatorもできる。
実際に構築を開始してみたら・・・Airflowはタスクの実行管理のためのGUIが超強力Cronの延長として使う分には困ることは少ない
実際に構築を開始してみたら・・・CustomOperatorは沼● テストがないと辛い。● Airflowのアップデートの影響を思わず受ける(Hook消滅、import path変更 etc…)● トラブルシュートが大変● Pythonに書きなれてないと大変LambdaやECS Taskを起動するようなOperatorBashOperatorの積極的な利用をおすすめします。(でも使いこなせると便利)
実際に構築を開始してみたら・・・CustomOperatorでUNLOAD! S3に書き出す。COPYコマンドでS3から読み込む!!!S3の読み書きでデータレイク的なものはできる。しかし、、、データカタログがないので沼化!!!Lake Formationの出番か?
実際に構築を開始してみたら・・・データ基盤の性能としては良いのでは?● MWAAの(Custom)Operatorで任意の場所にデータを搬送可能(Slack, Spreadsheet, S3, etc…: 色々なレポーティング)● DDB Streamは実質的にはChange Data Capture(DDB StreamをMinutelyで処理を行っている。遅延が大体5分以内)● Redshiftのコンピューティングのちからは強いPreviewのMySQL Federated Queryも加われば、ほぼ全てのデータがニアリアルタイムでRedshiftに集約可能 (GAが待ち遠しい)何より、管理が楽
un 本格運用構築調査・設計立案スケジュール(再掲)構想2020年11月: プロジェクト構想(※当時別事業部)2020年12月: プロジェクト立案(リソース調整)2021年1月: データ基盤設計(現状のワークロード調査)2020年 2021年2021年3月: 構築開始2021年7月~: 本格運用人員数: 0.5人 (1人が分業)期間: 7ヶ月〜2月初旬:設計完了 6月:本格的な運用開始
実際のデータ基盤の活用例 (認定大会支援)ゲームデベロッパーや3rdパーティと協力し、大会主催者の応援活動支援の条件がタイトルごとに異なる
実際のデータ基盤の活用例 (認定大会支援)従来の運用フローここが大変!Redashからトーナメント表データにアクセスできないので、TonamelサービスのWeb上で公開されている情報をオペレータが確認しに行っていた。確認するものの例● 大会規模● 大会開催日時● 参加者のアクセス情報etc...従来は人の目が頼り
実際のデータ基盤の活用例 (認定大会支援)データ基盤を使った運用フローSpreadsheetをデータ基盤が読んで、判断に必要な情報を付加して書き戻すようにした。基本的にはSpreadsheetを見ればOKMWAAのDAG
実際のデータ基盤の活用例認定大会支援● オペレータがWebサイトを見に行く必要がなくなり業務が効率化カスタマーサポート● DynamoDBの情報を見れるため、Redashからトーナメント表情報を参照可能マーケティング● KPIのSlack通知や初歩的なオートメーションで素早く情報キャッチMWAA+Redshiftによるデータ基盤の導入よって・・・
まとめサービスの成長に伴い、データベースが増えるそのため、データのサイロ化が加速そこで、MWAA+Redshiftでデータ基盤を構築・運用し始めたメリット● SQLだけでほぼETLが完結する● RedshiftにSuper型が登場、半構造データが取り扱い!より強力になった。● MWAA(Airflow)はCronの延長として使う分には使いやすい。● インフラの構成・管理が楽デメリット● この構成だけだと、データカタログがないのでS3が沼化し始める● CustomOperatorに手を出すと沼に浸かり始めるので要注意その他● 弊社ではデータエンジニアの仲間を募集しています。(助けてください。)
次回予告なんとか軌道に乗ってきたTonamelのデータ基盤、 そこに様々な問題が浮上する。 https://nakanoshima-dev.connpass.com/event/221243/発表予定
Develop環境にしか存在しない機能やマイクロサービスProduction環境 Develop環境● 『Productionにテーブルができるのは・・・リリース前日かなー?』● 『リリースしたらできる限り早くデータを見たい。これとこれ・・・』
増え続けるコピペSQLどうしても、似たような処理が出てくるよね・・・CONVERT_TIMEZONE(‘JST’, getdate()) ...CONVERT_TIMEZONE(‘JST’, getdate()) ...CONVERT_TIMEZONE(‘JST’, getdate()) …DATE_TRUNC(‘hour’, getdate())...DATE_TRUNC(‘hour’, getdate())...DATE_TRUNC(‘hour’, getdate())...破綻するデータモデル『実はここ、部分的にSPAでして・・・』『nginxのアクセスログが当てにならないだ・・・と・・・』『実はZONeの申請というのもありまして・・・』
迷走し始める のデータ基盤… そして、現る救世主https://www.getdbt.com/https://www.amazon.co.jp/Building-Scalable-Data-Warehouse-Vault/dp/0128025107〜人のスケールはできないが、データ基盤はスケールさせたい〜この先、いったい何が待ち受けているのだろうか?
俺(たち)の戦いはこれからだ!!!!※データエンジニア周りの採用活動は継続的に行っています。のデータ基盤次回:〜データモデリング編〜https://nakanoshima-dev.connpass.com/event/221243/発表予定
ありがとうございました