Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
大規模サービス技術入門 特別編
Search
kitah
October 26, 2018
Programming
39
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
大規模サービス技術入門 特別編
kitah
October 26, 2018
More Decks by kitah
See All by kitah
大規模サービス技術入門 第3回
changkitah3_
0
23
大規模サービス技術入門 第9回
changkitah3_
0
28
Other Decks in Programming
See All in Programming
Next.js: The final boss of Web Performance
guaca
0
280
Workers Cache を知る
syumai
0
370
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
3
410
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
Performance Optimization With LLMs
xleitix
0
130
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
220
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
430
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
380
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
500
Featured
See All Featured
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
490
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
30 Presentation Tips
portentint
PRO
1
430
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
540
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How to make the Groovebox
asonas
2
2.5k
It's Worth the Effort
3n
188
29k
Transcript
େنαʔϏεٕज़ೖ ಛผฤ
ಛผฤ ͍·Ͳ͖ͷ8FCαʔϏεߏ ஙʹٻΊΒΕΔ࣮ફٕज़ େنαʔϏεʹରԠ͢ΔͨΊʹ
͢ΔαʔϏεɺ૿͑ଓ͚Δσʔλ • δϣϒΩϡʔγεςϜ • ૿͑ଓ͚ΔσʔλΛͲ͏Ճ/ߋ৽͢Δ͔ • ετϨʔδͷબ • RDBMSɺࢄkey-valueετΞɺࢄϑΝΠϧγεςϜ •
ΩϟογϡγεςϜ • ෛՙ͕૿େ͖ͯͨ͠ͱ͖ͷରࡦ • ܭࢉΫϥελ • MapReduceɺHadoopͳͲͷܭࢉΫϥελͷ֓ཁ
-FTTPO δϣϒΩϡʔγεςϜ
WebαʔϏεͱϦΫΤετ • WebαʔϏεͰɺϦΫΤετجຊతʹಉ ظతʹ࣮ߦ͞ΕΔ • ͭ·ΓɺϦΫΤετͷॲཧ͕શͯऴΘ͔ͬͯ ΒϨεϙϯε͕ฦ͞ΕΔ • ΑͬͯɺΛଓ͚ΔWebαʔϏεͰɺ σʔλ͕ੵ͞ΕɺσʔλͷՃॲཧɺߋ৽
ॲཧ͕ॏ͘ͳͬͯ͘Δ
WebαʔϏεͱϦΫΤετ • ྑͩͬͨύϑΥʔϚϯε͕࣌ؒܦͭͱѱ Խ͠ɺϢʔβମݧʹӨڹ͢ΔΑ͏ʹͳΔ • ͦΜͳͱ͖ɺδϣϒΩϡʔγεςϜΛ༻͢ Δ͜ͱͰɺޙճ͠ʹͰ͖ΔॲཧΛඇಉظʹ࣮ ߦ͢ΔΑ͏ʹ͢ΕɺϢʔβମݧΛվળͰ͖ Δ
δϣϒΩϡʔγεςϜೖ • ඇಉظԽ͍ͨ͠ॲཧΛಠཱͨ͠εΫϦϓτʹ ͠ɺΞϓϦέʔγϣϯͷ෦͔Βݺͼग़͢ • ͨͩ͠ɺεΫϦϓτىಈͱॳظԽͷΦʔόʔ ϔου͕େ͖͍ͨΊɺύϑΥʔϚϯε͕ྑ͘ ͳ͍ • େྔͷඇಉظॲཧΛ࣮ߦͤ͞Α͏ͱ͢Δͱɺ
ͦͷ͚ͩϓϩηε͕ىಈ͢ΔͷͰσϝϦο τʹͳΔ
δϣϒΩϡʔγεςϜೖ • δϣϒΩϡʔͱϫʔΧʔ͕ηοτʹͳͬͨδϣϒΩϡʔγ εςϜΛ༻͢Δ • δϣϒΩϡʔ δϣϒΛ͑Δ • ϫʔΧʔ δϣϒΩϡʔΛࢀর͠ɺະ࣮ߦͷδϣϒΛऔΓग़ͯ͠δϣ
ϒΛ࣮ߦ͢Δ • ΫϥΠΞϯτ δϣϒΛೖ͠ɺͦͷޙॲཧΛଓߦͰ͖Δ
ͯͳͷδϣϒΩϡʔγεςϜ ΫϥΠΞϯτ ΫϥΠΞϯτ ΫϥΠΞϯτ δϣϒΩϡʔ δϣϒΛೖ ϫʔΧʔ ϫʔΧʔ Ωϡʔ͔ΒδϣϒΛऔಘ͠ॲཧ
TheSchwartz • ͯͳͰɺδϣϒΩϡʔγεςϜͱͯ͠ɺPerlͰ࣮ ͞ΕͨTheSchwartzͱGearmanΛ༻͍ͯ͠Δ • TheSchwartz • δϣϒΩϡʔʹMySQLͷΑ͏ͳRDBMSΛ༻ ͢ΔδϣϒΩϡʔγεςϜɻ •
MySQLͰδϣϒΩϡʔΛཧ͢ΔͨΊɺߴ͍৴ པੑͱ҆ఆੑΛ֬อɻ • ଟগΛ٘ਜ਼ʹ͍ͯ͠ΔͨΊɺδϣϒͷཻ Λେ͖ͨ͘͠΄͏͕ྑ͍
Gearman • Gearman • TheSchwartzΑΓܰྔͳδϣϒΩϡʔγε ςϜ • δϣϒΩϡʔΛRDBMSͰͳ͘ಠࣗσʔ ϞϯΛ༻͠ɺδϣϒͷใΛΦϯϝϞϦ Ͱ֨ೲͯ͠ੑೳΛ֬อ
• ৴པੑΛ٘ਜ਼ʹ͍ͯ͠ΔͨΊɺ࣮֬ͳॲཧ ͕ඞཁͳ༻్ʹෆ͖
Gearman • GearmanͷΫϥΠΞϯτ͔ΒδϣϒΛೖ͢ Δࡍͷύλʔϯ • ಉظతʹॱ൪ʹॲཧ • ಉظతʹฒྻʹॲཧ • ඇಉظతʹόοΫάϥϯυͰॲཧ
• TheSchwartzඇಉظʹ͔͑͠ͳ͍ͨΊɺ ॊೈʹॲཧ͕Ͱ͖ΔΑ͏ʹͳΔ
WorkerManagerʹΑΔϫʔΧʔͷཧ • TheSchwartzGearman୯ମͰɺγϯϓϧͳ δϣϒΩϡʔγεςϜͱͯ͠े໊ػೳΛඋ ͍͑ͯΔ • ϫʔΧʔϓϩηεΛࡉ੍͔͘ޚ͠Α͏ͱ͢Δ ͱɺ୯ମͰαϙʔτͯ͠ͳ͍ • ͳͷͰɺͯͳͰࣗલͰWorkerManagerΛ
։ൃ͠ϫʔΧʔϓϩηεͷཧʹ༻͍ͯ͠ Δ
WorkerManagerͷػೳ • TheSchwartzGearmanΛϥοϐϯά͠ɺͰ ͖Δ͚ͩগͳ͍มߋͰ྆ํʹରԠͤ͞Δ • ઃఆϑΝΠϧʹΑΔϫʔΧʔΫϥεͷఆٛ • ϫʔΧʔϓϩηεͷϥΠϑαΠΫϧཧ • ϫʔΧʔϓϩηεͷϓϩηεͷཧ
• ϩάΛग़ྗ͢Δ http://blog.stanaka.org/entry/20091023/1256252946
ϩά͔Βͷੳ • ϫʔΧʔ͕δϣϒΛॲཧͨ͠ࡍͷλΠϜελ ϯϓΛه͍ͯ͠Δ • TheSchwartzͷ߹ɺδϣϒͷॲཧ࣌ؒ (process)ͱɺδϣϒ͕ೖ͞Ε͔ͯΒ࣮ࡍʹ ॲཧ͕ߦΘΕΔ·ͰͷԆ࣌ؒ(delay)Λه ͢Δ •
ೖ͞ΕΔδϣϒͷछྨͱྔʹରͯ͠ϫʔΧʔ ͷॲཧೳྗ͕े͔Ͳ͏͔Λ֬ೝͰ͖Δ
-FTTPO ετϨʔδͷબ
૿େ͢ΔσʔλΛͲ͏อଘ͢Δ͔ • WebΞϓϦέʔγϣϯʹ͓͍ͯɺ૿େ͢Δ σʔλΛͲͷΑ͏ʹอଘ͢Δ͔ɺͱ͍͏ Ӭԕͷ՝ • ඦGBɺTBΛ͑ΔσʔλΛѻ͏ετϨʔδ ɺߏมߋΞΫηεύλʔϯͷมԽͰɺ ԠͷྼԽ͕ى͜Δ •
σʔλྔεΩʔϚɺΞΫηεύλʔϯʹ߹Θ ͤͨετϨʔδ࣮͕ॏཁ
WebΞϓϦέʔγϣϯͱετϨʔδ • ετϨʔδɺʮΞϓϦέʔγϣϯͷσʔλ ΛӬଓతʹɺ͘͠ɺҰ࣌తʹอଘ͢Δͨ Ίͷػೳʯ • ΞϓϦέʔγϣϯͰѻ͏σʔλͱݴͬͯ͞ ·͟·ͳಛੑͷͷ͕͋Δ ඞཁͳ৴པ ੑ
αΠζ ߋ৽ස छྨ ϒϩάຊจ ߴ খ ΦϦδφϧσʔλ σδΧϝͷࣸਅ ߴ େ ΦϦδφϧσʔλ ݕࡧ༻ΠϯσοΫε த த ߴ Ճσʔλ )5.-ܗޙͷຊจ খ Ωϟογϡ
దͳετϨʔδબͷ͠͞ • ετϨʔδͷઃܭͱ࣮ଟଘࡏͯ͠Δ • ίετͱύϑΥʔϚϯεͱ҆ఆੑͷόϥϯε Λߴ͍࣍ݩͰୡ͢ΔͨΊʹɺ֨ೲ͍ͨ͠ σʔλͷಛੑʹ߹ͬͨετϨʔδΛબ͢Δ ඞཁ͕͋Δ • αʔϏε։࢝ޙͷετϨʔδͷมߋ͍͠
• Ͱ͖Δ͚ͩಛੑʹ͋ͬͨετϨʔδΛબͼͨ ͍
ετϨʔδબͷલఏͱͳΔ݅ • ΞϓϦέʔγϣϯ͔ΒͷΞΫηεύλʔϯͷࢦඪ • ฏۉαΠζ • ࠷େαΠζ • ৽نՃස •
ߋ৽ස • আස • ࢀরස • ৴པੑɺোϨϕϧɺϋʔυΣΞɺ༧ࢉͳͲ
ετϨʔδͷछྨ • RDBMS : MySQLɺPostgreSQL • ࢄkey-valueετΞ : memcachedɺ TokyoTyrant
• ࢄϑΝΠϧγεςϜ : MogileFSɺ GlusterFSɺLustre • ͦͷଞ : NFSܥࢄϑΝΠϧγεςϜɺ DRBDɺHDFS
3%#.4
RDBMS • දܗࣜͰσʔλΛอଘ͠ɺଟ͘SQLݴޠʹ ΑΓσʔλૢ࡞Λߦ͏γεςϜ • ͯͳͰɺMySQLΛ൚༻ετϨʔδͱͯ͠ ༻ • RDBMSͷ࣮ɺ֤ʑบ͋Δ͕ɺػೳతɾ ੑೳతʹ፰߅͍ͯ͠Δ
MySQL • SQLΛղऍ࣮͠ߦ͢ΔػೳϒϩοΫ • ࣮ࡍʹσʔλΛอ͢ΔػೳϒϩοΫ • ޙऀͷػೳϒϩοΫετϨʔδΤϯδϯ • ओཁͳͷʹMyISAMͱInnoDB SQLͷղऍɾ࣮ߦ
ύʔα ΦϓςΟ ϚΠβ Ωϟογϡ όοϑΝ ཧ ػೳ ετϨʔδΤϯδϯ MyISAM InnoDB Maria ŋŋŋ
MySQL • ετϨʔδΤϯδϯσʔλͷಡΈॻ͖୲
MyISAM • MySQL5.1ͷඪ४ετϨʔδΤϯδϯ • 5.5Ҏ্ͰInnoDB͕ඪ४ • 1ςʔϒϧ͕࣮ࡍͷϑΝΠϧγεςϜ্Ͱ3ͭ ͷϑΝΠϧ(ఆٛɾΠϯσοΫεɾσʔλ)ͱ͠ ͯදݱ
MyISAM • ϝϦοτ • աڈupdatedeleteͨ͜͠ͱ͕ͳ͍ ςʔϒϧʹର͢Δinsert͕ߴ • ىಈɾఀࢭߴ • ςʔϒϧͷҠಈ໊લมߋ͕ϑΝΠϧγε
ςϜૢ࡞ͰͰ͖Δ • DBͷӡ༻༰қ
MyISAM • σϝϦοτ • DBϓϩηε͕ҟৗऴྃ͢Δͱɺςʔϒϧ ͕ഁଛ͢ΔՄೳੑ͕ߴ͍ • τϥϯβΫγϣϯػೳ͕ͳ͍ • updateɺdeleteɺinsert͕ςʔϒϧϩοΫ
ͱͳ͍ͬͯΔͨΊɺߋ৽͕ଟ͍༻్ʹෆ ར
InnoDB • MySQL5.5Ҏ্ͷඪ४ετϨʔδΤϯδϯ • ϝϦοτ • ετϨʔδΤϯδϯશମͰࣄલʹఆٛͨ͠ গͷϑΝΠϧʹσʔλΛอଘ͢Δ • τϥϯβΫγϣϯʹରԠ͍ͯ͠Δ
• ҟৗऴྃ࣌ͷϦΧόϦػೳ͕͋Δ • σʔλߋ৽͕ϨίʔυϩοΫ
InnoDB • σϝϦοτ • ىಈɾఀࢭ͕σʔλྔʹΑͬͯ୯Ґ Ͱ͔͔Δ • ςʔϒϧૢ࡞શͯDBܦ༝ͰߦΘͳ͍ͱ ͍͚ͳ͍
MyISAMͱInnoDBͷϩοΫͷཻ • ϩοΫͱɺෳͷΫϥΠΞϯτ͔Βಉ࣌ʹϨ ίʔυߋ৽ͷϦΫΤετ͕དྷͨ࣌ʹɺετϨʔ δΤϯδϯߋ৽ରͷςʔϒϧϨίʔυʹର ͯ͠ॻ͖ࠐΈಡΈࠐΈΛҰ࣌తʹࢭΊΔΑ͏ʹ ໋ྩΛग़͢͜ͱ • InnoDBରͷϨίʔυʹରͯ͠ϩοΫ •
MyISAMରͷςʔϒϧʹରͯ͠ϩοΫ • InnoDBͩͱಉ͡ςʔϒϧͰҟͳΔϨίʔυͳ Βಉ࣌ʹϦΫΤετΛॲཧͰ͖Δ
MariaͳͲ • MariaMyISAMͷޙܧετϨʔδΤϯδϯ • τϥϯβΫγϣϯػೳͱҟৗऴྃ࣌ͷϦΧό ϦػೳΛ͍࣋ͬͯΔ • ଞʹɺFalconɺNDBɺHeapͳͲ
MyISAM vs InnoDB • MyISAMͱInnoDBͷൺֱ • έʔεόΠέʔε • 1ͭͷαʔόͷ্Ͱࠞࡏ͖͢Ͱͳ͍ ΞΫηεύλʔϯ
దͨ͠ετϨʔδΤϯδϯ ه͔͠͠ͳ͍ .Z*4". ߋ৽ස͕ߴ͍ *OOP%# τϥϯβΫγϣϯ͕ඞཁ *OOP%# 4&-&$5$06/5 Λ༻ .Z*4".
MariaͳͲ • MariaMyISAMͷޙܧετϨʔδΤϯδϯ • τϥϯβΫγϣϯػೳͱҟৗऴྃ࣌ͷϦΧό ϦػೳΛ͍࣋ͬͯΔ • ଞʹɺFalconɺNDBɺHeapͳͲ
ࢄLFZWBMVFετΞ
ࢄkey-valueετΞ • key-valueετΞΛωοτϫʔΫରԠͤͯ͞ɺଟͷ αʔόʹεέʔϧͤ͞ΔػೳΛ࣋ͬͨͷ • RDBMSʹൺͯػೳྼΔ͕ɺύϑΥʔϚϯε1ܻ ~2্ܻ • ༗໊ͳ࣮͕memcached •
ΦϯϝϞϦͰಈ࡞͢ΔͨΊۃΊͯߴ • ࠷ۙਓؾͳͷ͕TokyoTyrant • σΟεΫ্ʹDBϑΝΠϧΛ࣋ͭKVSͰɺ࠶ىಈͯ͠ σʔλ͕อଘ͞Ε͍ͯΔ
memcached • ࢄΞϧΰϦζϜΛΫϥΠΞϯτϥΠϒϥϦ ʹ࣮͍ͯ͠Δ ΞϓϦέʔγϣϯ ΫϥΠΞϯτϥΠϒϥϦ memcached αʔό memcached αʔό
memcached αʔό
memcached • ΦϯϝϞϦ͔ͩΒߴɺ͚ͩͲϓϩηε࠶ى ಈͰσʔλ͕ফ͑Δ • ΦϦδφϧσʔλͷอଘͩΊ • ࠷ੜʹ͕͔͔࣌ؒΔՃσʔλͷ֨ೲʹ ద͞ͳ͍͜ͱ͕͋Δ •
࠷ద͍ͯ͠Δͷ͕Ωϟογϡσʔλ
memcached • Ωϟογϡʹݶఆ͢ΔͱαʔόʹϝϞϦΛ ࢁࡌ͓͚͍͍ͤͯ • ͦ͜·ͰCPUIOੑೳ͕͍Βͳ͍ • ҆ՁͳϋʔυΣΞΛฒͯɺߴՁͳϋʔυ ΣΞΛཁٻ͢ΔRDBMSͷΛݮΒ͢͜ͱ ͕Ͱ͖Δ
TokyoTyrant • ϩʔΧϧͰಈ࡞͢ΔKVSͰ͋ΔTokyoCabinet ΛωοτϫʔΫରԠ࣮ͤͨ͞ • σΟεΫʹσʔλΛॻ͖ग़͢͜ͱͰσʔλΛ ӬଓԽ • σʔλͷੑΛߴΊΔͨΊͷϨϓϦέʔγϣ ϯػೳΛ࣮
• σΟεΫΞΫηε͕ൃੜ͢Δɺmemcached ΑΓྼԽ͢Δ͕ɺRDBMSΑΓߴ
ࢄϑΝΠϧγεςϜ
ࢄϑΝΠϧγεςϜ • ϑΝΠϧγεςϜͷಛੑ্ɺ௨ৗ͋Δఔ Ҏ্ͷαΠζͷσʔλΛอଘ͢Δͷʹదͯ͠ Δ • ࡉ͔͍σʔλ͕େྔʹ͋Δ༻్ʹ͔ͳ͍ ͜ͱ͕ଟ͍
MogileFS • ൺֱతখ͍͞େྔͷϑΝΠϧΛѻ͏ͷ͕త τϥοΧʔ DB ΞϓϦέʔγϣϯ ৴αʔό ετϨʔδ
MogileFS • େྔͷKBʙेMBఔͷը૾ϑΝΠϧΛ ޮతʹ֨ೲ͠ɺऔಘ͢Δ͜ͱ͕త • جຊతʹσʔλՃ͞Εͨޙߋ৽͞Εͣɺ ࢀর͞ΕΔͷΈ • ը૾ͷΞοϓϩʔυΛड͚͚ΔΑ͏ͳWeb ΞϓϦέʔγϣϯʹ͍͍ͯΔ
NFSܥࢄϑΝΠϧγεςϜ • ੲ͔Β͋Δ • ͋ΔαʔόͷϑΝΠϧγεςϜΛଞͷαʔό͔ ΒϚϯτͯ͠ɺͦͷαʔόͷϩʔΧϧϑΝΠ ϧγεςϜͱಉ༷ʹૢ࡞Ͱ͖ΔΑ͏ʹ͢Δٕ ज़ • ؆୯
• վྑ൛͋Γ·͢
WebDAVαʔό • ෆ҆ఆ͔͞ΒͷোΛආ͚͍ͨ࣌ʹ͑Δ • HTTPϕʔεͷϓϩτίϧ • ΞϓϦέʔγϣϯϨΠϠͰ࣮ • ΑΓ҆ఆͯ͠Δ •
Ұ࣌తʹ͔͠ඞཁ͕ͳ͍σʔλͷஔ͖ʹద ͍ͯ͠Δ
DRBD • Distributed Replicated Block Device • ωοτϫʔΫϨΠϠͰͷRAID • ϒϩοΫσόΠεϨϕϧͰࢄɾԽ
• RAID1ΛωοτϫʔΫ্Ͱ࣮ݱ
HDFS • Hadoop Distributed File System • Hadoop༻ʹઃܭ͞ΕͨࢄϑΝΠϧγεςϜ • ϑΝΠϧΛ64MB͝ͱʹׂ֨ೲ͠ɺඦ
MBʙेGBͷڊେͳσʔλΛ֨ೲ͢Δ • Ϩεϙϯε͕͍ͨΊɺϦΞϧλΠϜੑ͍ • ڊେͳϑΝΠϧΛҰؾʹॲཧ͢Δͷʹ͍ͯ Δ
ετϨʔδͷબઓུ
ετϨʔδͷબઓུ • ετϨʔδଟछଟ༷ • ΞϓϦέʔγϣϯͷಛੑʹ߹Θͤͯదͳ ͷΛબͿͷࠔ • બͨ͠ޙઃఆɾνϡʔχϯάͳͲΔ͜ ͱ͕ࢁ •
ৗʹύϑΥʔϚϯεΛࢹ͠ଓ͚Δ͜ͱ͕େ ࣄ
ετϨʔδͷબϑϩʔνϟʔτ σʔλ͕ڊେ Yes No ͱΓ͋͑ͣ MySQL MyISAM ݕࡧ͢Δ࣌ ͷΩʔ1ͭ ϝσΟΞ?
MogileFS ͰΨν ॻ͖ࠐΈ ଟ͍ʁ ফ͑ͯ ͍͍ʁ memcached TokyoTyrant MySQL MyISAM MySQL InnoDB
-FTTPO ΩϟογϡγεςϜ
8FCΞϓϦέʔγϣϯͷෛՙͱ ϓϩΩγΩϟογϡγεςϜ
WebΞϓϦέʔγϣϯͷෛՙͱϓϩΩγ/ΩϟογϡγεςϜ • WebΞϓϦέʔγϣϯͷෛՙ͕૿େ͠ɺγε ςϜ༰ྔ͕ෆ͖ͯͨ࣌͠ɺAPαʔόDB αʔόΛ૿ઃ͢Δ͜ͱͰରԠͰ͖Δ • HTTPϨϕϧͷΩϟογϡΛߦ͏HTTPΞΫη ϥϨʔλΛ༻͢Δ͜ͱͰɺίετͰޮՌ ͷߴ͍ରࡦ͕Ͱ͖Δ
HTTPΞΫηϥϨʔλ • ϑΥϫʔυϓϩΩγ • ΫϥΠΞϯτ͕֎෦ͷαʔόʹΞΫηε͢ ΔࡍʹڬΉϓϩΩγ ֎෦ωοτϫʔΫ ϑΥϫʔυϓϩΩγ ΫϥΠΞϯτ
HTTPΞΫηϥϨʔλ • ϦόʔεϓϩΩγ • ֎෦ͷΫϥΠΞϯτ͕෦ͷαʔόʹΞΫ ηε͢Δࡍʹڬ·ΕΔϓϩΩγ αʔό ϦόʔεϓϩΩγ ΫϥΠΞϯτ
HTTPΞΫηϥϨʔλ • ϦΫΤετʹର͢ΔϨεϙϯεΛΩϟογϡ ͓͖ͯ͠ɺಉ͡ϦΫΤετ͕ಧ͍ͨ࣌ʹΩϟο γϡ͓͍ͯͨ͠ϨεϙϯεΛฦ٫Ͱ͖Δ • ଳҬαʔόϦιʔεΛফඅͤͣʹߴʹϦ ΫΤετॲཧ͕Ͱ͖Δ • ϦόʔεϓϩΩγͰͷΩϟογϡαʔόΛޮՌ
తʹར༻͢Δ͜ͱͰɺϦιʔεͷফඅΛ͑ ͭͭɺେྔͷϦΫΤετΛॲཧͰ͖Δ • ߋ৽සͷ͍ಈతϖʔδ͕ଟ͍࣌༗ޮ
ϦόʔεϓϩΩγΩϟογϡαʔό • ࣮ͱͯ͠࠷༗໊ͳͷSquid • ઃܭ͕ݹ͘ͳ͖͔ͬͯͨΒ࠷ۙͷϚϧνίΞΞʔ ΩςΫνϟͰͪΐͬͱͭΒ͍ • HTTPɺHTTPSɺFTP༻ͷଟػೳϓϩΩγ • ڧྗͳΩϟογϡػೳ
• VarnishSquidΑΓߴ
4RVJE جຊతͳߏ
Squid • ϦόʔεϓϩΩγ͔ΒAPαʔόసૹ͞Εͯ ͍ͨϦΫΤετͷҰ෦ΛΩϟογϡαʔόͰ ॲཧͰ͖ͯɺγεςϜͷੑೳ্͕͕Δ ϦΫΤετ APαʔό Squid Ωϟογϡαʔό ϦόʔεϓϩΩγ
Squid ϝϦοτ • ฏৗ࣌ɺҰఆׂ߹ͷϦΫΤετΛΩϟογϡ Ͱฦ٫͢Δ͜ͱͰAPαʔόૹΒΕΔϦΫΤ ετΛݮΒͤΔɻ • APαʔόͷ૿ՃΛ͑ͨΓɺݮͨ͠Γ Ͱ͖Δ •
Ωϟογϡαʔόͷ΄͏͕1ϦΫΤετ͋ͨΓ ͷαʔόϦιʔε͕গͳ͍ͷͰɺγεςϜશମ Ͱফඅ͞ΕΔϦιʔεΛઅͰ͖Δ
Squid ϝϦοτ • ΞΫηεूத࣌ɺେͳϦΫΤετʹΑͬ ͯγεςϜશମͷΩϟύγςΟΛ͑ͯ͠·͏ ͜ͱΛࢭ͢Δ • ͦͷͨΊʹΩϟογϡαʔόʹ͓͍ͯΞΫη ε͕ूதͨ͠ίϯςϯπΛΩϟογϡ͢Δ •
ΞΫηε͕ಛఆͷίϯςϯπʹूத͢Δ࣌ ޮՌతʹΩϟογϡ͕Մೳ
ෳͰࢄ͢Δ • SquidαʔόΛ2ฒΔ͜ͱͰੑΛ࣋ͨ ͤΔ • 2ͷαʔόΛ࿈ܞͯ͠ಈ࡞ͤ͞Δ͜ͱͰ࠷ ޮΑ͘ಈ࡞ͤ͞ΒΕΔ • ICP(Inter-Cache-Protocol)Λ͏ͱɺ2ͷ αʔόؒͰίϯςϯπΛอ࣋ͯ͠ͳ͍͔͍
߹Θ͕ͤͰ͖Δ
ೋஈߏͷΩϟογϡαʔό • ্ஈͷSquidϓϩΩγͰϦΫΤετड͚͚ • ԼஈͷSquidΩϟογϡαʔόʹϦΫΤετΛ సૹ SquidϓϩΩγ SquidϓϩΩγ Squid Squid
Squid
COSSͬͯͳʹ • Cyclic Object storage system • SquidͷΩϟογϡετϨʔδI/Oͷ͘͠Έͷ Ұͭ •
ύϑΥʔϚϯε͕ߴ͍
COSSαΠζͷܾఆํ๏ • ΩϟογϡͷώοτΛߴΊΔʹɺेͳ Ωϟογϡ༰ྔ͕ඞཁ • Ωϟογϡ༰ྔେ͖͗ͯ͢σϝϦοτ͕ • ॳظىಈͳͲͷCOSSϑΝΠϧͷ࡞ʹ࣌ؒ ͕͔͔Δ •
αʔό࠶ىಈʹΑΓϝϞϦ͕ΫϦΞ͞ΕΔ ͱɺύϑΥʔϚϯε͕҆ఆ͢Δ·Ͱ͕࣌ؒ ͔͔Δ • σΟεΫ༰ྔΛѹഭ͢Δ
COSSαΠζͷܾఆํ๏ • খ͗ͯ͢͞ώοτԼ͢Δ • ࠷దͳ༰ྔɺ[1ඵ͋ͨΓʹอଘ͞ΕΔΦϒ δΣΫτ]×[ΦϒδΣΫτͷฏۉαΠζ]×[Φ ϒδΣΫτͷฏۉ༗ޮ࣌ؒ(ඵ)] • ͯͳͰɺςΩετओମͷ߹ɺGBఔ •
ϝσΟΞओମͷ߹ɺेʙඦेGB
ೖ࣌ͷҙ • ແ࡞ʹϩʔυόϥϯαʹ৽͍͠αʔόΛՃ ͍͚͑ͯͳ͍ • ࣄલʹΥʔϜΞοϓ͓ͤͯ͘͞ඞཁ͕͋Δ • ͦ͜·Ͱೖ೦ͳ४උΛ͢Δ༨༟͕ແ͍߹Ͱ τϥϑΟοΫͷൺΛগͳ͓ͯ͘͘͠΄͏ ͕ྑ͍
7BSOJTI
Varnish • ϦόʔεϓϩΩγͱͯ͠ͷΩϟογϡαʔόʹ ಛԽ࣮ͨ͠ varnished (ຊମ) varnishadm / telnet ཧ
ΠϯλʔϑΣʔε Ϩεϙϯε ϦΫΤετ ڞ༗ϝϞϦ ϩάॻ͖ग़͠ σΟεΫ varnishnsca / varnishlog
VarnishͰؾΛ͚ͭΔϙΠϯτ • ΦϒδΣΫτmmapʹΑΔσΟεΫ্ͷϑΝ Πϧʹอଘ͞ΕΔɻ·ͨɺϓϩηεͷ࠶ىಈ ͰΩϟογϡશࣦͯΘΕΔ • جຊతͳઃఆίϚϯυϥΠϯΦϓγϣϯͰ ༩͑ɺϓϩΩγͱͯ͠ͷϧʔϧઃఆϑΝΠ ϧʹهड़ •
୯ମͰϩά͕ॻ͖ग़ͤͳ͍ͷͰɺڞ༗ϝϞ Ϧ্ʹॻ͖ग़͢
VarnishͰؾΛ͚ͭΔϙΠϯτ • ࠶ىಈͰΩϟογϡ͕શࣦͯΘΕΔɺͱ͍͏ ͜ͱಛʹؾΛ͚ͭΔϙΠϯτ • ࠶ىಈޙΩϟογϡώοτ0ʹͳΓɺ શͯͷϦΫΤετ͕APαʔόʹసૹ͞ΕΔ • SquidҎ্ʹҙਂ͘࠶ىಈɾೖ͢Δ͜ͱ͕ ඞཁ
• Varnish࠷3Ҏ্Ͱӡ༻͠Α͏
-FTTPO ܭࢉΫϥελ
େྔϩάσʔλͷฒྻॲཧ • େنWebαʔϏεΛӡӦ͍ͯ͠Δͱϩά σʔλେྔ͍͗ͯ͢ʂ • ͦͷϩάσʔλΛಡΈࠐΉ͚ͩͰେมʂ • ͔ͦ͜Β౷ܭॲཧղੳΛ͢ΔͷۃΊͯେ ྔͷܭࢉϦιʔε͕ඞཁʂ •
͔ͩΒฒྻॲཧ͠Α͏ʂ
.BQ3FEVDF
MapReduceͷܭࢉϞσϧ • ͯͳͰɺHadoopͱ͍͏MapReduceͷ Φʔϓϯιʔε࣮Λ༻ • MapReduceɺڊେͳσʔλΛߴʹฒྻ͠ ͯॲཧ͢Δ͜ͱ͕త • ଟͷܭࢉϊʔυ͔Βߏ͞ΕͨΫϥελͱ େྔͷσʔλΛࢄͯ֨͠ೲ͢ΔͨΊͷࢄ
ϑΝΠϧγεςϜ͔Βߏ͞Ε͍ͯΔ
MapReduceͷܭࢉϞσϧ • MapεςοϓͱReduceεςοϓ ೖྗ σʔλ ग़ྗ σʔλ தؒ σʔλ ϊʔυ
ϊʔυ ϊʔυ ϊʔυ Ϛελ ॲཧͷࢦࣔ σʔλͷྲྀΕ Reduce εςοϓ Map εςοϓ ࢄ ϑΝΠϧ γεςϜ ࢄ ϑΝΠϧ γεςϜ
MapReduceͷܭࢉϞσϧ • େྔͷೖྗσʔλͷಡΈग़͕͠ϘτϧωοΫ ͱͳΔ • MapReduceɺࢄϑΝΠϧγεςϜͱซ༻ ͢Δ͜ͱ͕ॏཁ • ڊେͳϑΝΠϧΛेMBʹׂ͠ɺϊʔυʹ σʔλΛࢄஔ͓ͯ͘͠
• ॲཧ͢ΔࡍʹɺϩʔΧϧʹσʔλ͕͋Δϊʔ υͰॲཧ͢Δ
)BEPPQ
Hadoop • ਤA.11Ͱɺ47GBͷσʔλ͕4,303ݸͷMap λεΫʹׂ͞Ε࣮ͯߦ͞Εɺ1ͭͷReduce λεΫʹू͞Εͯॲཧ͞ΕΔ • MapReduceͱରʹͳΔࢄϑΝΠϧγεςϜ GFS • HadoopͰɺͦͷΦʔϓϯιʔε൛ͷHDFS