際際滷
Submit Search
H2O x mrubyで繁はどれだけ侑せになれるのか
?
18 likes
?
13,736 views
Ichito Nagata
YAPC::Kansai presentation slide about h2o and mruby
Read less
Read more
1 of 58
Download now
Downloaded 23 times
More Related Content
H2O x mrubyで繁はどれだけ侑せになれるのか
1.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. H2O x mrubyで ?はどれだけ 侑せになれるのか March 4, 2017 @i110 Technology Development, System Management Unit DeNA Co., Ltd. YAPC::Kansai 囮嶄
2.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. ??B初 !? @i110 !? 幄塀氏芙ディ`?エヌ?エ` !?
システム云何室g_k片侭奉 ?? ?んな?が?んなことをやってる何俸 ?? 峠譲定h?め !? 恍定歪くらいにあれやこれやあってH2Oの_kにjoin !? F壓、Irgの畠てをH2Oの_kに廣いでいる彜B ?? 恷除はmrubyまわりのC嬬弖紗Ω追討謹め 2
3.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. H2Oについてさらっと 3
4.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. H2Oとは !? https://h2o.examp1e.net/ !? Google鍬Uいわく !?
おおむねこの宥りです?忖何蛍を茅いて !? みんな?挫き蝶kazuho sanが_k !? F壓の恷仟verはv2.2.0-beta1 4 H2Oは、硬い弊旗のWebサ`バ`と?^して、 CPU聞?楕が詰いユ`ザ`に儻堀な鬴陲鯡畊する、 仟しい弊旗のHTTPサ`バ`です。 児PからOされたサ`バ`は、枠コンテンツ塘佚と サ`バ`プッシュを根むHTTP / 2C嬬をフルに試?し、 WebサイトのL宀に嗤李なUYを戻工します。
5.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. H2Oはなぜ?堀なのか !? 麼に3つの尖喇による 1.? 枠業崙囮が倔 2.?
枠M碧への鬉遼戮毅Cache-digests、TLS1.3、etc.. 3.? neatかつojのないg廾 !? しくはWebで 5
6.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. しかし´ !? Apacheとnginxつよい !? 尖喇暴? 1.?
N源なモジュ`ル蛤 2.? 秤鵑龍爐 3.? 酢れてる業 !? 暴は輝隼H2Oが恷?のWebサ`バ`だと佚じているので 弊順の??をより侑せにするためにH2Oが噸式してほしい !? 堀いことはわかった。それ參翌に採が駅勣か 6 hGps://w3techs.com/technologies/overview/ web_server/all
7.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. 宴旋で酔mなWebサ`バ`へ !? Apacheやnginxに竃栖て、H2Oに竃栖ないことをoくしたい !? モジュ`ルの屁 !?
ユ`ザ`??によるモジュ`ルのきやすさ !? Apacheやnginxよりも、揖じことがgにできるようにしたい !? O協ファイルの悲さΕ謄好織咼螢謄 !? あとドキュメントももっとg?きますすいません 7
8.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Mみzみ?Zとしてのmrubyの? !? 2015定7?にリリ`スしたv1.4で、 Ryosuke Matsumoto@matsumotory) さんが兜豚g廾 !? リクエストハンドラとしてmrubyのコ`ドをg?できる 8
9.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Mみzみ?Zとしてのmrubyの? !? ApacheやNginxよりもいサポ`ト !? コアに原奉、デフォルトでON !?
?揖豚I/Oを辛嬬にする光Nライブラリの戻工 !? Rack Specにした?隼なインタ`フェ`ス !? 書瘁さらに?搾くしていく嚠協 !? 覿?余 !? アクセス崙囮、URIリライト、レスポンスのきQえ、etc.. !? プログラマブルで悲なO協が辛嬬に !? サ`バ`C嬬の?Xなも辛嬬に 9
10.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. mrubyの採がどう耙しいのか 1.? サ`バC嬬の來 2.? O協の悲來Ε謄好織咼螢謄 10
11.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. 1. サ`バC嬬の來 !? ユ`ザ??が、圀しいC嬬をさくっといて弖紗できる彜Bが尖 !? しかしcでモジュ`ル恬るのは? !?
Cloudbleed (2017) !? https://blog.cloud?are.com/incident-report-on-memory-leak-caused-by-cloud?are- parser-bug/ !? Cloud?are (CDN)でk?したユ`ザ蜘停秤鵑梁えい} !? 圻咀は、坪uのnginxモジュ`ルHTMLパ`サのバグ !? ポインタ砿尖のミスによるバッファオ`バ`ラン !? mrubyでけば圻尖議にk?しえない} !? コ`ドにバグがあっても、バッファオ`バ`ランがk?することはない 11
12.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. 2. O協の悲來Ε謄好織咼螢謄 !? ?議なにはなりますが、Apacheやnginxのディレクティブを ?俳えられないえるつもりもないので 飴悒稀`バ`?てるたびに2rgくらいぐぐっている !? 俔なmod_rewrite、 ミスりやすいアクセス崙囮、 採絞か燭ないsection´ !?
尖 !? シンプルなことはディレクティブでgに !? }jなことはプログラマブルにがっつり 12
13.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. なんとなく咫鵑?崑する歌深 !? ?^ !? Excel not working: 1,170嵐周 !?
PowerPoint not working: 1,040嵐周 !? nginx con?g not working: 73嵐周 !? nginxはユ`ザ`の??盾Q嬬?が?いというのもありそう 13
14.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. 2. O協の悲來Ε謄好織咼螢謄 !? ディレクティブによるO協だと、O協がちゃんと燭い討い襪 gHにリクエストを僕ってしてみるしかない !? O協弖紗したらCon?ictしてeのw侭が咾なくなった,箸´ !?
}jであるからこそテストをきたいのに´ !? mrubyならテストをける !? 腺業のかいg悶テスト !? スタブを聞ったテスト !? etc.. !? 除?嶄に採かしらのHowToを巷_します┐燭屬鵤 14
15.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. というわけで、云?は !? H2O x mruby の碧Mみのgな盾h !? 岑られざるC嬬のB初 !?
ステルスで弖紗したC嬬 !? 除?マ`ジ嚠協のC嬬 15
16.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. H2O x mruby 古h 16
17.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. H2Oのア`キテクチャ !? マルチスレッド x イベントル`プ !? デフォルトでコア方と揖じ方のスレッドが軟 !?
光スレッドがイベントl咾妊螢エストを案く !? 翌何I/Oによるブロックはスル`プットに岷Yするので、 畠てのI/OjみのI尖をノンブロッキングで?うことが故勣 17
18.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. mruby嶄のI尖もノンブロッキングでやりたい !? 採も深えずに屡贋のmrbgemsを聞うとgにブロックする !? イベントル`プ鬉気譴深抜mrbgemsはほとんどoい !?
蒙にh2oでは鏡?の?堀な。イベントル`プを聞っており、 箭えばlibuv鬉mrbgemsがあっても噸宥には聞えない !? CにもAnyEventみたいなレイヤがあればいいんですけどね !? H2O x mruby ではイベントl咾龍{を鞭けられないのか 18
19.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. それFiberでできるよ !? Fiber: Rubyにおけるコル`チン@Af{議マルチタスク !? Perlでいうと´なんでしょうねCoro殖聞ったことない 19
20.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. FiberによるノンブロッキングI/O 20
21.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. FiberによるノンブロッキングI/O !? gHのH2Oのコ`ド !? https://github.com/h2o/h2o/blob/master/lib/ handler/mruby/embedded/core.rb#L51 !?
O協ファイルから誼たmrubyハンドラの コ`ドを、Fiber RunnerにQ !? 恷m晒のため、?た?がそこそこ伽い !? 恬撹したFiberの壅旋? !? begin-rescueのオ`バ`ヘッド指閲 !? ちなみにv2.3からはもっと伽い湖じにな ります 21
22.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Rack ApplicaIon としての mrubyハンドラ !? Rack碧にtったRackアプリケ`ションとして┐曚棕峰辛嬬 !? v2.2參念はレスポンスのきQえが音辛だが、v2.3參週で竃栖るように なる嚠協 22
23.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Rack ApplicaIon としての mrubyハンドラ !? mrubyコ`ドを翌何ファイルに崔くことも齢辛嬬 !? Rack Middleware議なことも齢辛嬬 !?
そのうちRack::Builder札QのDSLも恬りたい 23
24.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. H2O x mruby で あれやこれやできるよという 24
25.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Access Control 25
26.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Access Control !? v2.1から、aclというMみzみメソッドを?吭 !? アクセス崙囮がgにけるように !?
サンプルケ`ス !? 127.0.0.1からのアクセスは械にS辛 !? 192.168.*參翌からのcurlは403 !? 蒙協のipからのリクエストには503 !? ^moved ̄ が根まれるパスへのリクエストは蒙協URLにリダイレクト !? /admin/ 參和へのリクエストにはBasicJ^を勣箔 26
27.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Access Control - nginxの栽 !? 謹蛍こんな湖じ !? つれぇ´ !?
Ifの訳周嶄で、andやorが聞 えないしネストもできない !? 篳聞ってうまいこと やりくり´ !? そもそも巷塀がif is evilと? っている庁´採だと´ !? https://www.nginx.com/ resources/wiki/start/topics/ depth/i?sevil/ 27 少御: そんなにちゃんと嘛_Jしてないので歌深にしないで和さい
28.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Access Control - Apacheの栽 !? Wの詰いApache?では音辛嬬でした !? 屎岷にいうと{べる櫃眛陲ませんでした 28
29.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Access Control - H2O 2.0參念の栽 !? うっこわい !? まぁやりたいことが殆岷にできはするし、iめもする !?
しかしもうちょっとなんとかならないものか 29
30.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Access Control - H2O 2.1參週 !? なんとなくエレガントにけるようになった !? aclブロックの嶄では光NDSLメソッドが聞える !?
allow: 軸恙に瘁Aのハンドラにpass through !? deny: 軸恙に403 !? etc.. !? 光メソッドのブロック坪では、m?訳周を挫きにける !? ここでもaddrやpathなど、envにアクセスするための DSLメソッドが聞える 30
31.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. DoS DetecIon 31
32.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. DoS DetecIon !? 覆DoSDetectorというライブラリを戻工 !? IPアドレスベ`スでg了rg坪のリクエスト方をカウントし、 階えたら?協豚gBANする (403 Forbidden) !?
Apacheのmod_dosdetectorに犁 !? https://github.com/stanaka/mod_dosdetector !? ロジックも歌深にさせてきました 32
33.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. DoS DetecIon - Advanced !? DoS登協rのI尖はcallbackでカスタマイズ辛嬬 !? ログ預いたりアラ`トメ`ル?ばしたり !?
strategyを?恬すれば、DoS登協ロジックもカスタマイズ辛嬬 33
34.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. DoS DetecIon C もろもろ !? 廣吭泣 !? F壓のg廾は、スレッドg了のロ`カル篳でカウントしているの で、、鬟曠好畔〜スレッド方で護り麻する駅勣がある !?
v2.3あたりから、mrubyからRedisが聞えるようになる嚠協瘁 峰なので、そういったstrategyを?吭する嚠協がなくはない !? Pure mrubyでかれているため、モジュ`ル?恬したいユ`ザ`さんの サンプルとして措いのでは !? なおPure mrubyコ`ドならgにrequireするだけでよく、 H2Oの壅ビルドは音勣 !? c吉を聞ってmrbgemsをきたい栽は、mrubyとh2oをビルドし なおす駅勣あり !? ?議にはjoin兜?にいたやつなので房い?れがある ?蛍で聞ってないけど 34
35.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. HTTP Request 35
36.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. HTTP Request !? mrubyハンドラからノンブロッキングなHTTP Requestが?ばせる !? proxy議なことが否叟にできる !?
2粁Aの揖豚ポイント !? req.joinしてステ`タスとヘッダのみを函誼 !? resp[2].joinしてボディを函誼 36
37.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. HTTP Request - 箭1 !? 軟rにetcdからO協、鯣ゝ辰垢襯汽鵐廛襭v2.3? !? Y創からは福いたけど、このハンドラの翌箸?揖豚I尖させるや つ?笋世辰燭鵑任垢茵しくはWebで´ !?
剃にいうと書はハンドラの翌ではhttp_requestとか聞えないので お櫃鬚弔穎造気 37
38.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. HTTP Request - 箭2 !? }方リクエストを揖rに誘げて、Y栽して卦すサンプル 38
39.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. HTTP Request - 箭2 - もっと紳覆茲 !? こんな?にすると、より壼くレスポンスのパイプラインにdせられる !? メモリフットプリントも?さくなる╋犒孱 39
40.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. HTTP Request - 箭3 !? ESI (Edge Side Includes) のサンプル !? ちなみにESIとは !?
エッジサ`バe.g. CDN箸如 啜弔縫灰鵐謄鵐弔鮟Mみ?てるためのマ`クアップ碧┳硬い !? ペ`ジを撹する何瞳ごとにキャッシュできる 40
41.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. HTTP Request - 箭3 !? m輝にこんなの恬って´ 41 <esi:include>タグの src奉來をiき竃して HTTPリクエストを僕佚 bodyを鞭佚┐箸いΔ揖豚
42.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. HTTP Request - 箭3 !? こう !? シンプルに?えるが、このC嬬をcでg廾することをご誅駭造気ぁ 42
43.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Redis 43
44.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Redis !? v2.2から、TLS Session Resumptionのバックエンドとして聞うため、 ネイティブでredisサポ`トしてます !? ID basedの栽坤ャッシュの隠砿侭として !?
ticket basedの栽坤船吋奪箸留9侭として !? ちなみにauto rotateC嬬原き !? 2.1參念はmemcachedだけだった !? HiRedisをラップしてh2oコアに隔ってる !? v2.3參週 !? そのredisライブラリをmrubyからもQえるようにした H2O::Redisがリリ`ス嚠協 !? キャッシュをredisから函ってきて卦抜する、みたいなI尖を mrubyで?うことが辛嬬に 44
45.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Redis: 箭 !? 床議なペ`ジのHTTPレスポンスをまるっとredisにキャッシュする箭 45
46.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Other TCP Bindings 46
47.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Other TCP Bindings !? HTTPやRedisやコア箸g廾がすでにあったからそれを聞えばよかった !? でも書瘁、麿のプロトコルを聞いたい栽吉はどうする !?
MySQL, memcached, etc.. !? eにcでプロトコルバインディングをg廾してくのはしんどい 47
48.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Other TCP Bindings !? ノンブロッキングなH2O::TCPSocketを恬った !? eのバインディングは、mrubyでこれを聞いつつけばよい !?
ので、?械にきやすくなったはず !? mrubyのパフォ`マンスが}になることは ほとんどoいだろう覿 !? とりあえずMySQLでもいてみる嚠協嚠協は隆協 48
49.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Image Filter 49
50.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Image Filter !? k燕l嚔_kで、書?までになんとかそれっぽいもの恬ろうと房ってた んですけど、gに栽いませんでした´ !? いちおう書瘁こんなことも深えてますよ、議なノリでB初させて和さい !?
麼崋 !? mod_small_light議な、鮫颪鬟ンザフライでs?やクリップして くれるやつが圀しい !? 送?にmrubyで鮫I尖をするのはWいだろう !? 翌何コマンドg?できたらよいのでは !? それ參翌にも竃栖ることの嫌がレがるし 50
51.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. ベンチマ`ク 51
52.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. ベンチマ`ク !? ?したいこと !? mrubyであれこれやっても、システムのボトルネックはどうせ I/Oもしくはアプリケ`ションなので、}にならないはず !?
揖じI尖をするnginxと?^して`餓レベルの喪晒しかないはず !? サンプルアプリ !? gなTODOリストみたいなやつのJSON API !? https://github.com/i110/tinytodo !? O協ファイルやwrk scriptも?ってます 52
53.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. ベンチマ`ク撹 53 !? 編^h廠 !? EC2|奨リ`ジョン c4-8xlarge 3岬 (尖コア方36 !?
リバ`スプロキシH2O or nginx !? アプリケ`ションサ`バ (Plack app !? 塞かけサ`バwrk with lua scripting !? 揖?プレイスメントグル`プ、ネットワ`キング嗤 塞かけ サ`バ revproxy (H2O or nginx) クソアプリ 塞 proxy sqlite
54.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. 並念ベンチマ`ク 54 !? ベンチ函る念にまず、H2O x mrubyとnginxのな來嬬餓を{べよう !? アプリiきで、それぞれが岷俊200卦してみる !?
mrubyぶんのoverheadのせいでnginxのほうが堀い覿 塞かけ サ`バ revproxy (H2O or nginx) クソアプリ 塞 sqlite 基o?で 200
55.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. 並念ベンチマ`ク C Y惚 55 !? このr泣でH2Oのほうが堀いんですけど´まじで´ !? クソアプリいらなかったわ´ Requests per second
56.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. ベンチマ`ク: 深賀 !? よくわからない !? まぁnginxもごにょごにょきすぎるとWくなるということですかね !?
とにかく?拈でよかった !? 富なくともほとんどのユ`スケ`スでは、mrubyであれこれやっても }ないと?えるのではないか 56
57.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Y 57
58.
Copyright ? DeNA Co.,Ltd. All Rights Reserved. Y !? H2O x mrubyでみんなで侑せになろう !? つらみのあるO協ファイルとはさよならしよう !?
?喇にサ`バをしていこう !? gにC嬬をけるので頁?いてみてください !? ブログにいたりgithubで巷_してくれる吉すると?粭劼靴い任 !? Feature requestしてくれるだけでも?粭劼靴い任 !? ??なC嬬Ω追討?る嚠協のv2.3にご豚棋和さい !? むしろコアまわりのPRもお棋ちしております 58
Download