Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Trusterd: HTTP/2 Web Server scripting with mruby

Trusterd: HTTP/2 Web Server scripting with mruby

mrubyで振る舞いを記述可能な高速に動作するHTTP/2 Webサーバ

MATSUMOTO Ryosuke
PRO

January 28, 2015
Tweet

More Decks by MATSUMOTO Ryosuke

Other Decks in Technology

Transcript

  1. 5SVTUFSE

    NSVCZͰৼΔ෣͍Λهड़Մೳͳ
    ߴ଎ʹಈ࡞͢Δ)5518FCαʔό

    দຊ྄հ

    View Slide

  2. ໨࣍
    •  5SVTUFSEͷಛ௃
    •  3VCZΛద༻ͨ͠Օॴ
    •  3VCZΛ׆༻ͨ͜͠ͱʹΑΔޮՌ
    •  ࣾձʹٴ΅͢Өڹ
    第7回フクオカRuby大賞 本審査 2

    View Slide

  3. 5SVTUFSEͷಛ௃
    第7回フクオカRuby大賞 本審査 3

    View Slide

  4. 5SVTUFSE
    •  )5518FCαʔό
    •  3VCZͰઃఆ͕ॻ͚Δ
    •  3VCZͰػೳ֦ுͰ͖Δ
    •  αʔόػೳ౳ΛΞϓϦʹ૊ࠐΈՄೳ
    •  ඇৗʹߴ଎ʹಈ࡞͢Δ

    第7回フクオカRuby大賞 本審査 4

    View Slide

  5. ߴ଎ʢ೥݄ݱࡏʣ
    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

    View Slide

  6. ։ൃͷܦҢ
    •  աڈʹNPE@NSVCZOHY@NSVCZΛ։ൃ
    –  ߴ଎ɾলϝϞϦʹ8FCαʔόΛػೳ֦ு
    –  3VCZͰ͋Δఔ౓ৼΔ෣͍Λهड़Մೳ
    –  ಈతͳઃఆɾ֦ுΛ3VCZͰهड़Մೳ
    •  NPE@NSVCZOHY@NSVCZͷଥڠ఺
    –  ੑೳ͕"QBDIF΍OHJOYʹґଘ
    –  ઃఆͷ֦ு΍࣮૷͕Ϟδϡʔϧ࢓༷ʹґଘ
    –  ݁ہຊମͷઃఆ͔ΒಀΕΒΕͳ͍ɾࠞࡏ
    第7回フクオカRuby大賞 本審査 6

    View Slide

  7. ͔Β࡞Ζ͏
    •  ਺೥ޙΛݟӽͯ͠
    •  Ͳ͏ͤͳΒ)5518FCαʔό
    •  શͯͷઃఆ΍֦ுΛ3VCZͰॻ͚Δ
    •  NSVCZʹ࠷దԽ͞Εͨ8FCαʔό
    •  ػೳͷ෼཭ͱଞΞϓϦ΁ͷ૊ࠐΈ
    第7回フクオカRuby大賞 本審査 7

    View Slide

  8. 3VCZΛద༻ͨ͠Օॴ
    第7回フクオカRuby大賞 本審査 8

    View Slide

  9. 5SVTUFSE
    •  )5518FCαʔό
    •  3VCZͰઃఆ͕ॻ͚Δ
    •  3VCZͰػೳ֦ுͰ͖Δ
    •  αʔόػೳ౳ΛΞϓϦʹ૊ࠐΈՄೳ
    •  ඇৗʹߴ଎ʹಈ࡞͢Δ

    第7回フクオカRuby大賞 本審査 9

    View Slide

  10. 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

    View Slide

  11. 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”
    }

    View Slide

  12. 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
    }

    View Slide

  13. 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
    }

    View Slide

  14. αʔόػೳ౳ΛΞϓϦʹ૊ࠐΈ
    •  NSVCZIUUQͱͯ͠෼཭Մೳ
    •  NSVCZܦ༝Ͱ૊ࠐΈՄೳ
    •  ϛυϧ΢ΣΞ΍ΞϓϦͰ)551௨৴
    •  NSVCZͷࡌΔσόΠεͰ)551௨৴
    第7回フクオカRuby大賞 本審査 14

    View Slide

  15. 3VCZΛ׆༻ͨ͜͠ͱʹΑΔޮՌ
    第7回フクオカRuby大賞 本審査 15

    View Slide

  16. ߴ͍ϨϕϧͰੜ࢈ੑͱੑೳͷཱ྆
    •  ैདྷͷಠࣗઃఆ͸ॻ͖ʹ͔ͬͨ͘
    – ੩తͳઃఆʹͳΓ͕ͪ
    – ಠࣗ%4-΋࢖͍ʹ͍͘
    – ࠓޙͷ8FCαʔϏεͷߴ౓Խʹ௥͍෇͚ͳ͍
    •  NSVCZͰ౷Ұతʹಈతͳઃఆهड़
    – )551ΛΞϓϦ΍σόΠεʹ૊ࠐΊΔ
    – ຊମ͸$ݴޠͰ࣮૷͓ͯ͠Γඇৗʹߴ଎
    – ઃఆͷ3VCZԽ͕࣮૷͠΍͍͢ɾअຐ͠ͳ͍
    第7回フクオカRuby大賞 本審査 16

    View Slide

  17. ࣾձʹٴ΅͢Өڹ
    第7回フクオカRuby大賞 本審査 17

    View Slide

  18. NSVCZͰઃఆΛॻ͘ΞϓϦͷීٴ
    •  ߴ଎͔ͭ3VCZʹΑΔಈతͳઃఆ
    – 8FCܥΤϯδχΞ͕ѻ͍΍͍͢
    – ։ൃऀ΋ӡ༻ऀ΋Ͳ͜Ͱ΋3VCZΛֶ΂Δ
    – 3VCZ΍NSVCZͷීٴʹߩݙ
    •  )551ϓϩτίϧΛ༰қʹར༻Մೳ
    – $ΞϓϦ΍σόΠεʹػೳ૊ࠐΈ
    – ϓϩτίϧ͸)551Ͱઃఆ͸NSVCZ
    – )551ͷීٴʹߩݙ
    第7回フクオカRuby大賞 本審査 18

    View Slide