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
Trusterd: HTTP/2 Web Server scripting with mruby
Search
MATSUMOTO Ryosuke
PRO
January 28, 2015
Technology
3
820
Trusterd: HTTP/2 Web Server scripting with mruby
mrubyで振る舞いを記述可能な高速に動作するHTTP/2 Webサーバ
MATSUMOTO Ryosuke
PRO
January 28, 2015
Tweet
Share
More Decks by MATSUMOTO Ryosuke
See All by MATSUMOTO Ryosuke
リモートワークにおけるパッシブ疲労
matsumoto_r
PRO
6
4.9k
エンジニアのキャリアパスはどう描く? まつもとりーさんと考える後悔しないキャリア選択
matsumoto_r
PRO
10
2k
まつもとりーのこれまでとCOGNANOのこれから
matsumoto_r
PRO
0
280
2022年の研究所の評価制度振り返りと今後
matsumoto_r
PRO
0
670
VUCAワールドから紐解く組織や評価制度の変遷と再設計
matsumoto_r
PRO
9
26k
コンテナの研究開発から学ぶLinuxの要素技術
matsumoto_r
PRO
2
1.5k
開発者体験をさらに向上させる 事業と研究との連携
matsumoto_r
PRO
2
2.2k
企業研究の価値と事業との連携
matsumoto_r
PRO
0
1.3k
誇りを持って研究していくために
matsumoto_r
PRO
1
1.5k
Other Decks in Technology
See All in Technology
トラブルシュートを楽しもう (wakamonog meeting 15)
recuraki
4
1k
20250122_個人向けCopilotどうなん
ponponmikankan
0
170
なぜfreeeはハブ・アンド・スポーク型の データメッシュアーキテクチャにチャレンジするのか?
shinichiro_joya
3
860
2週に1度のビッグバンリリースをデイリーリリース化するまでの苦悩 ~急成長するスタートアップのリアルな裏側~
kworkdev
PRO
7
5k
大学教員が押さえておくべき生成 AI の基礎と活用例〜より効率的な教育のために〜
soh9834
1
150
「隙間家具OSS」に至る道/Fujiwara Tech Conference 2025
fujiwara3
7
7.2k
実践している探索的テストの進め方 #jasstnano
makky_tyuyan
1
110
企業テックブログにおける執筆ネタの考え方・見つけ方・広げ方 / How to Think of, Find, and Expand Writing Topics for Corporate Tech Blogs
honyanya
0
500
いま現場PMのあなたが、 経営と向き合うPMになるために 必要なこと、腹をくくること
hiro93n
9
8.8k
reinvent2024を起点に振り返るサーバーレスアップデート
mihonda
1
160
横断SREの立ち上げと、AWSセキュリティへの取り組みの軌跡
rvirus0817
3
3.1k
Plants vs thieves: Automated Tests in the World of Web Security
leichteckig
0
140
Featured
See All Featured
Done Done
chrislema
182
16k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
98
18k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
590
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Optimising Largest Contentful Paint
csswizardry
33
3k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Testing 201, or: Great Expectations
jmmastey
41
7.2k
A Modern Web Designer's Workflow
chriscoyier
693
190k
A Tale of Four Properties
chriscoyier
157
23k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
3k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
3
360
Transcript
5SVTUFSE NSVCZͰৼΔ͍Λهड़Մೳͳ ߴʹಈ࡞͢Δ)5518FCαʔό দຊ྄հ
࣍ • 5SVTUFSEͷಛ • 3VCZΛద༻ͨ͠Օॴ • 3VCZΛ׆༻ͨ͜͠ͱʹΑΔޮՌ • ࣾձʹٴ΅͢Өڹ 第7回フクオカRuby大賞
本審査 2
5SVTUFSEͷಛ 第7回フクオカRuby大賞 本審査 3
5SVTUFSE • )5518FCαʔό • 3VCZͰઃఆ͕ॻ͚Δ • 3VCZͰػೳ֦ுͰ͖Δ • αʔόػೳΛΞϓϦʹࠐΈՄೳ •
ඇৗʹߴʹಈ࡞͢Δ 第7回フクオカRuby大賞 本審査 4
ߴʢ݄ݱࡏʣ HTTP/2 Server \ size of content 6 bytes 4,096
bytes ngh)pd(single thread) 148,841 73,812 ngh)pd(mul= thread) 347,152 104,244 =ny-‐ngh)pd(single thread) 190,223 82,047 trusterd(single thread) 204,769 92,068 trusterd(mul= process) 509,059 134,542 H2O(single thread) 216,453 112,356 H2O(mul= thread) 379,623 146,343 第7回フクオカRuby大賞 本審査 5 HTTP/1 Server \ size of content 6 bytes 4,096 bytes nginx(single thread) 21,708 22,366 nginx(mul= process) 67,349 56,203 ࢀߟɿಉڥͷ)551ͷ݁Ռɹ ※ https://github.com/matsumoto-r/trusterd#benchmarks
։ൃͷܦҢ • աڈʹNPE@NSVCZOHY@NSVCZΛ։ൃ – ߴɾলϝϞϦʹ8FCαʔόΛػೳ֦ு – 3VCZͰ͋ΔఔৼΔ͍Λهड़Մೳ – ಈతͳઃఆɾ֦ுΛ3VCZͰهड़Մೳ •
NPE@NSVCZOHY@NSVCZͷଥڠ – ੑೳ͕"QBDIFOHJOYʹґଘ – ઃఆͷ֦ு࣮͕Ϟδϡʔϧ༷ʹґଘ – ݁ہຊମͷઃఆ͔ΒಀΕΒΕͳ͍ɾࠞࡏ 第7回フクオカRuby大賞 本審査 6
͔Β࡞Ζ͏ • ޙΛݟӽͯ͠ • Ͳ͏ͤͳΒ)5518FCαʔό • શͯͷઃఆ֦ுΛ3VCZͰॻ͚Δ • NSVCZʹ࠷దԽ͞Εͨ8FCαʔό •
ػೳͷͱଞΞϓϦͷࠐΈ 第7回フクオカRuby大賞 本審査 7
3VCZΛద༻ͨ͠Օॴ 第7回フクオカRuby大賞 本審査 8
5SVTUFSE • )5518FCαʔό • 3VCZͰઃఆ͕ॻ͚Δ • 3VCZͰػೳ֦ுͰ͖Δ • αʔόػೳΛΞϓϦʹࠐΈՄೳ •
ඇৗʹߴʹಈ࡞͢Δ 第7回フクオカRuby大賞 本審査 9
3VCZͰઃఆ͕ॻ͚Δ 第7回フクオカRuby大賞 本審査 10 root_dir = "/usr/local/trusterd" s = HTTP2::Server.new({
:port => 8080, :document_root => “#{root_dir}/htdocs”, :server_name => “Trusterd/0.0.1”, :tls => false, :worker => “auto”, }) s.run
3VCZͰػೳ֦ுͰ͖Δ 第7回フクオカRuby大賞 本審査 11 s.set_map_to_strage_cb { if s.r.uri == ”/”
s.r.filename = "#{root_dir}/index.html” end if s.r.uri =~ /^.*\.rb$/ s.enable_mruby fi } s.set_content_cb { s.r.rputs "hello trusterd world from cb” }
3VCZͰػೳ֦ுͰ͖Δ 第7回フクオカRuby大賞 本審査 12 f = File.open "#{root_dir}/logs/access.log", "a" s.set_logging_cb
{ f.write "client_ip:'#{s.conn.client_ip}' date:'#{s.r.date}' status:#{s.r.status} content_length:#{s.r.content_length} uri:'#{s.r.uri}' filename:'#{s.r.filename}' user_agent:'#{s.r.user_agent}'\n" } s.set_access_check_cb { s.r.set_status 403 if deny }
3VCZͰػೳ֦ுͰ͖Δ 第7回フクオカRuby大賞 本審査 13 s.set_map_to_strage_cb { # Experiment: reverse proxy
# client <=HTTP/2=> trusterd <=HTTP/1=> Upstream if s.r.uri == /^/upstream(¥/.*)/ s.upstream_uri = $1 s.upstream = “http://127.0.0.1:8081” end }
αʔόػೳΛΞϓϦʹࠐΈ • NSVCZIUUQͱͯ͠Մೳ • NSVCZܦ༝ͰࠐΈՄೳ • ϛυϧΣΞΞϓϦͰ)551௨৴ • NSVCZͷࡌΔσόΠεͰ)551௨৴ 第7回フクオカRuby大賞
本審査 14
3VCZΛ׆༻ͨ͜͠ͱʹΑΔޮՌ 第7回フクオカRuby大賞 本審査 15
ߴ͍ϨϕϧͰੜ࢈ੑͱੑೳͷཱ྆ • ैདྷͷಠࣗઃఆॻ͖ʹ͔ͬͨ͘ – ੩తͳઃఆʹͳΓ͕ͪ – ಠࣗ%4-͍ʹ͍͘ – ࠓޙͷ8FCαʔϏεͷߴԽʹ͍͚ͳ͍ • NSVCZͰ౷Ұతʹಈతͳઃఆهड़ – )551ΛΞϓϦσόΠεʹࠐΊΔ – ຊମ$ݴޠͰ࣮͓ͯ͠Γඇৗʹߴ
– ઃఆͷ3VCZԽ͕࣮͍͢͠ɾअຐ͠ͳ͍ 第7回フクオカRuby大賞 本審査 16
ࣾձʹٴ΅͢Өڹ 第7回フクオカRuby大賞 本審査 17
NSVCZͰઃఆΛॻ͘ΞϓϦͷීٴ • ߴ͔ͭ3VCZʹΑΔಈతͳઃఆ – 8FCܥΤϯδχΞ͕ѻ͍͍͢ – ։ൃऀӡ༻ऀͲ͜Ͱ3VCZΛֶΔ – 3VCZNSVCZͷීٴʹߩݙ • )551ϓϩτίϧΛ༰қʹར༻Մೳ – $ΞϓϦσόΠεʹػೳࠐΈ – ϓϩτίϧ)551ͰઃఆNSVCZ
– )551ͷීٴʹߩݙ 第7回フクオカRuby大賞 本審査 18