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
サーバーレスで始める ゆるふわデータ基盤 - noteの事例 -
Search
Retu Fukui
September 12, 2020
Technology
2
1.6k
サーバーレスで始める ゆるふわデータ基盤 - noteの事例 -
2020/09/12 JAWS SONIC 2020 & MIDNIGHT JAWS 2020にてnoteにおけるデータ基盤の事例をお話しました。
Retu Fukui
September 12, 2020
Tweet
Share
More Decks by Retu Fukui
See All by Retu Fukui
開発生産性と品質の横断的な課題を解決する!エンジニアリング支援室の挑戦 -1Qで取り組んだことを添えて-
fukuiretu
2
450
EMになって最初の失敗談 - コミュニケーション編 -
fukuiretu
1
480
問い合わせ対応当番を自動化で業務効率化している話
fukuiretu
0
630
191109_sacss.pdf
fukuiretu
1
2.1k
noteをNuxt.jsで再構築した話 -2nd-
fukuiretu
6
4.7k
CloudFront use cases - noteの事例 -
fukuiretu
0
8.4k
181117_wannatech.pdf
fukuiretu
1
470
noteをNuxt.jsで再構築した話
fukuiretu
22
47k
フロントエンド刷新中のnoteの開発環境について
fukuiretu
6
7.5k
Other Decks in Technology
See All in Technology
一生覚えておきたい「システム開発=コミュニケーション」〜初めての実務案件振り返りLT〜
maimyyym
2
340
require(ESM)とECMAScript仕様
uhyo
4
1k
障害対応をちょっとずつよくしていくための 演習の作りかた
heleeen
1
1.8k
Max out Local LLM in Challenging Environments
sashimimochi
2
180
IaCジェネレーターとBedrockで詳細設計書を生成してみた
tsukasa_ishimaru
4
910
高専で制御を、大学でセンシングを学び、次は脳みそ
satoshirobatofujimoto
0
120
AWSに詳しくない人でも始められるコスト最適化ガイド
yuhta28
2
410
uvを使ってストレスフリーな Python開発をしよう!
r74tech
0
220
Cracking the KubeCon CfP
inductor
2
270
ゼロから始めるVue.jsコミュニティ貢献 / first-vuejs-community-contribution-link-and-motivation
lmi
1
150
【基本】データベース設計
oracle4engineer
PRO
2
230
個人のAWSアカウントをマルチ運用してみた
miura55
2
190
Featured
See All Featured
Unsuck your backbone
ammeep
663
57k
Infographics Made Easy
chrislema
238
18k
Gamification - CAS2011
davidbonilla
77
4.6k
A Tale of Four Properties
chriscoyier
152
22k
From Idea to $5000 a Month in 5 Months
shpigford
378
45k
Building Adaptive Systems
keathley
32
1.9k
Faster Mobile Websites
deanohume
300
30k
Optimising Largest Contentful Paint
csswizardry
13
2.4k
Scaling GitHub
holman
457
140k
Learning to Love Humans: Emotional Interface Design
aarron
267
39k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
26
2.3k
Producing Creativity
orderedlist
PRO
338
39k
Transcript
αʔόʔϨεͰ࢝ΊΔ ΏΔ;Θσʔλج൫ OPUFͷࣄྫ +"8440/*$&.*%/*()5+"84 Ҫ
Ҫ | @fukuiretu • noteגࣜձࣾ • ΤϯδχΞ • ϑϩϯτΤϯυ
/ όοΫΤϯυ / ΠϯϑϥͱͳΜͰΔϚϯ • ੨ࡏॅ • ϦϞʔτϫʔΧʔ ɾJAWS-UG ੨ࢧ෦ॴଐ @fukuiretu @fukuiretu fukuiretu
アジェンダ 1. ܦҢ 2. ߏங 3. ӡ༻ 4. ࠓޙͷ՝ɾల 5.
·ͱΊ ※AWSʹؔ͢Δొਓͷࡉ͔͍આ໌ંΓ·͢
50%0ޙೖΕ ΫϦΤΠλʔ͕จষϚϯΨɺࣸਅɺԻΛߘ͢Δ ͜ͱ͕Ͱ͖ɺϢʔβʔͦͷίϯςϯπΛָ͠ΜͰԠ ԉͰ͖ΔϝσΟΞϓϥοτϑΥʔϜ
noteͰΛΑͼ cakesʹ࿈ࡌ͞Εͨޙɺ ॻ੶ԽɺυϥϚԽɻ ిࢠࡶࢽʮจܳΧυΧϫʯͱ noteͰಉ࣌࿈ࡌΛͨ͠ޙɺॻ ੶ԽɺυϥϚԽ note༗ྉߪಡऀݶఆͷ ࿈ࡌΛॻ੶Խ ຖ৽ฉͷ࿈ࡌখઆΛ 10ޙʹnoteͰ࿈ࡌ
ͦͷޙɺॻ੶ԽɺөըԽ noteͷਓؾ࿈ࡌΛ ॻ੶Խ noteͰΛΑΜͩ هࣄΛॻ੶Խ ΫϦΤΠλʔͷ֗ɺnote͔Βੜ·Εͨ࡞
アジェンダ 1. ܦҢ 2. ߏங 3. ӡ༻ 4. ࠓޙͷ՝ɾల 5.
·ͱΊ
2018ࠒ͔Βσʔλੳʹ ຊࠊΛೖΕ࢝ΊΔ
データ基盤構築前のトラッキング⽅法 • ΞϓϦέʔγϣϯ্ʹτϥοΩϯά༻ͷAPI • ΞΫςΟϏςΟܥͷϩάͯ͢RDBʹอଘ
noteの急激な成⻑
成⻑とともに出てきた課題 • ΞϓϦέʔγϣϯٴͼDBͷෛՙ͕େʹ • ΫΤϦ݁Ռ͕ฦͬͯͣ͜σʔλநग़͕ࠔ
対処療法 • ύʔςΟγϣχϯά͕͞Ε͓ͯΒͣίετ͕େʹ ‣ ύϑΥʔϚϯε͍·͍ͪ… • ϧʔϧཱ͕֬͞Ε͓ͯΒͣσʔλ͕ࢄࡏ ՝ ඞཁʹԠͯ͡S3ʹDBͷσʔλΛΤΫεϙʔτ͠ɺ AthenaͰநग़
解決すべき課題 • ΞϓϦέʔγϣϯٴͼDBͷෛՙ͕େʹ • ύʔςΟγϣχϯά͕͞Ε͓ͯΒͣίετ͕େʹ • ϧʔϧཱ͕֬͞Ε͓ͯΒͣσʔλ͕ࢄࡏ σʔλج൫ͷधཁ͕ߴ·Δ
アジェンダ 1. ܦҢ 2. ߏங 3. ӡ༻ 4. ࠓޙͷ՝ɾల 5.
·ͱΊ
開発体制
⽅針 ӡ༻ϦιʔεΛ࠷খʹ = ։ൃʹઐ೦
どうしたら運⽤リソースを最⼩にできるか • ӡ༻ͷ؆ૉԽ • Φʔτεέʔϧ • Մ༻ੑ ӡ༻ϦιʔεΛ࠷খʹ = ։ൃʹઐ೦
αʔόʔϨεͷػӡͰ??
どうしたら運⽤リソースを最⼩にできるか • ӡ༻ͷ؆ૉԽ • Φʔτεέʔϧ • Մ༻ੑ ӡ༻ϦιʔεΛ࠷খʹ = ։ൃʹઐ೦
αʔόʔϨεͷػӡͰ?? αʔόʔϨεΞʔΩςΫνϟͰɺ ϛχϚϜʢΏΔ;Θʣʹελʔτ
アーキテクチャの全体像 ։ൃظؒ: 3ϲ݄ʢௐࠪɾݕূؚΉʣ
データ集約 ᶃ ᶄ ᶃ AWS Service ProxyΛར༻ͯ͠FirehoseʹPut ϝϦοτ: Lambdaෆཁ σϝϦοτ:
σʔλߏ͕ෳࡶʹͳΔͱVTLͰͷϚοϐϯά͕େม ᶄ Firehoseͷड৴σʔλมΦϓγϣϯΛར༻͠ɺ 1ϨίʔυຖʹվߦίʔυΛೖΕΔ ※Firehoseͷ্ݶʹҙʢ౦ژϦʔδϣϯ: 1000Ϩίʔυ/s, 1000τϥϯβΫγϣϯ/s, 1MiB/sʣ
データ整形 ᶃ ᶄ ᶃ S3ͷPut EventͰσʔλܗ༻ͷLambdaΛൃՐ ᶄ ओʹҎԼͷॲཧΛߦ͏ • AthenaͷύʔςΟγϣχϯάͷͨΊʹHiveܗࣜͷS3
Keyੜ ‣ e.g. content_type=action_logs/year=YYYY/month=MM/day=DD/hour=HH • Referrerͷղ • UserAgentͷղ • σʔλܕͷௐ
アジェンダ 1. ܦҢ 2. ߏங 3. ӡ༻ 4. ࠓޙͷ՝ɾల 5.
·ͱΊ
利⽤しているツール ߏཧ / σϓϩΠ AWS CDK • CloudWatch Logs •
CloudWatch Alarm • AWS Chatbot ࢹ
良かった / ⾟かった話 ! ྑ͔ͬͨ " ਏ͔ͬͨ αʔόʔͷ͓कΓ΄΅Կͯ͠ͳ͍ ϝτϦΫεΛΈ֤ͯछαʔϏεͷ্ݶʹ͔͔Βͳ͍͔͚ͩࢹ AWSͰো͕ى͖Δͱ͢ज़͕ͳ͍
e.g. 2020/04/20ʹൃੜͨ͠SQSͷେنো
当初の課題は解決できたのか ՝: ΞϓϦέʔγϣϯٴͼDBͷෛՙ͕େʹ ΞϓϦέʔγϣϯٴͼDBͱͨ͠ͷͰ΄΅ղܾʢҰ෦ҠߦͰ͖͍ͯͳ͍ʣ
当初の課題は解決できたのか ՝: ύʔςΟγϣχϯά͕͞Ε͓ͯΒͣίετ͕େʹ ύʔςΟγϣχϯάͨ͠ͷͰղܾ ΫΤϦ݁ՌετϨεແ͘ฦͬͯ͘ΔΑ͏ʹ
当初の課題は解決できたのか ՝: ϧʔϧཱ͕֬͞Ε͓ͯΒͣσʔλ͕ࢄࡏ σʔλύΠϓϥΠϯཱ͕֬͞ΕͨͷͰղܾ
アジェンダ 1. ܦҢ 2. ߏங 3. ӡ༻ 4. ࠓޙͷ՝ɾల 5.
·ͱΊ
ॳͷ՝΄΅ղফ͕ͨ͠ɺ ৽ͨͳ՝…
課題1 • ύʔςΟγϣϯͷ૿ͰΫΤϦͷύϑΥʔϚϯεʹӨڹ • ίετ͔͔Δʢैྔ՝ۚʣ AthenaͷύʔςΟγϣχϯάΛ GlueͷΫϩʔϥʔͰੜ͢ΔͷΛΊ͍ͨ
課題1の展望 • DDLͰprojection.xxxͱ͍͏ଐੑΛఆٛ͢Δ͚ͩ • ผ్ྉ͔͔ۚΒͳ͍ Partition ProjectionΛར༻͢Δ
課題2 • όονΠϯϙʔτ͕Ͱ͖ͳ͍ίετ૿ • Kinesis Firehoseͷ্ݶʢͲ͜·Ͱ؇ͯ͠Β͑Δ͔ෆಁ໌ʣ • Τϥʔ͕ى͖ͨࡍͷϋϯυϦϯάɾϦΧόϦʔ͕͍͠ API Gateway
ͱ Kinesis Firehoseؒʹ Ϋογϣϯ͕ͳ͍
課題2の展望 APIࣗલͰཱͯͯkinesis-agent(or Fluentd)Ͱ όονΠϯϙʔτ͢Δ
課題3 • ݱঢ়ఆظతʹόονͰS3Πϯϙʔτ͍ͯ͠Δ ‣ ࣌ؒͱख͕͔͔ؒΔ RDB্ͷσʔλΛAthenaͰΧδϡΞϧʹ ݁߹͍ͨ͠
課題3の展望 ϑΣσϨʔςουɾΫΤϦΛར༻͢Δ ※·ͩpreviewͳͷͰਖ਼࠲ػத
課題3の展望 https://aws.amazon.com/jp/blogs/news/query-any-data-source- with-amazon-athenas-new-federated-query/
課題4 σʔλΣΞϋεϚʔτʹ૬͢ΔσʔλΛ ༻ҙ͠རศੑΛ্͍ͨ͠
課題4の展望 • CTASΛར༻ͨ͠Parquet(ྻࢦϑΥʔϚοτ)ͷม • BigQuery Omniͷར༻
アジェンダ 1. ܦҢ 2. ߏங 3. ӡ༻ 4. ࠓޙͷ՝ɾల 5.
·ͱΊ
まとめ ॳͷ՝΄΅ղফͰ͖ɺ ӡ༻ίεταʔόʔϨεʹΑͬͯ ظ௨Γେ෯ʹܰݮͰ͖ͨ
• αʔϏεنʹΑͬͯྉۚίετ͕ͶΔՄೳੑ͋Γ • ো࣌جຊతʹ͓فΓ͢Δ͔͠ͳ͍ まとめ ͳʹΛ༏ઌ͖͔͢Λख़ߟ͢Δ αʔόʔϨεͷτϨʔυΦϑ ʢஅࡐྉ: αʔϏεಛੑɺαʔϏεنɺνʔϜͷφϨοδetc..ʣ
͋Γ͕ͱ͏͍͟͝·ͨ͠