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
Ugoku Backend
Search
Harukasan
PRO
August 02, 2014
Technology
1
1.9k
Ugoku Backend
Ugoku "It's working" Backend
pixiv Ugoira Tech Talks / 2014-08-01
Harukasan
PRO
August 02, 2014
Tweet
Share
More Decks by Harukasan
See All by Harukasan
PicoRabbit: a Tiny Presentation Device Powered by Ruby
harukasan
PRO
2
380
pixivを支える技術 / 技育CAMPアカデミア
harukasan
PRO
3
500
20240401 新卒研修 - ピクシブにおける技術領域
harukasan
PRO
1
800
ピクシブのコンテンツ配信基盤技術 / pixiv TECH SALON
harukasan
PRO
5
5.6k
Goにおける画像ファイル処理 / golang.tokyo #19
harukasan
PRO
7
6.7k
WebRTC動画をトランスコードする / Transcoding video streams from WebRTC
harukasan
PRO
5
1.6k
ImageFluxを支えるリモート開発 / 20171202
harukasan
PRO
2
1.8k
YAPC::Fukuoka 前夜祭LT / Yet Another Pawoo Commit logs
harukasan
PRO
0
3k
YAPC::Fukuoka lunch session
harukasan
PRO
1
3.1k
Other Decks in Technology
See All in Technology
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
26k
25分で解説する「最小権限の原則」を実現するための AWS「ポリシー」大全 / 20250625-aws-summit-aws-policy
opelab
9
1.2k
強化されたAmazon Location Serviceによる新機能と開発者体験
dayjournal
3
230
2025-06-26_Lightning_Talk_for_Lightning_Talks
_hashimo2
2
100
PHPでWebブラウザのレンダリングエンジンを実装する
dip_tech
PRO
0
210
【TiDB GAME DAY 2025】Shadowverse: Worlds Beyond にみる TiDB 活用術
cygames
0
1.1k
Liquid Glass革新とSwiftUI/UIKit進化
fumiyasac0921
0
250
rubygem開発で鍛える設計力
joker1007
2
220
AWS Organizations 新機能!マルチパーティ承認の紹介
yhana
1
170
米国国防総省のDevSecOpsライフサイクルをAWSのセキュリティサービスとOSSで実現
syoshie
2
1.2k
Amazon S3標準/ S3 Tables/S3 Express One Zoneを使ったログ分析
shigeruoda
4
570
登壇ネタの見つけ方 / How to find talk topics
pinkumohikan
5
540
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Gamification - CAS2011
davidbonilla
81
5.3k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Stop Working from a Prison Cell
hatefulcrawdad
270
20k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
Practical Orchestrator
shlominoach
188
11k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
A designer walks into a library…
pauljervisheath
207
24k
BBQ
matthewcrist
89
9.7k
Done Done
chrislema
184
16k
Transcript
Ugoku backend Ugoira Tech Talks / 2014-08-01 harukasan
• Infrastructure Team in pixiv since 2012 • nginx /
Apache Traffic Server • Fluentd / Kibana / BigQuery • Kosenconf Harukasan / Shunsuke MICHII ! ൃച @harukasan shunsuke.michii
Ugoku Backend ͏͝ΠϥͷཪଆͰ
Works in Ugoira Project • ͏͍͝Βͷ͚ͩͷͨΊʹؾΛݣͬͨ෦ ͦΕ΄Ͳͳ͍ • ಛච͖͢ࣄฑ͋·Γͳ͍…… •
ͲͪΒ͔ͱ͍͏ͱৗʹ͕Μ͍ͬͯΔ͔Μ͡
Ugoku Backend
None
Statistics 3,700,000,000 PV/month 11,000,000 Users 45,000,000 Illustrations |
Statistics 7K peak req/s (dynamic) 30K peak req/s (image) 12Gbps
peak Traffic (image) 3 x 10Gbps backbone 40TB image files 400 servers
Ugoku Backend ͏͝ΠϥͷཪଆͰ
Ugoira Data Flow PHP nginx nginx Apache HTTPd nginx pixiv
Contents Delivery Clusters uploading small light load balancing Store Images generating thumbnails Ý Creator Viewers PHP Redis queing
Ugoira Data Flow PHP nginx nginx Apache HTTPd nginx pixiv
Contents Delivery Clusters uploading small light load balancing Store Images generating thumbnails Ý Creator Viewers PHP Redis queing
Upload System
Upload System • ࠷େ150ຕͷը૾ͷมॲཧΛߦ͏ඞཁ͕͋Δ • ϢʔβʔΛग़དྷΔ͚ͩͨͤͳ͍Α͏ʹ͍ͨ͠
Asynchronous Uploading Upload View Information form View Complete View 1.
ը૾ϑΝΠϧΛ Ξοϓϩʔυ 2. ใೖྗ ◦ ྃΛͭ Redis Uplaod Worker upload αϜωΠϧϚελը૾ੜ Ý upload Ý GIFը૾ׂ active standby 3. Ξοϓϩʔυྃ
Upload System • Ϣʔβʔ͕ใΛೖྗ͍ͯ͠Δؒʹ ը૾ϑΝΠϧΛ४උ • GIFը૾Λׂ Github: pixiv/gifsplit •
͏͝ΠϥͰ3छྨͷը૾Λ༻ҙ • WebDAVͰΞοϓϩʔυ͢Δ PHP nginx Redis php-resque nginx ϩʔυόϥϯα ΞϓϦέʔγϣϯ Ωϡʔ ϫʔΧʔ DAVετϨʔδ
Ugoira Data Flow PHP nginx nginx Apache HTTPd nginx pixiv
Contents Delivery Clusters uploading small light load balancing Store Images generating thumbnails Ý Creator Viewers PHP Redis queing
Dynamic Thumbnail Generation
Dynamic Thumb. Generation • Ξοϓϩʔυ࣌ʹͨ͘͞ΜͷαϜωΠϧΛ ͭ͘Δͷେม • αΠζσβΠϯมߋͱ͔Ͱม͍͑ͨ • ༧ΊϚελը૾Λੜͯͦ͠Ε͔Βੜ͢Δ
ΦϦδφϧը૾ αϜωΠϧϚελը૾ αϜωΠϧը૾
Thumbnail Master • ΞεϖΫτݻఆͱਖ਼ํܗΫϩοϓͷ2छྨ • JPEGը૾ʹม(PNG→JPEGͷมॏ͍) 1200px 1200px 1200px 1200px
1200px 1200px ඪ४αΠζ(1200x1200ʹऩ·ΔαΠζ) ਖ਼ํܗΫϩοϓ(ԣͱॎͰΫϩοϓํ๏͕ҟͳΔ) ԣதԝ߹Θͤ ॎ্߹Θͤ
• αϜωΠϧੜmod_small_lightΛ༻ https://github.com/yamac/smalllight ! • ετϨʔδ͔ΒԿϚελը૾Λ औಘ͠ͳ͍Α͏ʹΩϟογϡΛ͞Ή Dynamic Thumb. Generation
Small Light ετϨʔδ Ωϟογϡ Ωϡʔ nginx Ý nginx ৼΓ͚
Ugoira Data Flow PHP nginx nginx Apache HTTPd nginx pixiv
Contents Delivery Cluster uploading small light load balancing Store Images generating thumbnails Ý Creator Viewers PHP Redis queing
Contents Delivery Cluster
• εέʔϥϒϧ • Ԇ (< 100ms) • ߴ͍ώοτ (> 95%)
• ઃఆ͕มߋ͍͢͠ Storage pixiv Contents Delivery Clusters Contents Delivery Cluster
Inside of pixiv CDC 10Gbps 10Gbps nginx nginx nginx ATS
ATS ATS nginx nginx nginx Hashing 64GB Memory Caching (60%) 3x 256GB SSD Caching (90%) 1Gbps
Ugoira Compatibility • ZIPϑΝΠϧͷ৴ • CORS Non-simpleϦΫΤετͷԠ
CORS • ผυϝΠϯͷϦιʔεͷϦΫΤετΛڐՄ͢Δ • simple requests / non-simple requests ͷ2͕ͭ͋Δ
• Ϟμϯϒϥβ͍͍ͩͨରԠ
CORS Non-Simple Request someone.example.com www.pixiv.net/api var req = new XMLHTTPRequest();
req.open(“GET”, “//www.pixiv.net/api”); req.setRequestHeader(“Range”, “0-10000”); req.send(); GET /api HTTP/1.1 Origin:someone.example.com Range: 0-10000 ϒϥβͰϒϩοΫ͞ΕΔ
someone.example.com www.pixiv.net/api OPTIONS /api HTTP/1.1 Origin:someone.example.com Access-Control-Request-Headers: range Access-Control-Request-Method: GET
Preflight request HTTP/1.1 200 OK Access-Control-Allow-Headers: Range Access-Control-Allow-Methods: GET, POST, OPTIONS Access-Control-Allow-Origin:* Access-Control-Expose-Headers: Content-Length Access-Control-Max-Age: 2592000 ڐՄ͢ΔϦΫΤετϔομ ڐՄ͢ΔϦΫΤετϝιου ڐՄ͢ΔϦΫΤετݩΦϦδϯ Script͔Βར༻Ͱ͖ΔϨεϙϯεϔομ ΩϟογϡՄೳ࣌ؒ ڐՄΛٻΊΔϦΫΤετϔομ ڐՄΛٻΊΔϦΫΤετϝιου GET /api HTTP/1.1 Origin:someone.example.com Range: 0-10000
Ugoira Data Flow PHP nginx nginx Apache HTTPd nginx pixiv
Contents Delivery Cluster uploading small light load balancing Store Images generating thumbnails Ý Creator Viewers PHP Redis queing
Complete!
Conclusion • ͏͝ΠϥͷόοΫΤϯυී௨ʹ͏͍͍ͯ͝Δ • ៉ྷͳγεςϜྑ͍͚Ͳ͏͘͝ͷલఏ • ͏্͘͝ʹ֦ு͍͢͠ͷॏཁ