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
大規模Mastodonインスタンスを運用するコツ / Inside Pawoo Mastodo...
Search
Harukasan
PRO
April 27, 2017
Technology
0
3.4k
大規模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
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
WEBサービスを成り立たせるAWSサービス
takano0131
1
160
『バイトル』CTOが語る! AIネイティブ世代と切り拓くモノづくり組織
dip_tech
PRO
1
130
Wasmのエコシステムを使った ツール作成方法
askua
0
180
Node.js 2025: What's new and what's next
ruyadorno
0
340
AWS IoT 超入門 2025
hattori
0
340
Codexとも仲良く。CodeRabbit CLIの紹介
moongift
PRO
0
220
[Codex Meetup Japan #1] Codex-Powered Mobile Apps Development
korodroid
2
830
ニッポンの人に知ってもらいたいGISスポット
sakaik
0
150
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
310
AI時代こそ求められる設計力- AWSクラウドデザインパターン3選で信頼性と拡張性を高める-
kenichirokimura
3
320
ガバメントクラウドの概要と自治体事例(名古屋市)
techniczna
3
240
新規事業におけるGORM+SQLx併用アーキテクチャ
hacomono
PRO
0
290
Featured
See All Featured
For a Future-Friendly Web
brad_frost
180
10k
Six Lessons from altMBA
skipperchong
29
4k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
35
6.1k
Facilitating Awesome Meetings
lara
56
6.6k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Context Engineering - Making Every Token Count
addyosmani
6
260
Designing Experiences People Love
moore
142
24k
The Invisible Side of Design
smashingmag
302
51k
Build your cross-platform service in a week with App Engine
jlugia
232
18k
Making Projects Easy
brettharned
120
6.4k
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ϓϩηεΛεϙοτΠϯελϯεͰ૿͢Α͏ʹ͍ͨ͠ •
Ͳ͔ͬͪͱ͍͏ͱ࠷దԽͨ͠ํ͕Αͦ͞͏