フルCDNアーキテクチャ実験 / Minami Aoyama Night #1

A762939f94c8790c8ca8b717f1be9bee?s=47 dekokun
December 09, 2016

フルCDNアーキテクチャ実験 / Minami Aoyama Night #1

Minami Aoyama Night#1 での発表資料
https://connpass.com/event/45263/

A762939f94c8790c8ca8b717f1be9bee?s=128

dekokun

December 09, 2016
Tweet

Transcript

  1. ϑϧCDNΞʔΩςΫνϟ࣮ݧ Minami Aoyama Night#1 גࣜձࣾ͸ͯͳ id:dekokun 

  2. ࣗݾ঺հ 2

  3. ࣗݾ঺հ • id:dekokun • ͸ͯͳͰΠϯϑϥ@౦ژ • WebΦϖϨʔγϣϯΤϯδχΞ • ͸ͯͳͷ͍Ζ͍ΖͳαʔϏεͷΠϯϑϥ୲౰ •

    ೖࣾ1೥ͪΐͬͱ • લ৬͸PHPͱJSॻ͍ͯ·ͨ͠ 3
  4. 4 • ͸ͯͳϒϩάͷߏ੒঺հ • ಈతϖʔδΛΩϟογϡ͢Δࡍʹߟ͑Δ͜ͱ • ϑϧΩϟογϡΞʔΩςΫνϟ • ϑϧCDNΞʔΩςΫνϟ ຊ೔ͷൃද಺༰

  5. ͸ͯͳϒϩάͷߏ੒঺հ 5

  6. ͸ͯͳϒϩάͷߏ੒঺հ(େ෯লུ൛) 6

  7. • ۃΊͯγϯϓϧͳߏ੒ • Ұ෦ࠓճͷൃදʹؔ܎ͳͦ͞͏ͳߏ੒ཁૉ͸
 େ୾ʹলུ • batch, worker, CDN౳ 7

    ͸ͯͳϒϩάͷߏ੒঺հ
  8. • εϧʔϓοτ/ϨΠςϯγʹ͓͚ΔϘτϧωοΫ͸ओʹ
 PerlͷΞϓϦέʔγϣϯͱDB • ϦΫΤετ͕ΞϓϦέʔγϣϯɾDBʹ౸ୡ͠ͳ͍
 ΞʔΩςΫνϟ͕ߏஙͰ͖Ε͹
 ϨΠςϯγૣͯ͘Ϣʔβ΋ϋοϐʔ
 αʔό΋ݮΒͤͦ͏ 8 ͸ͯͳϒϩάͷߏ੒঺հ

  9. ͸ͯͳϒϩάͷߏ੒঺հ 9 ͜͜ͷલஈͰ ϦΫΤετΛ
 ฦ͍ͨ͠

  10. • ϒϩάαʔϏε͸جຊతʹ
 ϖʔδͷߋ৽ස౓ΑΓ΋ϖʔδͷࢀরස౓ͷํ͕
 ѹ౗తʹଟ͍ • ΞϓϦέʔγϣϯαʔόͷલஈͰHTML͝ͱΩϟογϡ ͤ͞Δ͜ͱͰߴ଎ͳϨεϙϯεΛ࣮ݱͰ͖ͦ͏ • ݱࡏ΋memcachedͰͷΩϟογϡ͸ߦ͍ͬͯΔ͕ɺ
 ͦ΋ͦ΋ΞϓϦέʔγϣϯαʔό·Ͱ


    ϦΫΤετΛ౸ୡͤͨ͘͞ͳ͍ 10 Ωϟογϡ૚ͷಋೖ
  11. ͸ͯͳϒϩάͷߏ੒঺հ 11 Ωϟογϡ૚Λ ڬΉ

  12. • Ωϟογϡ૚ΛڬΉΞʔΩςΫνϟʹ޲͚ͯ
 ݱࡏӶҙ։ൃத 12 Ωϟογϡ૚ͷಋೖ

  13. • VarnishʹΑΔΩϟογϡ૚ͷಋೖ • Varnish͸ੑೳ΋Α͘ॊೈͳΩϟογϡͷ੍ޚ͕ՄೳͰ ͋Γ࠷ߴͰ͢ 13 Ωϟογϡ૚ͷಋೖͷͨΊͷϛυϧ΢ΣΞ

  14. ಈతϖʔδΛΩϟογϡ͢Δࡍʹ
 ߟ͑Δ͜ͱ 14

  15. • ຊ౰ʹϖʔδ·Δ͝ͱΩϟογϡͯ͠େৎ෉ʁ • ϖʔδ͕ߋ৽͞Εͨ࣌ʹͲ͏͢Δͷʁ • εϚʔτϑΥϯͱPCͰಉ͡ΩϟογϡΛग़ͯ͠
 େৎ෉ʁ ͍Ζ͍Ζ͋Γ·͕͢ɺ͜ͷ͋ͨΓ͸࣮ࡍʹ͸ͯͳϒϩά ΁ͷಋೖ͕׬ྃͨ͠Β·ͨผͷ৔ॴͰ࿩͠·͢ 15

    ಈతϖʔδͷΩϟογϡͷࡍʹߟ͑Δ͜ͱ
  16. • ຊ౰ʹϖʔδ·Δ͝ͱΩϟογϡͯ͠େৎ෉ʁ • ϖʔδ͕ߋ৽͞Εͨ࣌ʹͲ͏͢Δͷʁ • εϚʔτϑΥϯͱPCͰಉ͡ΩϟογϡΛग़ͯ͠
 େৎ෉ʁ ࠓ೔͸͚ͩ͜͜ɺ͸ͯͳϒϩάΛྫʹग़ͯ͠͝঺հ 16 ಈతϖʔδͷΩϟογϡͷࡍʹߟ͑Δ͜ͱ

  17. • Ωϟογϡ͢Δͷ͸͍͍͕ϢʔβىҼͰϖʔδͷߋ৽ ͕͔͔Δ • ϢʔβA “ࡢ೔ॻ͍ͨϒϩάΛߋ৽ͨ͠͸ͣͳͷʹ΋ ͏Ұ౓ݟ௚ͨ͠Βߋ৽͞Εͯͳ͍…ͳͥ” • ϢʔβB “ίϝϯτ෇͚ͨ͸ͣͳͷʹίϝϯτ͕ͳ͘

    ͳͬͯΔ…” 17 ಈతϖʔδͷΩϟογϡͷࡍʹߟ͑Δ͜ͱ
  18. • Կ͔มߋ͕͋ͬͨΒ͏·ͦ͘ͷϖʔδ͚ͩΩϟογϡΛ ফͤ͹େৎ෉ʁ • τοϓϖʔδ΍هࣄҰཡϖʔδ͸ʁ • ֤ϖʔδʹ”࠷ۙߋ৽ͨ͠ϒϩάϦετ”͕ࡌ͍ͬͯͨ Γ͢Δ 18 ಈతϖʔδͷΩϟογϡͷࡍʹߟ͑Δ͜ͱ

  19. • ໰୊2. ͷղܾࡦҊෳ਺ 1. ΩϟογϡظؒΛ୹ͯ͘͠ͳΜͱ͔͙྇ • “1෼ؒ͸ίϝϯτ΍هࣄߋ৽͸൓ө͞Ε·ͤΜ” 2. ߋ৽͞Εͨࡍ͸ͳΜ͔͍͍ײ͡ʹߋ৽Օॴʹؔ࿈ͦ͠ ͏ͳΩϟογϡΛશ෦ॠ࣌ʹফ͢

    • 1. ͕ཁ݅తʹOKͰ͋Ε͹γϯϓϧ͕ͩɺΩϟογϡώο τ཰͕Լ͕Δɻ2. ͕͏·͘Ͱ͖ΔͷͰ͋Ε͹ͦΕ͕Ұ൪͍ ͍ 19 ಈతϖʔδͷΩϟογϡͷࡍʹߟ͑Δ͜ͱ
  20. • ໰୊2. ͷղܾࡦҊෳ਺ 1. ΩϟογϡظؒΛ୹ͯ͘͠ͳΜͱ͔͙྇ • “1෼ؒ͸ίϝϯτ΍هࣄߋ৽͸൓ө͞Ε·ͤΜ” 2. ߋ৽͞Εͨࡍ͸ͳΜ͔͍͍ײ͡ʹߋ৽Օॴʹؔ࿈͠ ͦ͏ͳΩϟογϡΛॠ࣌ʹফ͢

    ॠ࣌ʹফ͢ͷॏཁ ΩϟογϡΛফ͢ͷʹ15෼ͱ͔͔͔͍ͬͯͨΒҙຯ͕ͳ ͍ɻ 20 ಈతϖʔδͷΩϟογϡͷࡍʹߟ͑Δ͜ͱ
  21. • Ͳ͏΍ͬͯؔ࿈ͦ͠͏ͳΩϟογϡΛॠ࣌ʹফ͢ʁ • VarnishͰ͋Ε͹Ωϟογϡʹରͯ͠λάΛ෇͚ɺ
 σʔλͷߋ৽͕͋ͬͨࡍʹλάΛࢦఆͯ͠
 ॠ࣌ʹΩϟογϡΛഁغ͢Δ͜ͱ͕Մೳ 21 ಈతϖʔδͷΩϟογϡͷࡍʹߟ͑Δ͜ͱ

  22. 22 λάͰͷΩϟογϡഁغ(λά෇༩) 7BSOJTI 1FSM OHJOY /hoge͍ͩ͘͞ Ωϟογϡ͕ͳ͍ͷͰ /hoge͍ͩ͘͞ /hogeͰ͢ λά͸

    “A”Ͱ͢ /hogeͰ͢
  23. 23 λάͰͷΩϟογϡഁغ(λά෇༩) 7BSOJTI 1FSM OHJOY /hoge͍ͩ͘͞ Ωϟογϡ͕ͳ͍ͷͰ /hoge͍ͩ͘͞ /hogeͰ͢ λά͸

    “A”Ͱ͢ /hogeͰ͢ /hoge͍ͩ͘͞ Ωϟογϡ͕͋Γ·ͨ͠ /hogeͰ͢
  24. 24 7BSOJTI 1FSM OHJOY /A ʹ ߋ৽͕͋Γ·ͨ͠ λάͰͷΩϟογϡഁغ(Ωϟογϡഁغ) /A ʹ

    ߋ৽͕͋Γ·ͨ͠
  25. 25 7BSOJTI 1FSM OHJOY /A ʹ ߋ৽͕͋Γ·ͨ͠ λάA͕͍ͭͯΔ ΩϟογϡΛ ফͯ͠Լ͍͞

    λάͰͷΩϟογϡഁغ(Ωϟογϡഁغ) /A ʹ ߋ৽͕͋Γ·ͨ͠ ফ͠·ͨ͠
  26. • λάͷ෇͚ํɺফ͠ํʹ͍ͭͯৄ͘͠͸ຊ೔ެ։ͷ
 ࢲͷϒϩάࢀর 26 λάͰͷΩϟογϡഁغ

  27. ϑϧΩϟογϡΞʔΩςΫνϟ 27

  28. • Varnish͸ॊೈͳVCLʹΑͬͯۃΊͯ৭ʑͳ͜ͱ͕Մೳ • GETϦΫΤετҎ֎͸Ωϟογϡ͠ͳ͍
 ߋ৽͕͔͔ͬͨࡍʹؔ࿈ͨ͠Ωϟογϡͷഁغ౳
 ͦͷଞ͔ͳΓͷ͜ͱ͕Մೳ -> શͯͷτϥϑΟοΫΛVarnishʹྲྀ͠ɺશͯͷGETϦΫ ΤετΛΩϟογϡͤ͞ΔϑϧΩϟογϡΞʔΩςΫνϟ ͕Մೳʹ

    28 ϑϧΩϟογϡΞʔΩςΫνϟ
  29. ϑϧCDNΞʔΩςΫνϟ 29

  30. • ҎԼɺ׬શʹ࣮ݧஈ֊ͷ࿩Ͱ͢ 30 ϑϧCDNΞʔΩςΫνϟ

  31. • CDNͱ͸ • ίϯςϯπɾσϦόϦʔɾωοτϫʔΫ
 ʢContents Delivery Networkʣͷུ • Πϝʔδͱͯ͠͸ڊେͳΩϟογϡαʔό •

    Akamai, CloudFront, Fastly౳ 31 ϑϧCDNΞʔΩςΫνϟ
  32. • Ұൠతʹ͸ɺCDN͸੩తϑΝΠϧͷ഑৴ʹ༻͍ΒΕΔ • Ωϟογϡͷഁغʹ͕͔͔࣌ؒΓ͕ͪ(CDNʹΑΔ) 32 ϑϧCDNΞʔΩςΫνϟ

  33. • ΋͠Varnishͱಉ༷ͷػೳΛ࣋ͭCDN͕͋Ε͹ • Varnishಉ༷ʹશͯͷτϥϑΟοΫΛCDNʹड͚࣋ͬͯ ΋Β͏͜ͱ͕Մೳ • ࠷ۙͷCDN͸Ωϟογϡͷഁغͷߴ଎ԽΛਐΊ͍ͯΔ • ͦͷதͰ΋Ωϟογϡͷഁغ͕ߴ଎͔ͭVarnishͱಉ༷ ͷॊೈ͞Λ࣋ͭCDN͕͋Δ

    33 ϑϧCDNΞʔΩςΫνϟ
  34. 34 ϑϧCDNΞʔΩςΫνϟ

  35. • “Instant Purge lets you update stale content within 150

    milliseconds or less.” • “Instant Purge” https://www.fastly.com/products/ instant-purging ΑΓ • λάʹΑΔΩϟογϡഁغ΋Մೳ • FastlyͷSurrogate Keysػೳ • ͦͷଞVCLͷهड़Ͱॊೈͳಈ࡞͕Մೳ 35 Fastlyͷػೳ
  36. • ISUCON6ͷ༧બͷ໰୊ΛFastlyͰ഑৴ͯ͠Έͨ • σϞ 36 Fastly

  37. • ੈքͷͲ͔͜ΒͷΞΫηεͰ΋
 Ϣʔβʹߴ଎ʹϨεϙϯεΛฦ͢͜ͱ͕Ͱ͖Δ • τϥϑΟοΫʹ͔͔Δྉ͕ۚ҆͘ͳΓ΍͍͢ • େྔΞΫηε͕དྷͯ΋CDN͕͞͹͍ͯ͘Εͯ҆৺ • ࣗ෼ͷαʔό͸ΞΫηεΛ͞͹͘໾ׂͰ͸ͳ͘
 σʔλͷߋ৽͕͋ͬͨࡍʹ


    ৽ͨͳΩϟογϡΛ࡞Δ໾ׂʹͳΔ 37 ϑϧCDNΞʔΩςΫνϟͷར఺
  38. ϑϧCDNΞʔΩςΫνϟͷ
 ՝୊ 38

  39. • Ωϟογϡ͸ػೳͷ֬ೝ͕೉͘͠ɺόάΛ࡞ΓࠐΈ΍ ͍͢ • όά͕ग़ͨࡍͷඃ֐΋େ͖͘ͳΓ͕ͪ • Ωϟογϡͳ͠Ͱ͍͚ΔͷͰ͋Ε͹Ωϟογϡ͸ͳ͠Ͱ γϯϓϧͳߏ੒ͷ΄͏͕͍͍ʹܾ·͍ͬͯΔ • ։ൃ࣌ͷखݩͰͷςετͲ͏͢Ε͹͍͍ͷ…ʁ

    39 ϑϧCDNΞʔΩςΫνϟͷ՝୊
  40. ·ͱΊ 40

  41. • VarnishʹΑΔϑϧΩϟογϡΞʔΩςΫνϟ͸Մೳ • ϑϧΩϟογϡ͕Ͱ͖ͨΒɺ
 ࣍͸ϑϧCDNΞʔΩςΫνϟͰߴ଎ɺ҆ՁʹେྔͷϦ ΫΤετΛ͞͹͘͜ͱ͕Ͱ͖ΔΑ͏ʹͳΔ 41 ·ͱΊ

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