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
1000万ダウンロードアプリ『メルカリ』を支える技術
Search
Tatsuhiko Kubo
February 07, 2015
Technology
55k
78
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
1000万ダウンロードアプリ『メルカリ』を支える技術
dots. Summit 2015
Tatsuhiko Kubo
February 07, 2015
More Decks by Tatsuhiko Kubo
See All by Tatsuhiko Kubo
Diff algorithm abstraction in Go
cubicdaiya
0
34
Mackerel in さくらのクラウド
cubicdaiya
1
1.1k
Handling a tremendous amount of images with Fastly / Yamagoya Traverse 2020
cubicdaiya
2
1.6k
System Integration with Fastly
cubicdaiya
0
690
実例で学ぶ画像最適化集 with ImageFlux / ImageFlux meetup#2
cubicdaiya
4
20k
Software Engineer, Infrastructure
cubicdaiya
4
3.3k
High Performance Count Up!
cubicdaiya
0
440
ImageFluxを利用した画像配信の最適化 / ImageFlux meetup 201801
cubicdaiya
0
3.2k
Building high performance push notification server in Go
cubicdaiya
5
3.5k
Other Decks in Technology
See All in Technology
転んだ話が背中を預ける理由になる / A_story_about_falling_down_gives_you_a_reason_to_watch_each_other_s_backs.pdf
pauli
3
330
"優秀な誰か"の下位互換にならないために
yut0naga1_fa
0
160
契約書画像からの情報抽出に特化した視覚接地モデルを育てる話
sansantech
PRO
1
160
ハードウェアコンペでもAI駆動開発が進んでいる話
iotengineer22
1
610
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
4
4.2k
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
0
580
Kiro Crewをはじめよう
kizawa2020
1
110
[AWS 秋のクラウドオペレーション祭り 2026]AWS DevOps Agentで変わるリリースと運用対応 ~リリース管理機能と Directed actions のご紹介~
furuton
4
1.1k
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
6
2.2k
初対面のメンバーがチームを組み、Claude Codeでゼロからサービスをリリース
mkdev10
1
110
AI時代に必要な脅威モデリング― 変化の速度に負けない理解とリスク判断
masakane55
5
1.2k
Deep Data Security 機能解説
oracle4engineer
PRO
2
730
Featured
See All Featured
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
How to Ace a Technical Interview
jacobian
280
24k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
860
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
Designing for Performance
lara
612
70k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
390
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Transcript
1000ສμϯϩʔυΞϓϦ ʰϝϧΧϦʱ Λࢧ͑Δٕज़ גࣜձࣾϝϧΧϦ ΤϯδχΞ ٱอୡ
[email protected]
dots. summit 2015
ࣗݾհ • ٱอୡ(bokko) • @cubicdaiya • Software Engineer in Infrastructure
Engineering • OSS Contributor • e.g. nginx, mruby, ngx_mruby, ngx_lua, h2o, etc…
ʰϝϧΧϦʱʹ͍ͭͯ
None
ओཁKPIσʔλ μϯϩʔυ ߪೖֹۚ ग़ 1000ສDLಥഁ ݄ؒेԯԁ 1ेສҎ্ ΞϓϦΛެ։͔ͯ͠Β1ͱͰ 1000ສμϯϩʔυୡʂ(20137݄ެ։)
None
ʰϝϧΧϦʱΛࢧ͑Δ̋̋
τϐοΫ • ϝϧΧϦΛࢧ͑Δ։ൃମ੍ • ϝϧΧϦΛࢧ͑ΔΠϯϑϥ • ϝϧΧϦΛࢧ͑ΔαϒγεςϜ • ϝϧΧϦΛࢧ͑ΔGo
τϐοΫ • ϝϧΧϦΛࢧ͑Δ։ൃମ੍ • ϝϧΧϦΛࢧ͑ΔΠϯϑϥ • ϝϧΧϦΛࢧ͑ΔαϒγεςϜ • ϝϧΧϦΛࢧ͑ΔGo
ʰϝϧΧϦʱΛࢧ͑Δ։ൃମ੍ • ΤϯδχΞ20ਓ(QAɺCS෦͋Δ) • ΠϯϑϥνʔϜؚࣗΊͯ5ਓ • ৭ΜͳόοΫΤϯυΛ࣋ͭΤϯδχΞ͕ू·ͬͯ·͢ • Ϛωʔδϟ৬্ڃΤϯδχΞ৬͋Γ·͕͢ɺϑϥοτͳ งғؾͰ͢
ʰϝϧΧϦʱΛࢧ͑Δ։ൃମ੍ • Github্ͰPull Requestϕʔεͷ։ൃ • RedmineͰλεΫཧ • Slackϑϧ׆༻
ʰϝϧΧϦʱΛࢧ͑Δ։ൃମ੍ • Qiita:TeamͰυΩϡϝϯτڞ༗ • Travis-CIʹΑΔܧଓతΠϯςάϨʔγϣϯ • Ansible PlaybookʹΑΔϓϩϏδϣχϯά • DockerʹΑΔݸਓ։ൃڥ(Vagrantͷਓ͍·͢)
τϐοΫ • ϝϧΧϦΛࢧ͑Δ։ൃମ੍ • ϝϧΧϦΛࢧ͑ΔΠϯϑϥ • ϝϧΧϦΛࢧ͑ΔαϒγεςϜ • ϝϧΧϦΛࢧ͑ΔPHP •
ϝϧΧϦΛࢧ͑ΔGo
ʰϝϧΧϦʱΛࢧ͑ΔΠϯϑϥ • ͘͞Βͷઐ༻αʔό • ͘͞ΒΫϥυ • Amazon Web Service •
Google Cloud Platform • Treasure Data • etc…
ʰϝϧΧϦʱΛࢧ͑ΔΠϯϑϥ • αʔό100Ҏ্ • ΞϓϦJP൛ͱUS൛͕͋Δ • JP൛͘͞ΒɺUS൛AWS্Ͱӡ༻ • ࡢͷޙ͔ΒJP൛͘͞Βͷઐ༻αʔό͕ϝΠϯ •
ioDriveͬͯ·͢
τϐοΫ • ϝϧΧϦΛࢧ͑Δ։ൃମ੍ • ϝϧΧϦΛࢧ͑ΔΠϯϑϥ • ϝϧΧϦΛࢧ͑ΔαϒγεςϜ • ϝϧΧϦΛࢧ͑ΔGo
େࡶͳશମ૾
શ෦͓͑͢ΔͷແཧͳͷͰ ͍͔ͭ͘հ͍͖ͯ͠·͢
ϩʔυόϥϯαʔ
OHJOY
nginx • APIϦΫΤετͷϩʔυόϥϯε • SSLλʔϛωʔγϣϯ & SPDYήʔτΣΠ • ίϯςϯπΩϟογϡ
HTTPS௨৴ͷߴԽ • TLS Session Cache • TLS Session Tickets •
SPDY
TLS Session Cache • TLSϋϯυγΣΠΫͷηογϣϯใΛαʔόʹ Ωϟογϡ • nginxͰڞ༗ϝϞϦ্ʹΩϟογϡ͞ΕΔ • ࣍ճͷTLSϋϯυγΣΠΫΛলུ
• CPUϦιʔεͷݮϨΠςϯγղফͷޮՌ͕͋Δ
TLS Session Cache with nginx
TLS Session Tickets • ҉߸Խͨ͠ηογϣϯใ(νέοτ)ΛΫϥ ΠΞϯτʹ͢ • νέοτΛݩʹTLSηογϣϯΛ࠶։ • HTTPSαʔόෳͰηογϣϯΩϟογϡ
Λڞ༗Ͱ͖Δ • αϙʔτ͍ͯ͠Δ͕গͳ͍ͷ͕
TLS Session Tickets with nginx
SPDY • WebΛߴԽ͢ΔͨΊͷϓϩτίϧ • nginx-1.5.10Ҏ߱ͰSPDY3.1͕ར༻Մ • ࠷৽ͷiOSAndroidͰαʔό͕ରԠͯ͠ ͍ΕࣗಈతʹSPDY͕ར༻͞ΕΔ
SPDY with nginx
άϥϑͰݟΔ࠷దԽͷޮՌ 5-44FTTJPO $BDIFc5JDLFUT ಋೖλΠϛϯά
άϥϑͰݟΔ࠷దԽͷޮՌ 5-44FTTJPO $BDIFc5JDLFUT ಋೖλΠϛϯά
άϥϑͰݟΔ࠷దԽͷޮՌ 41%:ಋೖͨ͠ͷϐʔΫ
"1*αʔό
"QBDIF NPE@QIQ
Apache + mod_php • ϝϧΧϦͷதͰҰ൪ٕज़తʹރΕͨίϯϙʔωϯτ • DietCakeͱ͍͏ܰྔͰߴͳϑϨʔϜϫʔΫΛར༻ • ฏۉϨεϙϯελΠϜ͕ϐʔΫ࣌Ͱ100msલޙ •
APIαʔό΄ͱΜͲϘτϧωοΫʹͳ͍ͬͯͳ͍
σʔλετΞ
.Z42- 3FEJT NFNDBDIFE 4PMS -VDFOF
ϝϧΧϦΛࢧ͑ΔσʔλετΞ • MySQL • αʔϏεͷίΞσʔλ֨ೲॴ • αʔϏεͷن֦େʹ͍ਫฏׂ͕Μ • Redisɺmemcached •
ΞϓϦέʔγϣϯΩϟογϡϨΠϠʔ • Solr(Lucene) • ݕࡧ
ඇಉظॲཧͷͨΊͷ ΩϡʔͱδϣϒϫʔΧʔ
2. QIQ1BSBMMFM1SFGPSL
ॏ͍ॲཧ2.ʹΤϯΩϡʔͯ͠ඇಉظͰ࣮ߦ
PHP-Paralle-Prefork • PHPͷpreforkσʔϞϯϑϨʔϜϫʔΫ • ฐࣾͷαʔόαΠυΤϯδχΞ͕։ൃ • ϓϩηε୯ҐͰλεΫΛฒྻ࣮ߦ • Q4M͔ΒσΩϡʔͨ͠λεΫΛฒྻ࣮ߦ͍ͯ͠Δ •
PHPͰ͜͜·ͰͰ͖Δʂ
ϩάσʔλੳج൫
None
ΞΫηεϩάΞϓϦέʔγϣϯͷϩάΛ 'MVFOUEόονͰ֤ॴʹసૹ
ϝϧΧϦΛࢧ͑Δ ϩά&σʔλੳج൫ ίϯϙʔωϯτ ༻్ 'MVFOUE ֤छϩάసૹ 5SFBTVSFEBUB #JH2VFSZ σʔλੳ 4
ϩάͷόοΫΞοϓ ,JCBOB &MBTUJDTFBSDI ۙͷϩάσʔλͷ౷ܭΛνΣοΫ /PSJLSB ϦΞϧλΠϜͰσʔλूܭɾࢹ
τϐοΫ • ϝϧΧϦΛࢧ͑Δ։ൃମ੍ • ϝϧΧϦΛࢧ͑ΔΠϯϑϥ • ϝϧΧϦΛࢧ͑ΔαϒγεςϜ • ϝϧΧϦΛࢧ͑ΔGo
ʰϝϧΧϦʱΛࢧ͑ΔGo • PHPͷΠϝʔδ͕ڧ͍ฐࣾͰ͕͢ɺRubyNodeɺ Goͱ͍ͬͨݴޠར༻͍ͯ͠·͢ • ࠷ۙPerlʹΑΔϞχλϦϯάπʔϧ͕ՃΘΓ·ͨ͠ • ࠓճϝϧΧϦͰঃʑʹ૿͍͑ͯΔGoͷϓϩμΫτ Λհ͠·͢
ʰϝϧΧϦʱΛࢧ͑ΔGo • nginx-build • cachectl • Slackboard • ൚༻ϓογϡ௨αʔό(·ͩඇެ։)
nginx-build • nginxͷϏϧυπʔϧ • ҎԼͷ࡞ۀΛࣗಈԽ • nginxͷιʔείʔυͷμϯϩʔυ • ґଘϥΠϒϥϦ3rd PartyϞδϡʔϧͷΈࠐΈ
• nginxͷRPM࡞࣌ʹར༻͍ͯ͠Δ • https://github.com/cubicdaiya/nginx-build
nginx-buildͰnginxΛϏϧυ
cachectl • OSͷϖʔδΩϟογϡ੍ޚπʔϧ • ಛఆͷϑΝΠϧͷϖʔδΩϟογϡͷར༻ঢ়گͷ֬ೝ ϖʔδΩϟογϡͷআ͕Ͱ͖Δ • ϖʔδΩϟογϡΛআ͢ΔσʔϞϯ(cachectld)͕ଐ • APIαʔόͷڊେͳϩάϑΝΠϧΛϖʔδΩϟογϡ͔
Βఆظతʹ͍ग़͢ͷʹར༻͍ͯ͠Δ(εϫοϓରࡦ) • https://github.com/cubicdaiya/cachectl
cachectldͷઃఆͱىಈ
APIαʔόʹcachectldΛ ಋೖͨ݁͠Ռɺ "1*αʔό͕εϫοϓ͠ͳ͘ͳͬͨ DBDIFDUMEΛىಈͨ͠λΠϛϯά
Slackboard • SlackϓϩΩγαʔό • SlackͷHook URLνϟϯωϧͷใΛҰݩཧ&λά͚ • Slackͷઃఆ͕֤αʔόʹࢄ͢ΔͷΛ͙ • ྡͷ੮ͷਓᐌ͘ʮ͋͋ɺikachanΈ͍ͨͳͭͶʯ
• ikachanΒͳ͔ͬͨ… • https://github.com/cubicdaiya/slackboard
4MBDLͷઃఆTMBDLCPBSEαʔόͰҰݩཧ
खൈ͖γϯϓϧͳWeb UI ҰମԿετϥοϓͳΜͩɾɾɾ
൚༻ϓογϡ௨αʔό • HTTPϕʔεͷγϯϓϧͳAPIͱेͳϞχλϦϯάػೳ • ेͳύϑΥʔϚϯε(ઍʙສQPS) • δϟʔφϧϩάʹΑΔΫϥογϡϦΧόϦʔػೳ • ࣌ؒͰेສ݅ͷϓογϡ௨Λߦ͏͜ͱ͕Ͱ͖Δ •
ઌʑि͋ͨΓ͔Βຊ൪Քಇத • ͍͍Ͷɺίϝϯτɺߪೖͷϓογϡ௨ɺetc… • ͏ͪΐͬͱ࣮ੵΜͩΒOSSԽ͍ͨ͠
൚༻ϓογϡ௨γεςϜͷΞʔΩςΫνϟ PS CBUDIαʔό
HTTP API "1* ղઆ 1045QVTI ϓογϡ௨ϦΫΤετड (&5TUBUHP (PϥϯλΠϜͷ׆ಈঢ়گΛऔಘ (&5TUBUBQQ ෦Ωϡʔ
νϟωϧ ͷ༻ྔ ϓογϡͷޭࣦഊͷऔಘ (&5DPOpHBQQ αʔόઃఆ 50.- Λऔಘ
POST /pushͷϦΫΤετϘσΟ
GET /stat/go $ curl -s http://127.0.0.1:1056/stat/go { "time": 1423270089195474419, "go_version":
"go1.4", "go_os": "linux", "go_arch": "amd64", "cpu_num": 24, "goroutine_num": 55, "gomaxprocs": 24, "cgo_call_num": 124016, "memory_alloc": 10309424, "memory_total_alloc": 295474683712, "memory_sys": 25557240, "memory_lookups": 214058, "memory_mallocs": 2118264299, "memory_frees": 2118230111, ・ ・ ・
GET /stat/app $ curl -s http://127.0.0.1:1056/stat/app { "queue_max": 40960, //
内部キューのサイズ "queue_usage": 0, // 内部キューの使用量(すぐ捌けるので大体0) "ios": { "push_success": 31804, // iOSプッシュ通知の成功数 "push_error": 17 // iOSプッシュ通知の失敗数 }, "android": { "push_success": 18683, // Androidプッシュ通知の成功数 "push_error": 233 // Androidプッシュ通知の失敗数 } $
GoΛબ͢Δཧ༝ • ύϑΥʔϚϯε͕ྑͯ͘ੜ࢈ੑ͕ߴ͍ • ͲͷϓϩμΫτ࣌ؒͰ࠷ॳͷόʔδϣϯΛॻ͍ͨ • ࣮ߦϑΝΠϧ͕୯ҰόΠφϦͳͷͰཧָ͕ • ฒྻॲཧ͕؆୯ʹॻ͚Δ •
PHPͷऑ͍෦Λ͏·͘ิͰ͖Δ
·ͱΊ • ϝϧΧϦμϯϩʔυ1000ສΛӽ͑ΔਓؾϑϦϚΞϓϦ • ͘͞ΒAWSͷΠϯϑϥΫϥυαʔϏεͷ্ ʹߏங͞Ε͍ͯΔ • ֤αϒγεςϜׂΓͱΦʔιυοΫε • ݴޠPHP͚ͩͰͳ͘GoNodeɺෳͷݴޠΛঢ়
گʹԠ͍͚ͯͯ͡·͢
ਓࡐืूதʂ