サーバーレスで始める ゆるふわデータ基盤 - noteの事例 -

107ba69ff7888cacdb4307a28adf5527?s=47 Retu Fukui
September 12, 2020

サーバーレスで始める ゆるふわデータ基盤 - noteの事例 -

2020/09/12 JAWS SONIC 2020 & MIDNIGHT JAWS 2020にてnoteにおけるデータ基盤の事例をお話しました。

107ba69ff7888cacdb4307a28adf5527?s=128

Retu Fukui

September 12, 2020
Tweet

Transcript

  1. αʔόʔϨεͰ࢝ΊΔ ΏΔ;Θσʔλج൫ OPUFͷࣄྫ
 
 +"8440/*$&.*%/*()5+"84 ෱Ҫ྽

  2. ෱Ҫ ྽ | @fukuiretu • noteגࣜձࣾ • ΤϯδχΞ • ϑϩϯτΤϯυ

    / όοΫΤϯυ / 
 ΠϯϑϥͱͳΜͰ΋΍ΔϚϯ • ੨৿ࡏॅ • ϦϞʔτϫʔΧʔ ɾJAWS-UG ੨৿ࢧ෦ॴଐ @fukuiretu @fukuiretu fukuiretu
  3. アジェンダ 1. ܦҢ 2. ߏங 3. ӡ༻ 4. ࠓޙͷ՝୊ɾల๬ 5.

    ·ͱΊ ※AWSʹؔ͢Δొ৔ਓ෺ͷࡉ͔͍આ໌͸୺ંΓ·͢
  4. 50%0ޙೖΕ ΫϦΤΠλʔ͕จষ΍ϚϯΨɺࣸਅɺԻ੠Λ౤ߘ͢Δ ͜ͱ͕Ͱ͖ɺϢʔβʔ͸ͦͷίϯςϯπΛָ͠ΜͰԠ ԉͰ͖ΔϝσΟΞϓϥοτϑΥʔϜ

  5. noteͰ࿩୊ΛΑͼ cakesʹ࿈ࡌ͞Εͨޙɺ ॻ੶ԽɺυϥϚԽɻ ిࢠࡶࢽʮจܳΧυΧϫʯͱ noteͰಉ࣌࿈ࡌΛͨ͠ޙɺॻ ੶ԽɺυϥϚԽ note༗ྉߪಡऀݶఆͷ ࿈ࡌΛॻ੶Խ ຖ೔৽ฉͷ࿈ࡌখઆΛ 10೔ޙʹnoteͰ࿈ࡌ

    ͦͷޙɺॻ੶ԽɺөըԽ noteͷਓؾ࿈ࡌΛ ॻ੶Խ noteͰ࿩୊ΛΑΜͩ هࣄΛॻ੶Խ ΫϦΤΠλʔͷ֗ɺnote͔Βੜ·Εͨ࡞඼
  6. アジェンダ 1. ܦҢ 2. ߏங 3. ӡ༻ 4. ࠓޙͷ՝୊ɾల๬ 5.

    ·ͱΊ
  7. 2018೥ࠒ͔Βσʔλ෼ੳʹ
 ຊࠊΛೖΕ࢝ΊΔ

  8. データ基盤構築前のトラッキング⽅法 • ΞϓϦέʔγϣϯ্ʹτϥοΩϯά༻ͷAPI • ΞΫςΟϏςΟܥͷϩά͸͢΂ͯRDBʹอଘ

  9. noteの急激な成⻑

  10. 成⻑とともに出てきた課題 • ΞϓϦέʔγϣϯٴͼDBͷෛՙ͕๲େʹ • ΫΤϦ݁Ռ͕ฦͬͯͣ͜σʔλநग़͕ࠔ೉

  11. 対処療法 • ύʔςΟγϣχϯά͕͞Ε͓ͯΒͣίετ͕๲େʹ ‣ ύϑΥʔϚϯε΋͍·͍ͪ… • ϧʔϧཱ͕֬͞Ε͓ͯΒͣσʔλ͕ࢄࡏ ՝୊ ඞཁʹԠͯ͡S3ʹDBͷσʔλΛΤΫεϙʔτ͠ɺ AthenaͰநग़

  12. 解決すべき課題 • ΞϓϦέʔγϣϯٴͼDBͷෛՙ͕๲େʹ • ύʔςΟγϣχϯά͕͞Ε͓ͯΒͣίετ͕๲େʹ • ϧʔϧཱ͕֬͞Ε͓ͯΒͣσʔλ͕ࢄࡏ σʔλج൫ͷधཁ͕ߴ·Δ

  13. アジェンダ 1. ܦҢ 2. ߏங 3. ӡ༻ 4. ࠓޙͷ՝୊ɾల๬ 5.

    ·ͱΊ
  14. 開発体制

  15. ⽅針 ӡ༻ϦιʔεΛ࠷খʹ = ։ൃʹઐ೦

  16. どうしたら運⽤リソースを最⼩にできるか • ӡ༻ͷ؆ૉԽ • Φʔτεέʔϧ • Մ༻ੑ ӡ༻ϦιʔεΛ࠷খʹ = ։ൃʹઐ೦

    αʔόʔϨεͷػӡͰ͸??
  17. どうしたら運⽤リソースを最⼩にできるか • ӡ༻ͷ؆ૉԽ • Φʔτεέʔϧ • Մ༻ੑ ӡ༻ϦιʔεΛ࠷খʹ = ։ൃʹઐ೦

    αʔόʔϨεͷػӡͰ͸?? αʔόʔϨεΞʔΩςΫνϟͰɺ ϛχϚϜʢΏΔ;Θʣʹελʔτ
  18. アーキテクチャの全体像 ։ൃظؒ: ໿3ϲ݄ʢௐࠪɾݕূؚΉʣ

  19. データ集約 ᶃ ᶄ ᶃ AWS Service ProxyΛར༻ͯ͠௚઀FirehoseʹPut ϝϦοτ: Lambdaෆཁ σϝϦοτ:

    σʔλߏ଄͕ෳࡶʹͳΔͱVTLͰͷϚοϐϯά͕େม ᶄ Firehoseͷड৴σʔλม׵ΦϓγϣϯΛར༻͠ɺ
 1ϨίʔυຖʹվߦίʔυΛೖΕΔ ※Firehoseͷ্ݶʹ஫ҙʢ౦ژϦʔδϣϯ: 1000Ϩίʔυ/s, 1000τϥϯβΫγϣϯ/s, 1MiB/sʣ
  20. データ整形 ᶃ ᶄ ᶃ S3ͷPut EventͰσʔλ੔ܗ༻ͷLambdaΛൃՐ ᶄ ओʹҎԼͷॲཧΛߦ͏ • AthenaͷύʔςΟγϣχϯάͷͨΊʹHiveܗࣜͷS3

    Keyੜ੒ ‣ e.g. content_type=action_logs/year=YYYY/month=MM/day=DD/hour=HH • Referrerͷ෼ղ • UserAgentͷ෼ղ • σʔλܕͷௐ੔
  21. アジェンダ 1. ܦҢ 2. ߏங 3. ӡ༻ 4. ࠓޙͷ՝୊ɾల๬ 5.

    ·ͱΊ
  22. 利⽤しているツール ߏ੒؅ཧ / σϓϩΠ AWS CDK • CloudWatch Logs •

    CloudWatch Alarm • AWS Chatbot ؂ࢹ
  23. 良かった / ⾟かった話 ! ྑ͔ͬͨ " ਏ͔ͬͨ αʔόʔͷ͓कΓ͸΄΅Կ΋ͯ͠ͳ͍ ϝτϦΫεΛΈ֤ͯछαʔϏεͷ্ݶʹ͔͔Βͳ͍͔͚ͩ஫ࢹ AWSͰো֐͕ى͖Δͱ੒͢ज़͕ͳ͍

    e.g. 2020/04/20ʹൃੜͨ͠SQSͷେن໛ো֐
  24. 当初の課題は解決できたのか ՝୊: ΞϓϦέʔγϣϯٴͼDBͷෛՙ͕๲େʹ ΞϓϦέʔγϣϯٴͼDBͱ෼཭ͨ͠ͷͰ΄΅ղܾʢҰ෦ҠߦͰ͖͍ͯͳ͍ʣ

  25. 当初の課題は解決できたのか ՝୊: ύʔςΟγϣχϯά͕͞Ε͓ͯΒͣίετ͕๲େʹ ύʔςΟγϣχϯάͨ͠ͷͰղܾ ΫΤϦ݁Ռ΋ετϨεແ͘ฦͬͯ͘ΔΑ͏ʹ

  26. 当初の課題は解決できたのか ՝୊: ϧʔϧཱ͕֬͞Ε͓ͯΒͣσʔλ͕ࢄࡏ σʔλύΠϓϥΠϯཱ͕֬͞ΕͨͷͰղܾ

  27. アジェンダ 1. ܦҢ 2. ߏங 3. ӡ༻ 4. ࠓޙͷ՝୊ɾల๬ 5.

    ·ͱΊ
  28. ౰ॳͷ՝୊͸΄΅ղফ͕ͨ͠ɺ
 ৽ͨͳ՝୊΋…

  29. 課題1 • ύʔςΟγϣϯ਺ͷ૿ͰΫΤϦͷύϑΥʔϚϯεʹӨڹ • ίετ͔͔Δʢैྔ՝ۚʣ AthenaͷύʔςΟγϣχϯάΛ
 GlueͷΫϩʔϥʔͰੜ੒͢ΔͷΛ΍Ί͍ͨ

  30. 課題1の展望 • DDLͰprojection.xxxͱ͍͏ଐੑΛఆٛ͢Δ͚ͩ • ผ్ྉۚ΋͔͔Βͳ͍ Partition ProjectionΛར༻͢Δ

  31. 課題2 • όονΠϯϙʔτ͕Ͱ͖ͳ͍෼ίετ૿ • Kinesis Firehoseͷ্ݶʢͲ͜·Ͱ؇࿨ͯ͠΋Β͑Δ͔ෆಁ໌ʣ • Τϥʔ͕ى͖ͨࡍͷϋϯυϦϯάɾϦΧόϦʔ͕೉͍͠ API Gateway

    ͱ Kinesis Firehoseؒʹ
 Ϋογϣϯ͕ͳ͍
  32. 課題2の展望 API͸ࣗલͰཱͯͯkinesis-agent(or Fluentd)Ͱ όονΠϯϙʔτ͢Δ

  33. 課題3 • ݱঢ়͸ఆظతʹόονͰS3΁Πϯϙʔτ͍ͯ͠Δ ‣ ࣌ؒͱख͕͔͔ؒΔ RDB্ͷσʔλΛAthenaͰΧδϡΞϧʹ ݁߹͍ͨ͠

  34. 課題3の展望 ϑΣσϨʔςουɾΫΤϦΛར༻͢Δ ※·ͩpreviewͳͷͰਖ਼࠲଴ػத

  35. 課題3の展望 https://aws.amazon.com/jp/blogs/news/query-any-data-source- with-amazon-athenas-new-federated-query/

  36. 課題4 σʔλ΢ΣΞϋ΢ε΍Ϛʔτʹ૬౰͢ΔσʔλΛ ༻ҙ͠རศੑΛ޲্͍ͨ͠

  37. 課題4の展望 • CTASΛར༻ͨ͠Parquet(ྻࢦ޲ϑΥʔϚοτ)΁ͷม׵ • BigQuery Omniͷར༻

  38. アジェンダ 1. ܦҢ 2. ߏங 3. ӡ༻ 4. ࠓޙͷ՝୊ɾల๬ 5.

    ·ͱΊ
  39. まとめ ౰ॳͷ՝୊͸΄΅ղফͰ͖ɺ
 ӡ༻ίετ͸αʔόʔϨεʹΑͬͯ ظ଴௨Γେ෯ʹܰݮͰ͖ͨ

  40. • αʔϏεن໛ʹΑͬͯྉۚίετ͕௓ͶΔՄೳੑ͋Γ • ো֐࣌͸جຊతʹ͓فΓ͢Δ͔͠ͳ͍ まとめ ͳʹΛ༏ઌ͢΂͖͔Λख़ߟ͢Δ αʔόʔϨεͷτϨʔυΦϑ ʢ൑அࡐྉ: αʔϏεಛੑɺαʔϏεن໛ɺνʔϜͷφϨοδetc..ʣ

  41. ͋Γ͕ͱ͏͍͟͝·ͨ͠