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

Serverlessで構成するEvent Driven Data Platform

Serverlessで構成するEvent Driven Data Platform

Kazuki Maeda

December 23, 2020
Tweet

More Decks by Kazuki Maeda

Other Decks in Programming

Transcript

  1. Serverlessで構成する
    Event Driven Data Platform
    SREマネージャー
    前田

    View Slide

  2. 自己紹介
    ● 前田 和樹(  @kzk_maeda )
    ● SRE Manager at Progate
    ● ギターやベースなど弾きます
    ● 週末は2人の子どもに忙殺されてます

    View Slide

  3. 1. About Company
    2. About System
    3. About Data Platform
    4. About Future
    5. Closing
    Index

    View Slide

  4. About Company
    何をしている会社?

    View Slide

  5. オンラインプログラミングサービス
    初心者でも学びやすい学習環境をご用意。
    日本語版と英語版を展開しています。
    イラスト中心のスライドで学ぶ
    プログラムを書いて学ぶ
    紙の本よりも直感的で、動画よりも学びやすい「スライド学習」を採用しました。
    自分のペースで学習できること、復習しやすいことが強みです。
    実際にプロダクトを作りながら学ぶから、使えるスキルが身につきます。
    ブラウザ上でコードを書いて結果も確認。すぐにプログラミングが実践できます。
    | About Our Service
    概要

    View Slide

  6. スライド 演習 スライド 演習
    達成 達成

    View Slide

  7. 累計ユーザー数推移
      日本
    over 1,450,000人
    (2020/12/01 時点)
    単位:人

    View Slide

  8. 累計ユーザー数推移
      インド
    (2020/12/01 時点)
    over 200,000人
    単位:人

    View Slide

  9. 累計ユーザー数推移
      インドネシア
    (2020/12/01 時点)
    over 70,000人
    単位:人

    View Slide

  10. About System
    どうやって創っている?

    View Slide

  11. Architecture概要

    View Slide

  12. 複数のAWSアカウントをOrganizationで管理
    - Production / Staging / Base(認証用)
    Architecture概要

    View Slide

  13. 基本のWeb機能は
    ALB + EC2(ASG) + Redis + Aurora(MySQL)
    Github + CircleCIでRolling Update
    Architecture概要

    View Slide

  14. ユーザーのコード実行環境として
    EC2でホストしたDocker Swarmクラスタを構成
    - chatbotからcluster毎B/G Deploy可能
    Architecture概要

    View Slide

  15. ProductionのSwarm Clusterは複数Regionに分散
    Architecture概要

    View Slide

  16. Application周りのログはfluentd+KDF -> S3
    監視はNewRelicに統合中
    Architecture概要

    View Slide

  17. 使用技術
    ● 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

    View Slide

  18. About Data Platform
    データ基盤について

    View Slide

  19. 対象とするデータ
    更新頻度
    分析活用
    埋蔵金
    ● 活用用途を見出せてないデータ
    Master Data
    ● Users
    ● Lessons
    ● Languages
    Transactional Data
    ● UserCodes
    ● LessonHistories
    ● Logs

    View Slide

  20. データ要件
    ● 1日ごとの全件同期
    ● センシティブなデータの取り扱い
    ○ 特定データには認可された人のみがアクセス可能な状態
    ● BI(redash)からクエリ

    View Slide

  21. Data Platform Architecture

    View Slide

  22. Data Platform Architecture
    RDS上のデータを
    DataCatalog化する

    View Slide

  23. Data Platform Architecture
    ● RDS SnapshotのS3Export機能を活用
    ○ parquet形式のファイルをS3に定期Upload可能
    ○ RDSに対してread負荷がかからない
    ● Data PipelineのレイヤはDatalake的な思想で構成
    ○ 収集→蓄積→変換→分析
    ○ 各レイヤをイベントドリブンで接続
    ● DataCatalogをセキュリティレベル別に分離
    ○ Sensitiveなデータとそうではないデータ
    ○ 同一DataSourceからPipeline上で複数のCatalogを生成

    View Slide

  24. Data Platform Architecture
    収集 蓄積 変換 分析
    DataPipelineをDatalake思想で構成
    収集→蓄積→変換→分析
    各Layerはイベントドリブン(SNS/SQS +
    Lambda)で接続

    View Slide

  25. Data Platform Architecture
    Event
    RDSのSnapshot関連のイベントトリガー
    は、RDS Event Subscription→SNS
    SNSのSubscriberとしてLambdaが起動
    Event
    Event

    View Slide

  26. Data Platform Architecture
    Sensitive Data
    Normal Data
    Sensitive DataのLayerとNormal Dataの
    Layerで構成
    ここもイベント接続

    View Slide

  27. 詰まった点1
    RDS Event Subscriptionの仕様

    View Slide

  28. なにが起きたか
    ● Snapshotの作成とSnapshot Exportが同じEvent SubscriptionのEvent
    Categoryに属するので、どちらも同じSNS TopicにSubscribeされる
    ● 別のEventとして単一責務のLambdaをSubscriberに設定する予定だった
    が、それぞれのEventを同一Lambda内で処理する必要性が

    View Slide

  29. なにが起きたか
    同じEvent Subscriptionから
    通知される

    View Slide

  30. どうしたか
    ● 後続のLambdaを同一Functionとし、SNSのMessageによって実行する処理
    を分岐
    ○ snapshot created イベントに対しては snapshot export を実施
    ○ export task completed イベントに対しては後続の GlueJobをKick
    ● 管理上関数を分けたかったが、全体をterraformで管理することとResource
    Groupを有効にすることで許容

    View Slide

  31. 詰まった点2
    Snapshot Exportの仕様

    View Slide

  32. なにが起きたか
    ● RDS Snapshot ExportタスクによってSnapshotがS3にExportされる際、
    Export Task名のPrefix配下にSnapshotが配置される
    ● 後続処理でExportされたSnapshotデータを特定する際に、Export Task名と
    して何が指定されたかを正確に把握する必要がある
    ○ yyyy-mm-ddなどで値を決めると、リトライが発生した際のハンドリングが面倒

    View Slide

  33. なにが起きたか
    ここで決めたTask名を
    こっちで正確に知る必要がある

    View Slide

  34. どうしたか
    ● Export Task実行時に決めた名前をSQSにメッセージング
    ● 後続のLambdaの中でSQSにキューイングされたメッセージから設定された
    Export Task名を取得し、S3上のPathを把握
    ● GlueJob / Crawlerの実行を容易にするため、/latest 配下にcopy

    View Slide

  35. どうしたか
    Task名をQueuing
    SQSからTask名を取得→/latestにcopy

    View Slide

  36. 詰まった点3
    Data Pipelineのモニタリング

    View Slide

  37. なにが起きたか
    ● StepFunction管理にしなかったので、Pipelineのどこまで実行されているのか
    などのモニタリングが困難
    ● X-Rayでかっこよくいけるやろと思ってたけど、机上で調べてる限りやりたいこ
    との実現は難しそう
    ※理想

    View Slide

  38. どうしたか
    ● PipelineのStep毎にDynamoDBに状況を書き込むようにした
    ○ Export Task名をPrimary Keyとして利用
    ● エラーで落ちた場合はエラーメッセージもDDBに格納されるので、どこまで実
    行されてなぜ落ちたのかの大体の情報はDDBで完結
    Step毎に書き込み
    エラー時はメッセージも

    View Slide

  39. その他の知見
    ● 大まかなアーキテクチャはAWSのAsk an expertを活用してレビューしてもら
    えた。ライトに相談できる場としてすごく助かる。
    ● AWSから毎日のようにアナウンスされる便利機能アップデートは銀の弾丸で
    はない。自分たちのシステムに落とし込む上では考えたり実装したりするポイ
    ントがたくさん出てくる
    ● AWSサービスのアイコンを並べて設計した気になってるおじさんにならないよ
    うに気を付ける

    View Slide

  40. About Future
    今後の展望

    View Slide

  41. データの更なる活用
    更新頻度
    分析活用
    埋蔵金
    ● 活用用途を見出せてないデータ
    Master Data Transactional Data
    活用ラインの
    拡大
    多様なトランザクショ
    ンデータ取得

    View Slide

  42. データの更なる活用 データ活用の
    多面化・組織化

    View Slide

  43. 新しい技術の活用
    ● 先日リリースされたマネージドAirFlow(MWAA)で後半のジョブネットはワーク
    フロー化できるかもしれないので、折を見て検証したい
    ● 今日発表された Glue Elastic View との親和性など??
    ○ 作ってるやつほぼ捨てられる・・・・???

    View Slide

  44. Closing
    最後に

    View Slide

  45. 結論
    ● RDSのsnapshot export機能を使えば、Master DataをDatalakeに簡単に格
    納することが可能
    ● だと思っていた時期がありました。
    ● イベントドリブンなパイプラインのモニタリングはX-Ray
    ● だと思っていた時期がありました(要追加検証)。
    ● マネージドサービスを実要件での活用に落とし込んで行くには、結局はエンジ
    ニアリングが必要。
    ● AWS支援体制は積極的に活用していくのがいい

    View Slide

  46. エンジニア積極採用中
    ● Progateではエンジニアを積極採用しています
    ● プログラミング教育事業に興味がある、グローバルサービスに携わりたい、な
    ど、気になるポイントあれば是非ご連絡ください
    ● 詳しくは採用サイトへ
    ○ https://prog-8.com/about/careers

    View Slide

  47. TechBlogはじめました
    ● Progate TechBlogを開設しました
    ● Advent Calendar期間を活用し、積極的に発信していきます
    ● 詳しくはBlog
    ○ https://tech.prog-8.com/

    View Slide

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

    View Slide