Minami Aoyama Night#1 での発表資料 https://connpass.com/event/45263/
ϑϧCDNΞʔΩςΫνϟ࣮ݧMinami Aoyama Night#1גࣜձࣾͯͳid:dekokun
View Slide
ࣗݾհ2
ࣗݾհ• id:dekokun• ͯͳͰΠϯϑϥ@౦ژ• WebΦϖϨʔγϣϯΤϯδχΞ• ͯͳͷ͍Ζ͍ΖͳαʔϏεͷΠϯϑϥ୲• ೖࣾ1ͪΐͬͱ• લ৬PHPͱJSॻ͍ͯ·ͨ͠3
4• ͯͳϒϩάͷߏհ• ಈతϖʔδΛΩϟογϡ͢Δࡍʹߟ͑Δ͜ͱ• ϑϧΩϟογϡΞʔΩςΫνϟ• ϑϧCDNΞʔΩςΫνϟຊͷൃද༰
ͯͳϒϩάͷߏհ5
ͯͳϒϩάͷߏհ(େ෯লུ൛)6
• ۃΊͯγϯϓϧͳߏ• Ұ෦ࠓճͷൃදʹؔͳͦ͞͏ͳߏཁૉ େʹলུ• batch, worker, CDN7ͯͳϒϩάͷߏհ
• εϧʔϓοτ/ϨΠςϯγʹ͓͚ΔϘτϧωοΫओʹ PerlͷΞϓϦέʔγϣϯͱDB• ϦΫΤετ͕ΞϓϦέʔγϣϯɾDBʹ౸ୡ͠ͳ͍ ΞʔΩςΫνϟ͕ߏஙͰ͖Ε ϨΠςϯγૣͯ͘Ϣʔβϋοϐʔ αʔόݮΒͤͦ͏8ͯͳϒϩάͷߏհ
ͯͳϒϩάͷߏհ9͜͜ͷલஈͰϦΫΤετΛ ฦ͍ͨ͠
• ϒϩάαʔϏεجຊతʹ ϖʔδͷߋ৽සΑΓϖʔδͷࢀরසͷํ͕ ѹతʹଟ͍• ΞϓϦέʔγϣϯαʔόͷલஈͰHTML͝ͱΩϟογϡͤ͞Δ͜ͱͰߴͳϨεϙϯεΛ࣮ݱͰ͖ͦ͏• ݱࡏmemcachedͰͷΩϟογϡߦ͍ͬͯΔ͕ɺ ͦͦΞϓϦέʔγϣϯαʔό·Ͱ ϦΫΤετΛ౸ୡͤͨ͘͞ͳ͍10Ωϟογϡͷಋೖ
ͯͳϒϩάͷߏհ11ΩϟογϡΛڬΉ
• ΩϟογϡΛڬΉΞʔΩςΫνϟʹ͚ͯ ݱࡏӶҙ։ൃத12Ωϟογϡͷಋೖ
• VarnishʹΑΔΩϟογϡͷಋೖ• VarnishੑೳΑ͘ॊೈͳΩϟογϡͷ੍ޚ͕ՄೳͰ͋Γ࠷ߴͰ͢13ΩϟογϡͷಋೖͷͨΊͷϛυϧΣΞ
ಈతϖʔδΛΩϟογϡ͢Δࡍʹ ߟ͑Δ͜ͱ14
• ຊʹϖʔδ·Δ͝ͱΩϟογϡͯ͠େৎʁ• ϖʔδ͕ߋ৽͞Εͨ࣌ʹͲ͏͢Δͷʁ• εϚʔτϑΥϯͱPCͰಉ͡ΩϟογϡΛग़ͯ͠ େৎʁ͍Ζ͍Ζ͋Γ·͕͢ɺ͜ͷ͋ͨΓ࣮ࡍʹͯͳϒϩάͷಋೖ͕ྃͨ͠Β·ͨผͷॴͰ͠·͢15ಈతϖʔδͷΩϟογϡͷࡍʹߟ͑Δ͜ͱ
• ຊʹϖʔδ·Δ͝ͱΩϟογϡͯ͠େৎʁ• ϖʔδ͕ߋ৽͞Εͨ࣌ʹͲ͏͢Δͷʁ• εϚʔτϑΥϯͱPCͰಉ͡ΩϟογϡΛग़ͯ͠ େৎʁࠓ͚ͩ͜͜ɺͯͳϒϩάΛྫʹग़ͯ͠͝հ16ಈతϖʔδͷΩϟογϡͷࡍʹߟ͑Δ͜ͱ
• Ωϟογϡ͢Δͷ͍͍͕ϢʔβىҼͰϖʔδͷߋ৽͕͔͔Δ• ϢʔβA “ࡢॻ͍ͨϒϩάΛߋ৽ͨͣ͠ͳͷʹ͏Ұݟͨ͠Βߋ৽͞Εͯͳ͍…ͳͥ”• ϢʔβB “ίϝϯτ͚ͨͣͳͷʹίϝϯτ͕ͳ͘ͳͬͯΔ…”17ಈతϖʔδͷΩϟογϡͷࡍʹߟ͑Δ͜ͱ
• Կ͔มߋ͕͋ͬͨΒ͏·ͦ͘ͷϖʔδ͚ͩΩϟογϡΛফͤେৎʁ• τοϓϖʔδهࣄҰཡϖʔδʁ• ֤ϖʔδʹ”࠷ۙߋ৽ͨ͠ϒϩάϦετ”͕ࡌ͍ͬͯͨΓ͢Δ18ಈతϖʔδͷΩϟογϡͷࡍʹߟ͑Δ͜ͱ
• 2. ͷղܾࡦҊෳ1. ΩϟογϡظؒΛͯ͘͠ͳΜͱ͔͙྇• “1ؒίϝϯτهࣄߋ৽ө͞Ε·ͤΜ”2. ߋ৽͞ΕͨࡍͳΜ͔͍͍ײ͡ʹߋ৽Օॴʹؔ࿈ͦ͠͏ͳΩϟογϡΛશ෦ॠ࣌ʹফ͢• 1. ͕ཁ݅తʹOKͰ͋Εγϯϓϧ͕ͩɺΩϟογϡώοτ͕Լ͕Δɻ2. ͕͏·͘Ͱ͖ΔͷͰ͋ΕͦΕ͕Ұ൪͍͍19ಈతϖʔδͷΩϟογϡͷࡍʹߟ͑Δ͜ͱ
• 2. ͷղܾࡦҊෳ1. ΩϟογϡظؒΛͯ͘͠ͳΜͱ͔͙྇• “1ؒίϝϯτهࣄߋ৽ө͞Ε·ͤΜ”2. ߋ৽͞ΕͨࡍͳΜ͔͍͍ײ͡ʹߋ৽Օॴʹؔ࿈ͦ͠͏ͳΩϟογϡΛॠ࣌ʹফ͢ॠ࣌ʹফ͢ͷॏཁΩϟογϡΛফ͢ͷʹ15ͱ͔͔͔͍ͬͯͨΒҙຯ͕ͳ͍ɻ20ಈతϖʔδͷΩϟογϡͷࡍʹߟ͑Δ͜ͱ
• Ͳ͏ͬͯؔ࿈ͦ͠͏ͳΩϟογϡΛॠ࣌ʹফ͢ʁ• VarnishͰ͋ΕΩϟογϡʹରͯ͠λάΛ͚ɺ σʔλͷߋ৽͕͋ͬͨࡍʹλάΛࢦఆͯ͠ ॠ࣌ʹΩϟογϡΛഁغ͢Δ͜ͱ͕Մೳ21ಈతϖʔδͷΩϟογϡͷࡍʹߟ͑Δ͜ͱ
22λάͰͷΩϟογϡഁغ(λά༩)7BSOJTI 1FSMOHJOY/hoge͍ͩ͘͞Ωϟογϡ͕ͳ͍ͷͰ/hoge͍ͩ͘͞/hogeͰ͢λά “A”Ͱ͢/hogeͰ͢
23λάͰͷΩϟογϡഁغ(λά༩)7BSOJTI 1FSMOHJOY/hoge͍ͩ͘͞Ωϟογϡ͕ͳ͍ͷͰ/hoge͍ͩ͘͞/hogeͰ͢λά “A”Ͱ͢/hogeͰ͢/hoge͍ͩ͘͞Ωϟογϡ͕͋Γ·ͨ͠/hogeͰ͢
247BSOJTI 1FSMOHJOY/A ʹߋ৽͕͋Γ·ͨ͠λάͰͷΩϟογϡഁغ(Ωϟογϡഁغ)/A ʹߋ৽͕͋Γ·ͨ͠
257BSOJTI 1FSMOHJOY/A ʹߋ৽͕͋Γ·ͨ͠λάA͕͍ͭͯΔΩϟογϡΛফͯ͠Լ͍͞λάͰͷΩϟογϡഁغ(Ωϟογϡഁغ)/A ʹߋ৽͕͋Γ·ͨ͠ফ͠·ͨ͠
• λάͷ͚ํɺফ͠ํʹ͍ͭͯৄ͘͠ຊެ։ͷ ࢲͷϒϩάࢀর26λάͰͷΩϟογϡഁغ
ϑϧΩϟογϡΞʔΩςΫνϟ27
• VarnishॊೈͳVCLʹΑͬͯۃΊͯ৭ʑͳ͜ͱ͕Մೳ• GETϦΫΤετҎ֎Ωϟογϡ͠ͳ͍ ߋ৽͕͔͔ͬͨࡍʹؔ࿈ͨ͠Ωϟογϡͷഁغ ͦͷଞ͔ͳΓͷ͜ͱ͕Մೳ-> શͯͷτϥϑΟοΫΛVarnishʹྲྀ͠ɺશͯͷGETϦΫΤετΛΩϟογϡͤ͞ΔϑϧΩϟογϡΞʔΩςΫνϟ͕Մೳʹ28ϑϧΩϟογϡΞʔΩςΫνϟ
ϑϧCDNΞʔΩςΫνϟ29
• ҎԼɺશʹ࣮ݧஈ֊ͷͰ͢30ϑϧCDNΞʔΩςΫνϟ
• CDNͱ• ίϯςϯπɾσϦόϦʔɾωοτϫʔΫ ʢContents Delivery Networkʣͷུ• Πϝʔδͱͯ͠ڊେͳΩϟογϡαʔό• Akamai, CloudFront, Fastly31ϑϧCDNΞʔΩςΫνϟ
• ҰൠతʹɺCDN੩తϑΝΠϧͷ৴ʹ༻͍ΒΕΔ• Ωϟογϡͷഁغʹ͕͔͔࣌ؒΓ͕ͪ(CDNʹΑΔ)32ϑϧCDNΞʔΩςΫνϟ
• ͠Varnishͱಉ༷ͷػೳΛ࣋ͭCDN͕͋Ε• Varnishಉ༷ʹશͯͷτϥϑΟοΫΛCDNʹड͚࣋ͬͯΒ͏͜ͱ͕Մೳ• ࠷ۙͷCDNΩϟογϡͷഁغͷߴԽΛਐΊ͍ͯΔ• ͦͷதͰΩϟογϡͷഁغ͕ߴ͔ͭVarnishͱಉ༷ͷॊೈ͞Λ࣋ͭCDN͕͋Δ33ϑϧCDNΞʔΩςΫνϟ
34ϑϧCDNΞʔΩςΫνϟ
• “Instant Purge lets you update stale content within150 milliseconds or less.”• “Instant Purge” https://www.fastly.com/products/instant-purging ΑΓ• λάʹΑΔΩϟογϡഁغՄೳ• FastlyͷSurrogate Keysػೳ• ͦͷଞVCLͷهड़Ͱॊೈͳಈ࡞͕Մೳ35Fastlyͷػೳ
• ISUCON6ͷ༧બͷΛFastlyͰ৴ͯ͠Έͨ• σϞ36Fastly
• ੈքͷͲ͔͜ΒͷΞΫηεͰ ϢʔβʹߴʹϨεϙϯεΛฦ͢͜ͱ͕Ͱ͖Δ• τϥϑΟοΫʹ͔͔Δྉ͕ۚ҆͘ͳΓ͍͢• େྔΞΫηε͕དྷͯCDN͕͍ͯ͘͞Εͯ҆৺• ࣗͷαʔόΞΫηεΛׂ͘͞Ͱͳ͘ σʔλͷߋ৽͕͋ͬͨࡍʹ ৽ͨͳΩϟογϡΛ࡞ΔׂʹͳΔ37ϑϧCDNΞʔΩςΫνϟͷར
ϑϧCDNΞʔΩςΫνϟͷ ՝38
• Ωϟογϡػೳͷ֬ೝ͕͘͠ɺόάΛ࡞ΓࠐΈ͍͢• όά͕ग़ͨࡍͷඃେ͖͘ͳΓ͕ͪ• Ωϟογϡͳ͠Ͱ͍͚ΔͷͰ͋ΕΩϟογϡͳ͠Ͱγϯϓϧͳߏͷ΄͏͕͍͍ʹܾ·͍ͬͯΔ• ։ൃ࣌ͷखݩͰͷςετͲ͏͢Ε͍͍ͷ…ʁ39ϑϧCDNΞʔΩςΫνϟͷ՝
·ͱΊ40
• VarnishʹΑΔϑϧΩϟογϡΞʔΩςΫνϟՄೳ• ϑϧΩϟογϡ͕Ͱ͖ͨΒɺ ࣍ϑϧCDNΞʔΩςΫνϟͰߴɺ҆ՁʹେྔͷϦΫΤετΛ͘͜͞ͱ͕Ͱ͖ΔΑ͏ʹͳΔ41·ͱΊ
͋Γ͕ͱ͏͍͟͝·ͨ͠42