$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
大規模Mastodonインスタンスを運用するコツ / Inside Pawoo Mastodo...
Search
Harukasan
PRO
April 27, 2017
Technology
0
3.5k
大規模Mastodonインスタンスを運用するコツ / Inside Pawoo Mastodon infrastructure
実際運用してみてわかった、大規模Mastodonインスタンスを運用するコツ
2017-04-25 at pixiv night!
Harukasan
PRO
April 27, 2017
Tweet
Share
More Decks by Harukasan
See All by Harukasan
Successor to PicoRabbit: Ruby Programming Envorinment / RubyKaigi 2025 follow up
harukasan
PRO
1
210
Write your own mrbgem, Create your own device
harukasan
PRO
1
190
PicoRabbit: a Tiny Presentation Device Powered by Ruby
harukasan
PRO
2
590
pixivを支える技術 / 技育CAMPアカデミア
harukasan
PRO
3
540
20240401 新卒研修 - ピクシブにおける技術領域
harukasan
PRO
1
880
ピクシブのコンテンツ配信基盤技術 / pixiv TECH SALON
harukasan
PRO
5
5.8k
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
AWS CLIの新しい認証情報設定方法aws loginコマンドの実態
wkm2
6
750
「図面」から「法則」へ 〜メタ視点で読み解く現代のソフトウェアアーキテクチャ〜
scova0731
0
330
Sansanが実践する Platform EngineeringとSREの協創
sansantech
PRO
2
920
Reinforcement Fine-tuning 基礎〜実践まで
ch6noota
0
190
WordPress は終わったのか ~今のWordPress の制作手法ってなにがあんねん?~ / Is WordPress Over? How We Build with WordPress Today
tbshiki
1
820
re:Invent2025 コンテナ系アップデート振り返り(+CloudWatchログのアップデート紹介)
masukawa
0
390
Lessons from Migrating to OpenSearch: Shard Design, Log Ingestion, and UI Decisions
sansantech
PRO
1
150
MariaDB Connector/C のcaching_sha2_passwordプラグインの仕様について
boro1234
0
370
SQLだけでマイグレーションしたい!
makki_d
0
490
文字列の並び順 / Unicode Collation
tmtms
3
610
評価駆動開発で不確実性を制御する - MLflow 3が支えるエージェント開発
databricksjapan
1
210
CARTAのAI CoE が挑む「事業を進化させる AI エンジニアリング」 / carta ai coe evolution business ai engineering
carta_engineering
0
1.9k
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
698
190k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
730
Building Applications with DynamoDB
mza
96
6.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Fireside Chat
paigeccino
41
3.7k
A designer walks into a library…
pauljervisheath
210
24k
Designing for Performance
lara
610
69k
It's Worth the Effort
3n
187
29k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
390
KATA
mclloyd
PRO
33
15k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Transcript
@harukasan / Shunsuke Michii ࣮ࡍӡ༻ͯ͠ΈͯΘ͔ͬͨɺେن.BTUPEPOΠϯελϯεΛӡ༻͢Δίπ
@Harukasan Shunsuke MICHII Lead engineer of pixiv Inc., Product manager
of ImageFlux, Infrastructure engineer, Kibana, Gopher
None
࣮ࡍӡ༻ͯ͠ΈͯΘ͔ͬͨɺେن.BTUPEPOΠϯελϯεΛӡ༻͢Δίπ
None
Mastodon
͍͖ͭͬ͞v1.2.2Λͩͨ͠
github.com/pixiv/mastodon:pawoo
Ruby on Rails node.js PostgreSQL Redis SendGrid Sidekiq ΫϥΠΞϯτ Websocket
(streaming) HTTP SMTP ϞμϯͳRuby on RailsΞϓϦέʔγϣϯ nginx
Ruby on Rails node.js PostgreSQL Redis SendGrid Sidekiq ΫϥΠΞϯτ Websocket
(streaming) HTTP SMTP ϞμϯͳRuby on RailsΞϓϦέʔγϣϯ nginx RESTͬΆ͍API
Ruby on Rails node.js PostgreSQL Redis SendGrid Sidekiq ΫϥΠΞϯτ Websocket
(streaming) HTTP SMTP ϞμϯͳRuby on RailsΞϓϦέʔγϣϯ nginx RESTͬΆ͍API ετϦʔϛϯάAPI
10࣌ؒͰϦϦʔε
Pawooͷߏ
None
AWSͰγϡοͱΔ • ͕࣌ؒͳ͍͚Ͳ࠷༏ઌ҆ఆੑ • RDS/ElasticaceͷϚϧνAZߏ • ϝσΟΞS3ʹอଘ • EC2ฒͯALBͰϩʔυόϥϯε •
CloudFrontͰྲྀ͢ʢ͏Ίͨʣ • ظؒݶఆαΠτΛཱͯΔ࣌ͷϊϋΛྲྀ༻
ΠϯελϯεΛฒΔ • ͯ͢ͷΠϯελϯεಉҰߏ • γϡοͱͭͬͯ͘AMIͰ૿͢ • ԣʹฒͯεέʔϧΞτ • ͦͷ͏ͪΦʔτεέʔϦϯά͍ͨ͠
Docker͔Β͕͢ • શ෦systemdαʔϏεʹஔ͖͑ͨ • ͦͷ··͏ͷͪΐͬͱ͍͜͠ͱ͕ଟ͍ • σϓϩΠͷ͜ͱΒͳΜΒߟ͍͑ͯΔͱͪΐͬͱ༨༟͕ͳ͍ • DockerͰ͙͢ΔͳΒϗοτσϓϩΠͱ͔ϦιʔεͷΈΛ ͋Β͔͡Ί༻ҙ͓ͯ͘͠ඞཁ͕͋Γͦ͏ʢͦͷ͏ͪΓ͍ͨʣ
ͦͷͷ͏ͪʹϦϦʔε͞Ε͕ͨ ͙͢ʹΤϥʔΛฦ͠͡ΊΔ ʢ͜͜ΒลͰνϟοτΛݟ࢝ΊΔʣ
nginx • ϦΫΤετόοϑΝϦϯάͷͨΊʹPumaͷલʹnginxΛ͓͘ • Τϥʔ͕ग़͍ͯͨͷͰͳ͓ͨ͠ • worker_rlimit_nofile: limitΛ૿͓ͯ͘͠ • worker_connections:
ίωΫγϣϯͨ͘͞ΜΔͷͰ • ϩάϩʔςʔτͷઃఆ͕ೖͬͯͳ͔ͬͨͷͰೖΕͨ • όϥϯγϯάEC2ͷnginx͡Όͳͯ͘ALBͰΔ
ৄ͘͜͠ͷຊʹ
PostgreSQL • PostgreSQLίωΫγϣϯ͝ͱʹfork͢Δ ʢฐࣾͯ͢MySQLͩͬͨͷͰݟͳ͠ʣ • ίωΫγϣϯϓʔϧΛ͏·͍۩߹ͷʹઃఆ͢Δ • ΠϯελϯεΛεέʔϧΞοϓͯ͠ରԠ • ίʔυʹ࠷దԽΛೖΕͯΠϯελϯεαΠζখͨ͘͞͠Γͨ͠
• Մ༻ੑͱόοΫΞοϓRDSʹ͓ͤ • PgBouncerͬͨํ͕͍͍͔ʁͱࢥ͍ͳ͕Βාͯͬͯ͘ͳ͍
͜͜ͰεέʔϧΞοϓ
None
ݟٻΉ
Ruby on Rails node.js PostgreSQL Redis SendGrid Sidekiq ΫϥΠΞϯτ Websocket
(streaming) HTTP SMTP ϞμϯͳRuby on RailsΞϓϦέʔγϣϯ nginx
Ruby on Rails node.js PostgreSQL Redis SendGrid Sidekiq ΫϥΠΞϯτ Websocket
(streaming) HTTP SMTP nginx ϢʔβʔΠϯλʔϑΣʔε ϞμϯͳRuby on RailsΞϓϦέʔγϣϯ
Ruby on Rails node.js PostgreSQL Redis SendGrid Sidekiq ΫϥΠΞϯτ Websocket
(streaming) HTTP SMTP nginx ϞμϯͳRuby on RailsΞϓϦέʔγϣϯ ϝΠϯϩδοΫ
Sidekiq • MastodonͷϝοηʔδύογϯάSidekiqͰߦΘΕΔ • τΡʔτͷ৴ • ετϦʔϛϯά • ϦϞʔτΠϯελϯεͷ৴ •
1τΡʔτ͝ͱʹϑΥϩϫʔͷ͚ͩenqueue͞ΕΔ • ϑΥϩϫʔ͕ଟ͍Ϣʔβʔͩͱ͍
ීஈͷΩϡʔͷ༷ࢠʢͪΐͬͱલʣ
ͨ·ʹ͜͏ͳΔ
ͨ·ʹ͜͏ͳΔ
Ωϡʔͷछྨ default pull push mail • ΄͔ͷશ෦ͷδϣϒ • ϦϞʔτΠϯελϯεͷ৴ •
ϝʔϧͷૹ৴
Sidekiq٧·Δ • σϑΥϧτͩͱͯ͢ͷΩϡʔΛ̍ͭͷSidekiqϓϩηεͰॲཧ͢Δ • ϦϞʔτΠϯελϯε͕٧·Δͱpull/pushͷΩϡʔ͕٧·Δ • pull/pushͷ͍ͤͰλΠϜϥΠϯ͕Ԇ͢Δʂ • ͜ͷ··ͩͱαʔϏεͱͯ͠ऴΘͬͯ͠·͏ͷͰɺϓϩηεΛ͚Δ •
Sidekiq1ϓϩηεͰ1ίΞʢ100%ʣ·Ͱ͔ͬͯ͘͠Εͳ͍ • ϓϩηεΛͨ͘͞ΜཱͯͯΧόʔ
ίϚϯυϥΠϯҾͰࢦఆ͢Δ͚ͩ [Service] Type=simple User=mastodon WorkingDirectory=/home/mastodon/live Environment="RAILS_ENV=production" Environment="DB_POOL=40" ExecStart=/usr/local/rbenv/shims/bundle exec sidekiq
-c 40 -q default TimeoutSec=15 Restart=always
SidekiqϓϩηεΛ͚Δ sidekiq-default-1.service sidekiq-default-2.service sidekiq-default-3.service sidekiq-pullpush.service sidekiq-mail.service 1Πϯελϯεʹ͜Εཱ͚ͩͯͯΔɿ σϑΥϧτ͚ͩͰ1,000εϨουҎ্ 40 40
40 10 5 εϨου
Sidekiqͷϓϩηεը໘͕ ͍ͩͿݟͮΒ͍
Sidekiq٧·Δͷ՝ • ϦϞʔτΠϯελϯε͕٧·Δͱ૬มΘΒͣpull/push͕٧·Δ • ϓϩηεΛཱͯͯΧόʔͯ͠Δ͚Ͳɺ΄͔ͷΠϯελϯε͔Β͢Δͱ ٸʹϦΫΤετ͕૿͑ͯͭΒͦ͏…… • ͍Πϯελϯεͱ͔େنΠϯελϯεͷॲཧΛͲ͏ʹ͔͍ͨ͠ • ͦͦτΡʔτ͋ͨΓͷδϣϒ͕N+1ʹͳͬͯΔͷ͕͍
ղܾͯ͠ͳ͍͚Ͳ·ͱΊ • AWSͬͯγϡοͱཱͯͯӡ༻։࢝ • ϚετυϯͷϝΠϯSidekiqδϣϒ • SidekiqͷΩϡʔΛ͏·͚͘͞ΔͱΑ͍ • SidekiqϓϩηεΛεϙοτΠϯελϯεͰ૿͢Α͏ʹ͍ͨ͠ •
Ͳ͔ͬͪͱ͍͏ͱ࠷దԽͨ͠ํ͕Αͦ͞͏