YAPC::Hokkaido 2016 SAPPOROでの発表資料です。 今後ネットワーク図とか色々ブログの方に公開していきたいと思っています。
ͯͳͷΠϯϑϥڥΛࣗͰ࠶ݱ͢Δ:"1$)PLLBJEP
View Slide
ࣗͷ༷ࢠ
ཧαʔό: 3 (+1)Ծαʔό: 40L3εΠον: 1 (+1)Քಇதͷ()ઃఆதͷ
YAPC::Hokkaidoͷൃදه೦ʹαʔόΛ૿ڧ͠·ͨ͠(10ສ)
ࣗݾհ
ࣗݾհ• id:masayoshi (yoyogidesaiz)• גࣜձࣾͯͳ (20164݄ೖࣾ)• YAPC ॳࢀՃͰ͢• ֶੜ࣌αʔόࢹͷΞϧόΠτ• ݱࡏWebΦϖϨʔγϣϯΤϯδχΞͷج൫νʔϜ
ΞδΣϯμ• ॳΊʹ• ࢲͳΓͷߟ͑ํͱษڧํ๏• ࣗαʔόͷߏհ• ·ͱΊ
1ॳΊʹ
৽ଔ࠷ॳͷ3ϲ݄
• 4݄ ݚम http://developer.hatenastaff.com/entry/2016-newbie-training-of-web-operation• 5݄ ࣾͷωοτϫʔΫ֮͑·͔ͨ͠? ֎෦τϥϑΟοΫͷଳҬ૿͍ͯͩ͘͠͞• 6݄ ωοτϫʔΫઃܭ͍͍ײ͡ʹ͓ئ͍͠·͢• ͦͷޙɺج൫νʔϜ͕ൃ͠ϝϯόʔʹ
ج൫νʔϜ(3໊)• ࣗࣾͷΠϯϑϥಛੑΛѲ͍͍ͯ͠ײ͡ʹ͢Δ• αʔϏε͕ଟ͍(10αʔϏεҎ্)• DC + AWS + ͘͞Βͷઐ༻αʔό• 5,10ར༻͞ΕΔαʔϏε• ཧ,Ծαʔό1000Ҏ্
ࠓҎ্ʹษڧ͠ͳ͍ͱϚζΠ
ͱ͍͏͜ͱͰ
͏͜ΕࣗͰձࣾͷΠϯϑϥΛਅࣅͯΈΔ͔͠ͳ͍ʂ
ͱ͍͏͜ͱʹͳͬͨ
2ࢲͳΓͷߟ͑ํͱษڧํ๏
ษڧటष͘ࣄεϚʔτʹ(Γ͍ͨͱࢥ͍ͬͯΔ)
ࣄ…• ॏཁͳ͜ͱ• ϢʔβʹαʔϏε(Ձ)Λಧ͚Δ͜ͱ• ࣌ؒత੍• ઓͱ҆ఆͷόϥϯε• ͍࣋ͬͯΔٕज़ɺࣝͰΨϯΨϯԥΔ• ศརɺར༻͞Ε͍ͯΔͷΛੵۃతʹ͏
ษڧ…• ࣌ؒΛֶ͔͚ͯΜͰྑ͍• Ұͭͷ͜ͱΛஸೡʹਂ۷Γ• ۚͳ͍ɺ͔͚࣌ؒͯΑ͍• ཕ౿Μ͚ͩͩڧ͘ͳΔ• ͋ɺʙͰݟͨ͜ͱ͋Δͭͩ• ཕௐࠪਂ۷Γ͢Δ͍͍νϟϯε
࣌ؒΛ͔͚ͯਂ۷Γ
࡞ΔਅࣅΔ৮Δฉ͘ ಡΉ͍͔͔࣌ؒ͠ΔΑ͘Θ͔Δ؆୯͙͢ग़དྷΔΑ͘Θ͔ΒΜ
ֶ෦3ͷࠒͷษڧํ๏• ਓ͔Βฉ͘ɺٕज़ϒϩάͱ͔ಡΉ• LinuxͷίϚϯυͱ͔• શવ֮͑ΒΕͳ͍͠ɺΘ͔ΒΜ• ͱΓ͋͑ͣܰ͘৮ͬͯΈΔ• ՈͷϊʔτPCΛLinuxʹ͢Δ• wordpressͱ͔Λߏஙͯ͠ΈͨΓ
৮Δ͚ͩͷݶք• ߏஙखॱΛ֮͑Δ͜ͱ͕ٕज़ྗ?• εΫϦϓτͱ͔ChefͰࣗಈԽग़དྷΔΒ͍͠• ઃఆ߲Λ֮͑Δ͜ͱ͕ॏཁ?• Ͳ͏ͯͦ͠ͷઃఆΛ͢Δͱ͘ͳΔͷ͔͕ॏཁ• ϛυϧΣΞͲ͏ͬͯબྑ͍?• ಓ۩ͷ͍ํॏཁ͚ͩͲબͼํॏཁ
ܰ͘৮ͬͨΓɺฉ͘ɺಡΉఔͰ৽͍͠ͷΛ࡞ɺઃܭ͍ͨ͠Γલ͕ͩ
ֶ෦4Ҏ߱ͷษڧํ๏• αʔόࢹͷΞϧόΠτ• ϛυϧΣΞɺෛՙࢄɺԽͳͲͷߏྫ• ਅࣅΔͨΊͷ࣮ྫ• ݚڀ• ιϑτΣΞϧʔλ࡞ɺϓϩτίϧͷௐࠪͳͲ• ඞཁͳجૅࣝͷษڧͱ࣮
ਅࣅͯ࡞ͬͨΓมߋͨ͠Γ• ߏྫͷߏஙࣗಈԽνϟϨϯδ• ݅ΛՃ͑ͯɺͦΕʹ͋͏Α͏ʹߏྫΛมߋ͢Δ• ݸਓతʹ”റΓϓϨΠ”ͱݺΜͰ͍Δ (ແఀࢭറΓͱ͔)• େม͚ͩͲҰ͔Β࡞ͬͯΈΔ• ϥΠϒϥϦͷ࠶࣮ͱ͔• ϛυϧΣΞͳͲͷҰ෦Λ؆қ࣮• ιέοτϓϩάϥϛϯάͰpreforkܕͱeventܕͱ͔
ಘΒΕΔͷ(ͦͷ1)• ఆੴͷϝϦοτɺσϝϦοτֶ͕Δ• બࢶΛ૿ͤΔɺஅج४͕ग़དྷΔ• ҰͭԼͷϨΠϠʔֶ͕Δ (syscall, OS, Network,..)• ҧ͏ϛυϧΣΞͷཧղʹཱͭ• ͕͕ࣝΔ• ͔ͬͨ”ͭΓ”෦ͷѲ• ͳΜ͔ٕज़ϒϩάɺຊͱ͔Ͱͬͨؾʹͳͬͯͨ• צҧ͍ɺࢥͬͨΑΓ~ͩͬͨ
ಘΒΕΔͷ(ͦͷ2)• ײͱٙ (ෳࡶ,γϯϓϧ, ͍, ͍, ָ, ͭΒ͍, …)• ΈΜͳͲ͏͍ͯ͠ΔΜͩΖ͏?• ͭΒ͍ͷఆ͞ΕͨΘΕํ͡Όͳ͍͔Β͔• ͔ͩΒ͜͏͍͏࣮ͳͷ͔~• ݁ہ͕͜͜ͳΜͩΑͳ͊• ଞʹͬͱద࣮͕ͨ͋͠ΔͷͰ?• ͳ͍ͳΒ࡞Δ͔(ͱݴ͑Δͱ͔͍͍ͬ͜)
ྫ͑ιϑτΣΞϧʔλ࡞
࡞Δͱ͖ͷֶͼྫ (checksum)• 1ͷิ? 2ͷิͳΒΑ͘͏͚Ͳͳ͊• L2ͰL3ͰL4ͰνΣοΫαϜܭࢉ͢Μͷ͔Α• ٙࣅϔομΛ͚ͭͯܭࢉ? IPΞυϨε͕͋Δ ͱ͍͏͜ͱIPΞυϨεॻ͖͑ͨΒL4ܭࢉ͠͠?• ͳΜ͔͍….γϑτԋࢉͱ͔ͰͬͯΔͷʹͳ͊• kernelͲ͏ͬͯΜͩ? ΞηϯϒϦ͔Α…• νΣοΫαϜΦϑϩʔυ? ͍! ϋʔυΣΞ࠷ߴ!• Μ? ԾϚγϯԿʹΦϑϩʔυͯ͠Μͷ?• xenͩͬͨΒxen-netbackͱ͔ʹͦΕͬΆ͍ͷ͋Δͳ͊ʔ
࡞Δͱ͖ͷֶͼྫ (ͦͷଞ)• ͏͐…౸ணύέοτͷฒͼସ͑ΊͬͪΌ͍…• TCPͷΦϓγϣϯϑΟʔϧυ? LinuxσϑΥϧτͰtimestamp͍ͬͯΔͷ͔…• ωοτϫʔΫͷײͩͱϝϞϦίϐʔ͍…• CPU͕1ίΞʹுΓ͘~ͱ͜ΖͰsoftirqͬͯͳʹ?• kernelͷωοτϫʔΫελοΫ͕ϘτϧωοΫ?͑?• DPDKࢯ~ པΉ~
Λͯ͠
ં֯ࣾͷΠϯϑϥͷத͕ݟΕΔͷͰՈͰਅࣅͯΈΑ͏
3ࣗαʔόͷߏհ
ࣾͷΠϯϑϥΛਅࣅΔϝϦοτ• WebαʔϏεܥͷΠϯϑϥج൫ͷఆੴΛֶΔ• ࠓͰ௨༻͢Δےͷྑ͍ઃܭ• ࠓͰݹ͍ɺطʹഁͨ͠Ξϯνύλʔϯ• ͪΐ͏ͲΑ͍نײ• খنΫϥυ, ࣮͕͍͖ΕΔ• ࣌ͷઃܭऀͷҙਤɺؾ͕͔࣋ͪΔ• ࣾݻ༗ͷࣄ(ن, ίετ)Λྀͨ͠ઃܭ• ؆୯ͦ͏Ͱ͍͠, ࣌͑ͳ͔ͬͨ
ਅࣅΔͱ͜Ζਅࣅ͍͍ͯײ͡ʹ• ศརͳͱ͜Ζਅࣅ͍ͯ͘• ҧ͏ͷࢼ͍ͨ͠ͱ͜Ζม͑Δ• ґଘؔʹҙ͠ͳ͕Βߏங͍ͯ͘͠• ՈͱձࣾͷنײΛҙࣝ͢Δ• ՄೳͳݶΓ৽͍͠όʔδϣϯͰ࡞Δ• ͍͍ײ͡ʹͳͬͨΒࣾಋೖ• ָ͠Ήʂ
ͱ͍͏͜ͱͰ࣌ؒ͋Δ͔͗Γհ• ωοτϫʔΫߏ• ཧαʔόͷηοτΞοϓ• ԾαʔόͷηοτΞοϓ• ϓϩϏδϣχϯά• ෛՙࢄɺԽ• WebΞϓϦέʔγϣϯ
ωοτϫʔΫߏ%PN&BTU )PNF 0QF0QFSBUJPOCS CS%PN6%PN6%PN%PN6%PN6%PN%PN6%PN6CS8FTU &9 +VOPTCSCS CS CS CS394%FCJBOYFO594 7Z04$PSF
ཧαʔόͷηοτΞοϓ• Debian Stretch + Xen4.6• Βͳ͍͏ͪʹ࠶ىಈ• Φϑϩʔυ༗ޮʹ͢Δͱ1࣌ؒޙ͙Β͍ʹigb͕Τϥʔ• vif͕4ͭ·Ͱ͔͠࡞Εͳ͍• ηοτΞοϓPXEϒʔτ+Preseed• ϒʔτબͨ͠ΒࣗಈͰOSΠϯετʔϧ• ࡉ͔͍ͷىಈޙʹAnsibleͰ͑Δ
ԾαʔόͷηοτΞοϓ• ࣾ• ԾCPUɺϝϞϦɺσΟεΫαΠζΛਓ͕ࢦఆ• IP, ϗετ໊ཧߏཧπʔϧ, Mackerelʹొ• ࣗ• NUMAΛҙࣝͨ͠ΠϯελϯελΠϓͷఆٛͱಋೖ• xen 4.5͔Β͍͍ײ͡ͷεέδϡʔϥ• IP,ϗετ໊ཧMackerel• ໊લղܾconsul(0.7)ͱPowerDNS(4.0.1)
ϓϩϏδϣχϯάͱ͔• ࣾ• Chef + Capistrano + Jenkins• ࣗ• Ansible + Fabric + Rundeck
ෛՙࢄɺԽ• ࣾ• LVS+keepalived, HAProxy• ࣗ• LVS+keepalivedͱconsul• Seesawͱ͔ࢼͯ͠Έ͍ͨ• ࣗ࡞
WebΞϓϦέʔγϣϯ• ISUCONͷΛ༻• ؆қ࣮ͳͷͰ৭ʑ֬ೝ͍͢͠• ϕϯνϚʔΫ͕͋Δ• ଞͷํͱൺֱɺ͕ग़དྷΔ• ·ͩ࡞Ε͍ͯͳ͍͕ࣗ࡞͍ͨ͠• PerlͰҰͭԿ͔࡞Γ͍ͨ
ࣗαʔόͷྑ͞• ؾܰʹෛՙ͔͚ΒΕΔ• ωοτϫʔΫ·ͰݟΕΔ• ؾʹ͠ͳ͍ͰݐͯΒΕΔ• 10Ҏ্ͳΒίετ҆͘ͳΔ?• ཧɺԾɺίϯςφͳΜͰબΔ• ϋΠύʔόΠβʔͷϩάݟΕΔ• ਂ۷Γ͢Δʹ࠷దʂ
ࣗαʔόָ͍͠ʂ
4·ͱΊ
·ͱΊ• ͊ʙࣗαʔόͨͷ͌͠ʙ• ؆қͳͷͰࣗͰ࡞Δͷେࣄ• ΤϯδχΞϥΠτϢʔβ͡Όବ• Γ͜Έॏཁ• ษڧํ๏ΞϓϦέʔγϣϯΤϯδχΞͱ͞΄ͲมΘΒͳ͍• ͱʹ͔ࣗ͘Ͱ࡞ͬͯΈΑ͏ʂ