2020/09/12 JAWS SONIC 2020 & MIDNIGHT JAWS 2020にてnoteにおけるデータ基盤の事例をお話しました。
αʔόʔϨεͰ࢝ΊΔΏΔ;Θσʔλج൫OPUFͷࣄྫ +"8440/*$&.*%/*()5+"84Ҫ
View Slide
Ҫ | @fukuiretu• noteגࣜձࣾ• ΤϯδχΞ• ϑϩϯτΤϯυ / όοΫΤϯυ / ΠϯϑϥͱͳΜͰΔϚϯ• ੨ࡏॅ• ϦϞʔτϫʔΧʔɾJAWS-UG ੨ࢧ෦ॴଐ@fukuiretu@fukuiretufukuiretu
アジェンダ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ͷෛՙ͕େʹ• ύʔςΟγϣχϯά͕͞Ε͓ͯΒͣίετ͕େʹ• ϧʔϧཱ͕֬͞Ε͓ͯΒͣσʔλ͕ࢄࡏσʔλج൫ͷधཁ͕ߴ·Δ
開発体制
⽅針ӡ༻ϦιʔεΛ࠷খʹ = ։ൃʹઐ೦
どうしたら運⽤リソースを最⼩にできるか• ӡ༻ͷ؆ૉԽ• Φʔτεέʔϧ• Մ༻ੑӡ༻ϦιʔεΛ࠷খʹ = ։ൃʹઐ೦αʔόʔϨεͷػӡͰ??
どうしたら運⽤リソースを最⼩にできるか• ӡ༻ͷ؆ૉԽ• Φʔτεέʔϧ• Մ༻ੑӡ༻ϦιʔεΛ࠷খʹ = ։ൃʹઐ೦αʔόʔϨεͷػӡͰ??αʔόʔϨεΞʔΩςΫνϟͰɺϛχϚϜʢΏΔ;Θʣʹελʔτ
アーキテクチャの全体像։ൃظؒ: 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ͷղ• σʔλܕͷௐ
利⽤しているツールߏཧ / σϓϩΠAWS CDK• CloudWatch Logs• CloudWatch Alarm• AWS Chatbotࢹ
良かった / ⾟かった話! ྑ͔ͬͨ" ਏ͔ͬͨαʔόʔͷ͓कΓ΄΅Կͯ͠ͳ͍ϝτϦΫεΛΈ֤ͯछαʔϏεͷ্ݶʹ͔͔Βͳ͍͔͚ͩࢹAWSͰো͕ى͖Δͱ͢ज़͕ͳ͍e.g. 2020/04/20ʹൃੜͨ͠SQSͷେنো
当初の課題は解決できたのか՝: ΞϓϦέʔγϣϯٴͼDBͷෛՙ͕େʹΞϓϦέʔγϣϯٴͼDBͱͨ͠ͷͰ΄΅ղܾʢҰ෦ҠߦͰ͖͍ͯͳ͍ʣ
当初の課題は解決できたのか՝: ύʔςΟγϣχϯά͕͞Ε͓ͯΒͣίετ͕େʹύʔςΟγϣχϯάͨ͠ͷͰղܾΫΤϦ݁ՌετϨεແ͘ฦͬͯ͘ΔΑ͏ʹ
当初の課題は解決できたのか՝: ϧʔϧཱ͕֬͞Ε͓ͯΒͣσʔλ͕ࢄࡏσʔλύΠϓϥΠϯཱ͕֬͞ΕͨͷͰղܾ
ॳͷ՝΄΅ղফ͕ͨ͠ɺ ৽ͨͳ՝…
課題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ͷར༻
まとめॳͷ՝΄΅ղফͰ͖ɺ ӡ༻ίεταʔόʔϨεʹΑͬͯظ௨Γେ෯ʹܰݮͰ͖ͨ
• αʔϏεنʹΑͬͯྉۚίετ͕ͶΔՄೳੑ͋Γ• ো࣌جຊతʹ͓فΓ͢Δ͔͠ͳ͍まとめͳʹΛ༏ઌ͖͔͢Λख़ߟ͢ΔαʔόʔϨεͷτϨʔυΦϑʢஅࡐྉ: αʔϏεಛੑɺαʔϏεنɺνʔϜͷφϨοδetc..ʣ
͋Γ͕ͱ͏͍͟͝·ͨ͠