Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
はてなのインフラ環境を自宅で再現する
Search
masayoshi
December 10, 2016
Technology
7
12k
はてなのインフラ環境を自宅で再現する
YAPC::Hokkaido 2016 SAPPOROでの発表資料です。
今後ネットワーク図とか色々ブログの方に公開していきたいと思っています。
masayoshi
December 10, 2016
Tweet
Share
More Decks by masayoshi
See All by masayoshi
メトリクス、ログ、トレースをうまく使い分けて可観測性を高めよう!
masayoshi
9
9.3k
Developers Summit 2021 summer
masayoshi
15
28k
2021-06-cloud-native-reg-event
masayoshi
8
2.5k
SRE_Culture_Organization
masayoshi
17
9.9k
cloudnative-kansai-2019
masayoshi
1
670
ミドルウェア実行環境の多様化を考慮したインフラアーキテクチャの一検討/study on web system architecture #2
masayoshi
0
3.5k
Webサービスにおけるインフラアーキテクチャの体系化と選択自動化の研究/study on web system architecture #1
masayoshi
0
2.7k
はてなのインフラストラクチャ設計構想 / The Concept of Hatena Infrastructure
masayoshi
1
5.3k
chroot-network-uts-container
masayoshi
6
770
Other Decks in Technology
See All in Technology
今年一年で頑張ること / What I will do my best this year
pauli
1
220
FODにおけるホーム画面編成のレコメンド
watarukudo
PRO
2
270
駆け出しリーダーとしての第一歩〜開発チームとの新しい関わり方〜 / Beginning Journey as Team Leader
kaonavi
0
120
When Windows Meets Kubernetes…
pichuang
0
300
Visual StudioとかIDE関連小ネタ話
kosmosebi
1
370
0→1事業こそPMは営業すべし / pmconf #落選お披露目 / PM should do sales in zero to one
roki_n_
PRO
1
1.3k
#TRG24 / David Cuartielles / Post Open Source
tarugoconf
0
580
デジタルアイデンティティ技術 認可・ID連携・認証 応用 / 20250114-OIDF-J-EduWG-TechSWG
oidfj
2
670
「隙間家具OSS」に至る道/Fujiwara Tech Conference 2025
fujiwara3
7
6.4k
今から、 今だからこそ始める Terraform で Azure 管理 / Managing Azure with Terraform: The Perfect Time to Start
nnstt1
0
220
JAWS-UG20250116_iOSアプリエンジニアがAWSreInventに行ってきた(真面目編)
totokit4
0
140
Git scrapingで始める継続的なデータ追跡 / Git Scraping
ohbarye
5
490
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
53
13k
GraphQLとの向き合い方2022年版
quramy
44
13k
GitHub's CSS Performance
jonrohan
1030
460k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
960
Designing for Performance
lara
604
68k
Building Adaptive Systems
keathley
38
2.4k
Rails Girls Zürich Keynote
gr2m
94
13k
Gamification - CAS2011
davidbonilla
80
5.1k
Writing Fast Ruby
sferik
628
61k
Documentation Writing (for coders)
carmenintech
67
4.5k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3.1k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Transcript
ͯͳͷΠϯϑϥڥ ΛࣗͰ࠶ݱ͢Δ :"1$)PLLBJEP
ࣗͷ༷ࢠ
None
ཧαʔό: 3 (+1) Ծαʔό: 40 L3εΠον: 1 (+1) Քಇதͷ ()ઃఆதͷ
None
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 0QF 0QFSBUJPO CS CS %PN6 %PN6
%PN %PN6 %PN6 %PN %PN6 %PN6 CS 8FTU &9 +VOPT CS CS CS CS CS 394 %FCJBO YFO 594 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Ҏ্ͳΒίετ҆͘ͳΔ? •
ཧɺԾɺίϯςφͳΜͰબΔ • ϋΠύʔόΠβʔͷϩάݟΕΔ • ਂ۷Γ͢Δʹ࠷దʂ
None
ࣗαʔόָ͍͠ʂ
4 ·ͱΊ
·ͱΊ • ͊ʙࣗαʔόͨͷ͌͠ʙ • ؆қͳͷͰࣗͰ࡞Δͷେࣄ • ΤϯδχΞϥΠτϢʔβ͡Όବ • Γ͜Έॏཁ •
ษڧํ๏ΞϓϦέʔγϣϯΤϯδχΞͱ͞΄Ͳม ΘΒͳ͍ • ͱʹ͔ࣗ͘Ͱ࡞ͬͯΈΑ͏ʂ