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

LOWYAが辿った負荷対策の軌跡 〜GraphQL Cachingの実装に至るまで〜

LOWYAが辿った負荷対策の軌跡 〜GraphQL Cachingの実装に至るまで〜

本資料は
2023-06-24 AWS DevDay 2023で話したかった人全員救済LT会!
にて発表させていただきました。

家具ECサイトLOWYAは2020年にECパッケージからフルスクラッチで開発した自社ECへリプレースを行いました。

本スライドでは

- 自社ECシステムへリプレースする決断に至った背景
- 初のセールイベント LOWYAの日 やTV放映時に行った負荷対策の取り組みとその結果
- AWS Prototyping Programを活用して導入した、GraphQL Caching on Amazon CloudFrontの取り組みとその効果

等についてご紹介しています。

この発表から学べることとしては、

- 負荷対策における意外な盲点
- AWS Prototyping Program というサービスの概要
- LOWYAにおけるエッジコンピューティングの使い所
- Lambda@EdgeからCloudFront Functionsへの部分移行による改善効果
- GraphQL Caching on Amazon CloudFrontの仕組みとその効果

等となります。

kazumax55

June 24, 2023
Tweet

More Decks by kazumax55

Other Decks in Programming

Transcript

  1. ࣗݾ঺հ খݪҰਅ(Kazuma Kohara) @kazumax55 NRUG SREࢧ෦ γεςϜ౷ׅ෦ SRE෦ ෦௕ (SRE෦

    = SRE group + Corporate IT group) झຯ 🏕Ωϟϯϓ 🎣௼Γ 🧖α΢φ ޷͖ͳAWSͷαʔϏε Amazon GuardDuty, AWS Security Hub ԶͨͪͷSREͱNew Relic -ॻ੶ฤ-
  2. LOWYAͷෛՙରࡦ 2004/04 ~ ओʹϞʔϧ(ָఱ/Amazon/Yahoo!)Λओମʹͯ͠ࣄۀల։ ~ 2017 ָఱࢢ৔ γϣοϓɾΦϒɾβɾΠϠʔ 7೥࿈ଓ ड৆🏆

    ख਺ྉ͕໰୊ʹ…💸 2017/09 ~ ࣗࣾECαʔϏεΛελʔτ ๭ECύοέʔδϕϯμʔʹΧελϚΠζΛґཔ ͔͜͜Βෛՙͱͷઓ͍͕࢝·Γɺ਺ʑͷนʹͿ͔ͭΔ͜ͱʹͳΔ
  3. ୈҰͷนɿECϕϯμʔͷน ໰୊̍ɿεέʔϥϏϦςΟ ڞ༻ḉ → ઐ༻ḉ → ෳ਺୆ߏ੒΁ঃʑʹεέʔϧΞοϓ ͔͠͠ɺΦʔτεέʔϧʹ͸ඇରԠ DB΋RDSͰ͸ͳ͘ɺԿނ͔EC2 ηʔϧͷ౓ʹɺ௥Ճඅ༻͕ൃੜ(खಈεέʔϦϯά)

    ͦΕͰ΋ෛՙʹ଱͑ΒΕΒΕͣɺػձଛࣦ͕ଟʑൃੜ ໰୊̎ɿΧελϚΠζͷεϐʔυײ ౎౓ݟੵ΋ΓʹΑΔରԠ ͙͢ࡁΈͦ͏ͳमਖ਼Ͱ΋ਓతϦιʔεΛઐ༗ग़དྷͳ͍ҝɺ͕͔͔࣌ؒΔ
  4. ୈҰͷนɿECϕϯμʔͷน ղܾࡦɿϑϧεΫϥονͰࣗࣾ։ൃ͢Δʂ 2018/03 ࣗࣾECϦϓϨΠεϓϩδΣΫτൃ଍ʂˠ 2020/08 ϦϓϨΠε ׬ྃ ޮՌ̍ɿεέʔϥϏϦςΟ໰୊ͷղফ Amazon ECS

    x Fargate → ෛՙࢼݧΛ࣮ࢪ͠ɺεέʔϥϏϦςΟ΋όονϦʂ Ruby on Rails + Vue.js : GraphQL → SPAߏ੒Λ࠾༻ ޮՌ̎ɿΧελϚΠζͷεϐʔυײUP ࣗࣾ։ൃͷҝɺΤϯδχΞ͕͍ͭͰ΋։ൃՄೳʂ ͦͷଞɿFull-Stack Observability New RelicΛಋೖ → ΠϯϑϥϦιʔεҎ֎ʹ΋Backend, Frontend, Mobile App, Log ͋ΒΏΔ؍఺ʹՄ؍ଌੑΛ΋ͨͤͨ
  5. GraphQL Cachingͷྑ͍఺ ϨΠςϯγͷ࡟ݮ ωοτϫʔΫతʹ͍ۙΤοδ͔ΒɺΦϦδϯʹॲཧͤ͞Δ͜ͱͳ͘ϨεϙϯεΛฦͤΔ ਺ඦmsec -> ਺ेmsec ͷ࡟ݮ ίετ࡟ݮ ຖճϖʔδΛදࣔ͢Δ౓ʹݺͼग़͞Ε͍ͯͨ΋ͷ͕

    Ωϟογϡظؒ෼ͷ1ճ ʹݮΔ ྫɿ100tpsͷAPIΛ60ඵΩϟογϡ = 6000ճ -> 1ճͷ࡟ݮ ϦΫΤετ਺ͷେ෯ͳݮগ → APIλεΫ਺ͷεέʔϧΠϯ → ίετ࡟ݮ Ωϟογϡ؅ཧָ͕ CDNଆͰTTL, Invalidation͕Ұݩ؅ཧͰ͖Δ
  6. GraphQL Cachingͷѱ͍఺ GraphQL͸શͯͷϦΫΤετ͕POST͔ͭ1ͭͷύεʹରͯ͠དྷΔҝɺΩϟογϡ͠ਏ͍ ύε͕1͔ͭͩΒΩϟογϡͷ෦෼తͳ࡟আ(Invalidation)͕Ͱ͖ͳ͍ ଞਓͷ৘ใ͕ݟΕͯ͠·͏๫࿐໰୊ͷରࡦʹ஫ҙ͕ඞཁ ৘ใ͕গͳ͍:Akamai, Cloud fl are, GraphCDN,

    Fastly Cloud fl are WorkersͰGraphQLϦΫΤετΛΩϟογϡͯ͠30msͰฦ͢Α͏ʹͨ͠࿩ Cloud fl are Workers(Lambda@Edgeతͳ΋ͷ)+KVSͰ࣮ݱͨ͠ͱ͍͏ࣄྫ Good > Bad க໋తͳBadϙΠϯτ͸ແ͠ɻ࣮ݱʹ޲͚ຊ֨తͳݕ౼Λ։࢝
  7. GraphQL Caching on Amazon CloudFront ΊͬͪΌγϯϓϧʂʂ ίʔυɿaws-samples / amazon-cloudfront-cache-graphql ࣮ࡍ͸ΧελϚΠζ͕ඞཁ

    ՝୊ྫɿ๫࿐໰୊ɺωΨςΟϒΩϟογϡɺΫϥΠΞϯτͷIP͕औΕͳ͍ɺOrigin͕෇༩ͨ͠ϔομ͕ফ͑Δ … etc ղܾࡦ͸࣍ͷهࣄࢀরɿGraphQL caching ᶅϓϩμΫγϣϯϦϦʔε·Ͱʹղܾͨ͠՝୊ɺಋೖʹΑΔޮՌ