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
Serverlessで構成するEvent Driven Data Platform
Search
Kazuki Maeda
December 23, 2020
Programming
0
48
Serverlessで構成するEvent Driven Data Platform
Kazuki Maeda
December 23, 2020
Tweet
Share
More Decks by Kazuki Maeda
See All by Kazuki Maeda
生成AIを用いた 新しい学びの体験を 提供するまでの道のり
kzkmaeda
0
27
生成AIによって変わる世界 -可能性とリスクについて考える-
kzkmaeda
2
120
新しいことを組織ではじめる、そしてつづける
kzkmaeda
5
800
20240824_JAWS_PANKRATION_2024
kzkmaeda
0
54
20240416_devopsdaystokyo
kzkmaeda
1
390
20240321_生成AI時代のDevOps
kzkmaeda
2
1k
20240222_LangChain_ver0.1.0_LCEL
kzkmaeda
4
370
20240201_クラウド利用料を 半額にするために取り組んだ10+のコト
kzkmaeda
4
7.2k
20231027_Bedrock勉強会
kzkmaeda
3
1.3k
Other Decks in Programming
See All in Programming
The Efficiency Paradox and How to Save Yourself and the World
hollycummins
1
440
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
330
Recoilを剥がしている話
kirik
5
6.7k
クリエイティブコーディングとRuby学習 / Creative Coding and Learning Ruby
chobishiba
0
3.9k
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
3
300
Go の GC の不得意な部分を克服したい
taiyow
2
780
Haze - Real time background blurring
chrisbanes
1
510
Jakarta EE meets AI
ivargrimstad
0
240
fs2-io を試してたらバグを見つけて直した話
chencmd
0
230
情報漏洩させないための設計
kubotak
0
100
PHPUnitしか使ってこなかった 一般PHPerがPestに乗り換えた実録
mashirou1234
0
170
PHPとAPI Platformで作る本格的なWeb APIアプリケーション(入門編) / phpcon 2024 Intro to API Platform
ttskch
0
210
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
YesSQL, Process and Tooling at Scale
rocio
169
14k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Become a Pro
speakerdeck
PRO
26
5k
Git: the NoSQL Database
bkeepers
PRO
427
64k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
247
1.3M
Into the Great Unknown - MozCon
thekraken
33
1.5k
Navigating Team Friction
lara
183
15k
Scaling GitHub
holman
458
140k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Transcript
Serverlessで構成する Event Driven Data Platform SREマネージャー 前田
自己紹介 • 前田 和樹( @kzk_maeda ) • SRE Manager at
Progate • ギターやベースなど弾きます • 週末は2人の子どもに忙殺されてます
1. About Company 2. About System 3. About Data Platform
4. About Future 5. Closing Index
About Company 何をしている会社?
オンラインプログラミングサービス 初心者でも学びやすい学習環境をご用意。 日本語版と英語版を展開しています。 イラスト中心のスライドで学ぶ プログラムを書いて学ぶ 紙の本よりも直感的で、動画よりも学びやすい「スライド学習」を採用しました。 自分のペースで学習できること、復習しやすいことが強みです。 実際にプロダクトを作りながら学ぶから、使えるスキルが身につきます。 ブラウザ上でコードを書いて結果も確認。すぐにプログラミングが実践できます。 |
About Our Service 概要
スライド 演習 スライド 演習 達成 達成
累計ユーザー数推移 日本 over 1,450,000人 (2020/12/01 時点) 単位:人
累計ユーザー数推移 インド (2020/12/01 時点) over 200,000人 単位:人
累計ユーザー数推移 インドネシア (2020/12/01 時点) over 70,000人 単位:人
About System どうやって創っている?
Architecture概要
複数のAWSアカウントをOrganizationで管理 - Production / Staging / Base(認証用) Architecture概要
基本のWeb機能は ALB + EC2(ASG) + Redis + Aurora(MySQL) Github +
CircleCIでRolling Update Architecture概要
ユーザーのコード実行環境として EC2でホストしたDocker Swarmクラスタを構成 - chatbotからcluster毎B/G Deploy可能 Architecture概要
ProductionのSwarm Clusterは複数Regionに分散 Architecture概要
Application周りのログはfluentd+KDF -> S3 監視はNewRelicに統合中 Architecture概要
使用技術 • Frontend ◦ React / React Native • Server-Side
◦ Ruby on Rails / Node.js • Infrastructure ◦ AWS(ALB, EC2, Fargate, RDS, ElastiCache, Lambda, APIGW, KDF, etc...) ◦ Terraform / Serverless Framework ◦ Docker / Docker Swarm • Other ◦ Github / DockerHub / Circle CI / Slack / Asana / DocBase
About Data Platform データ基盤について
対象とするデータ 更新頻度 分析活用 埋蔵金 • 活用用途を見出せてないデータ Master Data • Users
• Lessons • Languages Transactional Data • UserCodes • LessonHistories • Logs
データ要件 • 1日ごとの全件同期 • センシティブなデータの取り扱い ◦ 特定データには認可された人のみがアクセス可能な状態 • BI(redash)からクエリ
Data Platform Architecture
Data Platform Architecture RDS上のデータを DataCatalog化する
Data Platform Architecture • RDS SnapshotのS3Export機能を活用 ◦ parquet形式のファイルをS3に定期Upload可能 ◦ RDSに対してread負荷がかからない
• Data PipelineのレイヤはDatalake的な思想で構成 ◦ 収集→蓄積→変換→分析 ◦ 各レイヤをイベントドリブンで接続 • DataCatalogをセキュリティレベル別に分離 ◦ Sensitiveなデータとそうではないデータ ◦ 同一DataSourceからPipeline上で複数のCatalogを生成
Data Platform Architecture 収集 蓄積 変換 分析 DataPipelineをDatalake思想で構成 収集→蓄積→変換→分析 各Layerはイベントドリブン(SNS/SQS
+ Lambda)で接続
Data Platform Architecture Event RDSのSnapshot関連のイベントトリガー は、RDS Event Subscription→SNS SNSのSubscriberとしてLambdaが起動 Event
Event
Data Platform Architecture Sensitive Data Normal Data Sensitive DataのLayerとNormal Dataの
Layerで構成 ここもイベント接続
詰まった点1 RDS Event Subscriptionの仕様
なにが起きたか • Snapshotの作成とSnapshot Exportが同じEvent SubscriptionのEvent Categoryに属するので、どちらも同じSNS TopicにSubscribeされる • 別のEventとして単一責務のLambdaをSubscriberに設定する予定だった が、それぞれのEventを同一Lambda内で処理する必要性が
なにが起きたか 同じEvent Subscriptionから 通知される
どうしたか • 後続のLambdaを同一Functionとし、SNSのMessageによって実行する処理 を分岐 ◦ snapshot created イベントに対しては snapshot export
を実施 ◦ export task completed イベントに対しては後続の GlueJobをKick • 管理上関数を分けたかったが、全体をterraformで管理することとResource Groupを有効にすることで許容
詰まった点2 Snapshot Exportの仕様
なにが起きたか • RDS Snapshot ExportタスクによってSnapshotがS3にExportされる際、 Export Task名のPrefix配下にSnapshotが配置される • 後続処理でExportされたSnapshotデータを特定する際に、Export Task名と
して何が指定されたかを正確に把握する必要がある ◦ yyyy-mm-ddなどで値を決めると、リトライが発生した際のハンドリングが面倒
なにが起きたか ここで決めたTask名を こっちで正確に知る必要がある
どうしたか • Export Task実行時に決めた名前をSQSにメッセージング • 後続のLambdaの中でSQSにキューイングされたメッセージから設定された Export Task名を取得し、S3上のPathを把握 • GlueJob
/ Crawlerの実行を容易にするため、/latest 配下にcopy
どうしたか Task名をQueuing SQSからTask名を取得→/latestにcopy
詰まった点3 Data Pipelineのモニタリング
なにが起きたか • StepFunction管理にしなかったので、Pipelineのどこまで実行されているのか などのモニタリングが困難 • X-Rayでかっこよくいけるやろと思ってたけど、机上で調べてる限りやりたいこ との実現は難しそう ※理想
どうしたか • PipelineのStep毎にDynamoDBに状況を書き込むようにした ◦ Export Task名をPrimary Keyとして利用 • エラーで落ちた場合はエラーメッセージもDDBに格納されるので、どこまで実 行されてなぜ落ちたのかの大体の情報はDDBで完結
Step毎に書き込み エラー時はメッセージも
その他の知見 • 大まかなアーキテクチャはAWSのAsk an expertを活用してレビューしてもら えた。ライトに相談できる場としてすごく助かる。 • AWSから毎日のようにアナウンスされる便利機能アップデートは銀の弾丸で はない。自分たちのシステムに落とし込む上では考えたり実装したりするポイ ントがたくさん出てくる
• AWSサービスのアイコンを並べて設計した気になってるおじさんにならないよ うに気を付ける
About Future 今後の展望
データの更なる活用 更新頻度 分析活用 埋蔵金 • 活用用途を見出せてないデータ Master Data Transactional Data
活用ラインの 拡大 多様なトランザクショ ンデータ取得
データの更なる活用 データ活用の 多面化・組織化
新しい技術の活用 • 先日リリースされたマネージドAirFlow(MWAA)で後半のジョブネットはワーク フロー化できるかもしれないので、折を見て検証したい • 今日発表された Glue Elastic View との親和性など??
◦ 作ってるやつほぼ捨てられる・・・・???
Closing 最後に
結論 • RDSのsnapshot export機能を使えば、Master DataをDatalakeに簡単に格 納することが可能 • だと思っていた時期がありました。 • イベントドリブンなパイプラインのモニタリングはX-Ray
• だと思っていた時期がありました(要追加検証)。 • マネージドサービスを実要件での活用に落とし込んで行くには、結局はエンジ ニアリングが必要。 • AWS支援体制は積極的に活用していくのがいい
エンジニア積極採用中 • Progateではエンジニアを積極採用しています • プログラミング教育事業に興味がある、グローバルサービスに携わりたい、な ど、気になるポイントあれば是非ご連絡ください • 詳しくは採用サイトへ ◦ https://prog-8.com/about/careers
TechBlogはじめました • Progate TechBlogを開設しました • Advent Calendar期間を活用し、積極的に発信していきます • 詳しくはBlog ◦
https://tech.prog-8.com/
ご清聴ありがとうございました