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
Successor to PicoRabbit: Ruby Programming Envorinment / RubyKaigi 2025 follow up
harukasan
PRO
1
190
Write your own mrbgem, Create your own device
harukasan
PRO
1
120
PicoRabbit: a Tiny Presentation Device Powered by Ruby
harukasan
PRO
2
520
pixivを支える技術 / 技育CAMPアカデミア
harukasan
PRO
3
530
20240401 新卒研修 - ピクシブにおける技術領域
harukasan
PRO
1
850
ピクシブのコンテンツ配信基盤技術 / pixiv TECH SALON
harukasan
PRO
5
5.7k
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.9k
Other Decks in Technology
See All in Technology
初めてのDatabricks Apps開発
taka_aki
1
230
Findy Team+ QAチーム これからのチャレンジ!
findy_eventslides
0
490
OAuthからOIDCへ ― 認可の仕組みが認証に拡張されるまで
yamatai1212
0
150
エンタメとAIのための3Dパラレルワールド構築(GPU UNITE 2025 特別講演)
pfn
PRO
0
610
AI時代、“平均値”ではいられない
uhyo
4
540
物体検出モデルでシイタケの収穫時期を自動判定してみた。 #devio2025
lamaglama39
0
250
HonoとJSXを使って管理画面をサクッと型安全に作ろう
diggymo
0
150
現場データから見える、開発生産性の変化コード生成AI導入・運用のリアル〜 / Changes in Development Productivity and Operational Challenges Following the Introduction of Code Generation AI
nttcom
1
410
AWS UG Grantでグローバル20名に選出されてre:Inventに行く話と、マルチクラウドセキュリティの教科書を執筆した話 / The Story of Being Selected for the AWS UG Grant to Attending re:Invent, and Writing a Multi-Cloud Security Textbook
yuj1osm
1
110
OCIjp_Oracle AI World_Recap
shinpy
1
140
クラウドとリアルの融合により、製造業はどう変わるのか?〜クラスメソッドの製造業への取組と共に〜
hamadakoji
0
250
RDS の負荷が高い場合に AWS で取りうる具体策 N 連発/a-series-of-specific-countermeasures-available-on-aws-when-rds-is-under-high-load
emiki
7
4.4k
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Scaling GitHub
holman
463
140k
Thoughts on Productivity
jonyablonski
70
4.9k
Git: the NoSQL Database
bkeepers
PRO
431
66k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Making Projects Easy
brettharned
120
6.4k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
Gamification - CAS2011
davidbonilla
81
5.5k
Producing Creativity
orderedlist
PRO
347
40k
GraphQLとの向き合い方2022年版
quramy
49
14k
jQuery: Nuts, Bolts and Bling
dougneiner
65
7.9k
How to train your dragon (web standard)
notwaldorf
97
6.3k
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 • ͏͝ΠϥͷόοΫΤϯυී௨ʹ͏͍͍ͯ͝Δ • ៉ྷͳγεςϜྑ͍͚Ͳ͏͘͝ͷલఏ • ͏্͘͝ʹ֦ு͍͢͠ͷॏཁ