SlideShare a Scribd company logo
Submit Search
Upload
H2O x mrubyで人はどれだけ幸せになれるのか
Report
Share
Ichito Nagata
Follow
•
18 likes
•
13,654 views
1
of
58
H2O x mrubyで人はどれだけ幸せになれるのか
•
18 likes
•
13,654 views
Report
Share
Download Now
Download to read offline
Engineering
YAPC::Kansai presentation slide about h2o and mruby
Read more
Ichito Nagata
Follow
Recommended
1 Linux入門 第1章 UNIX/Linuxとは by
1 Linux入門 第1章 UNIX/Linuxとは
Enpel
3.2K views
•
9 slides
今こそ知りたいSpring Batch(Spring Fest 2020講演資料) by
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
8.5K views
•
53 slides
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019) by
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Noritaka Sekiyama
20.5K views
•
61 slides
webエンジニアのためのはじめてのredis by
webエンジニアのためのはじめてのredis
nasa9084
8.3K views
•
31 slides
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!) by
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Trainocate Japan, Ltd.
13.4K views
•
22 slides
コンテナネットワーキング(CNI)最前線 by
コンテナネットワーキング(CNI)最前線
Motonori Shindo
31.6K views
•
34 slides
More Related Content
What's hot
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!- by
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
Yuta Imai
42.1K views
•
64 slides
Apache NiFi の紹介 #streamctjp by
Apache NiFi の紹介 #streamctjp
Yahoo!デベロッパーネットワーク
3.3K views
•
25 slides
開発者の生産性向上を妨げる障壁とサイボウズの生産性向上チームの取り組み by
開発者の生産性向上を妨げる障壁とサイボウズの生産性向上チームの取り組み
Jumpei Miyata
827 views
•
39 slides
フロー効率性とリソース効率性について #xpjug by
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
106.2K views
•
62 slides
Ceph アーキテクチャ概説 by
Ceph アーキテクチャ概説
Emma Haruka Iwao
30.4K views
•
62 slides
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料) by
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
NTT DATA Technology & Innovation
1.4K views
•
55 slides
What's hot
(20)
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!- by Yuta Imai
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
Yuta Imai
•
42.1K views
Apache NiFi の紹介 #streamctjp by Yahoo!デベロッパーネットワーク
Apache NiFi の紹介 #streamctjp
Yahoo!デベロッパーネットワーク
•
3.3K views
開発者の生産性向上を妨げる障壁とサイボウズの生産性向上チームの取り組み by Jumpei Miyata
開発者の生産性向上を妨げる障壁とサイボウズの生産性向上チームの取り組み
Jumpei Miyata
•
827 views
フロー効率性とリソース効率性について #xpjug by Itsuki Kuroda
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
•
106.2K views
Ceph アーキテクチャ概説 by Emma Haruka Iwao
Ceph アーキテクチャ概説
Emma Haruka Iwao
•
30.4K views
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料) by NTT DATA Technology & Innovation
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
NTT DATA Technology & Innovation
•
1.4K views
ヤフーのプライベートクラウドとクラウドエンジニアの業務について by Yahoo!デベロッパーネットワーク
ヤフーのプライベートクラウドとクラウドエンジニアの業務について
Yahoo!デベロッパーネットワーク
•
1.7K views
PostgreSQLによるデータ分析ことはじめ by Ohyama Masanori
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
•
17.5K views
マスターデータの キャッシュシステムの改善の話 by natsumi_ishizaka
マスターデータの キャッシュシステムの改善の話
natsumi_ishizaka
•
2.6K views
AWS で Presto を徹底的に使いこなすワザ by Noritaka Sekiyama
AWS で Presto を徹底的に使いこなすワザ
Noritaka Sekiyama
•
1.3K views
MogileFSをバックエンドとしたPrivate S3の作り方 by Ryo Kuroda
MogileFSをバックエンドとしたPrivate S3の作り方
Ryo Kuroda
•
15K views
AbemaTVの動画配信を支えるサーバーサイドシステム by yuichiro nakazawa
AbemaTVの動画配信を支えるサーバーサイドシステム
yuichiro nakazawa
•
30.5K views
AbemaTV が対峙する技術的課題と開発の現場 by Yusuke Goto
AbemaTV が対峙する技術的課題と開発の現場
Yusuke Goto
•
6.2K views
HTTP2 最速実装 〜入門編〜 by Kaoru Maeda
HTTP2 最速実装 〜入門編〜
Kaoru Maeda
•
32K views
MySQL 5.7にやられないためにおぼえておいてほしいこと by yoku0825
MySQL 5.7にやられないためにおぼえておいてほしいこと
yoku0825
•
175.1K views
AWS Black Belt Online Seminar AWS Direct Connect by Amazon Web Services Japan
AWS Black Belt Online Seminar AWS Direct Connect
Amazon Web Services Japan
•
229.9K views
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな by Amazon Web Services Japan
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Amazon Web Services Japan
•
5.6K views
OpenStackでも重要な役割を果たすPacemakerを知ろう! by ksk_ha
OpenStackでも重要な役割を果たすPacemakerを知ろう!
ksk_ha
•
3.9K views
SPAと覚悟 by Teppei Sato
SPAと覚悟
Teppei Sato
•
67.4K views
分散トレーシング技術について(Open tracingやjaeger) by NTT Communications Technology Development
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
•
23.3K views
Viewers also liked
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法 by
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
Takuya Ueda
10.1K views
•
40 slides
やってみたら意外とできた!イベント・リクルーティングの成功させる2つのポイント by
やってみたら意外とできた!イベント・リクルーティングの成功させる2つのポイント
Narichika Kajihara
3K views
•
36 slides
ICTutorialOverlay : A utility for making "Overlay Tutorial" by
ICTutorialOverlay : A utility for making "Overlay Tutorial"
Ichito Nagata
5.6K views
•
14 slides
スタートアップを目指す零細企業のエンジニア採用事情 by
スタートアップを目指す零細企業のエンジニア採用事情
Kohji Osamura
2K views
•
20 slides
エンジニア採用における技術広報の重要ポイント by
エンジニア採用における技術広報の重要ポイント
Noriaki Kadota
50.8K views
•
16 slides
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン by
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Kazuyuki Miyake
5.5K views
•
64 slides
Viewers also liked
(7)
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法 by Takuya Ueda
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
Takuya Ueda
•
10.1K views
やってみたら意外とできた!イベント・リクルーティングの成功させる2つのポイント by Narichika Kajihara
やってみたら意外とできた!イベント・リクルーティングの成功させる2つのポイント
Narichika Kajihara
•
3K views
ICTutorialOverlay : A utility for making "Overlay Tutorial" by Ichito Nagata
ICTutorialOverlay : A utility for making "Overlay Tutorial"
Ichito Nagata
•
5.6K views
スタートアップを目指す零細企業のエンジニア採用事情 by Kohji Osamura
スタートアップを目指す零細企業のエンジニア採用事情
Kohji Osamura
•
2K views
エンジニア採用における技術広報の重要ポイント by Noriaki Kadota
エンジニア採用における技術広報の重要ポイント
Noriaki Kadota
•
50.8K views
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン by Kazuyuki Miyake
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
Kazuyuki Miyake
•
5.5K views
Solving anything in VCL by Fastly
Solving anything in VCL
Fastly
•
13.3K views
Similar to H2O x mrubyで人はどれだけ幸せになれるのか
まだまだ戦えるweb!mithril.js最初の1歩 by
まだまだ戦えるweb!mithril.js最初の1歩
Keisuke Mori
863 views
•
32 slides
アプリエンジニアでもできる閉域網構築のススメ! by
アプリエンジニアでもできる閉域網構築のススメ!
Tosihiyuki Hirai
2.9K views
•
31 slides
SORACOM Canalを使った キャンペーン端末事 by
SORACOM Canalを使った キャンペーン端末事
Tosihiyuki Hirai
171 views
•
22 slides
オフショア開発の利用のコツと発注側が気をつけるポイント by
オフショア開発の利用のコツと発注側が気をつけるポイント
株式会社DEHA SOLUTIONS
154 views
•
15 slides
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと by
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと
Masayuki Ueda
1.1K views
•
39 slides
Bonfire API #1 APIのリトライ処理 by
Bonfire API #1 APIのリトライ処理
Yahoo!デベロッパーネットワーク
6.5K views
•
18 slides
Similar to H2O x mrubyで人はどれだけ幸せになれるのか
(20)
まだまだ戦えるweb!mithril.js最初の1歩 by Keisuke Mori
まだまだ戦えるweb!mithril.js最初の1歩
Keisuke Mori
•
863 views
アプリエンジニアでもできる閉域網構築のススメ! by Tosihiyuki Hirai
アプリエンジニアでもできる閉域網構築のススメ!
Tosihiyuki Hirai
•
2.9K views
SORACOM Canalを使った キャンペーン端末事 by Tosihiyuki Hirai
SORACOM Canalを使った キャンペーン端末事
Tosihiyuki Hirai
•
171 views
オフショア開発の利用のコツと発注側が気をつけるポイント by 株式会社DEHA SOLUTIONS
オフショア開発の利用のコツと発注側が気をつけるポイント
株式会社DEHA SOLUTIONS
•
154 views
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと by Masayuki Ueda
最若手メンバーこそチャンス!チーム改善に取り組んでわかったこと
Masayuki Ueda
•
1.1K views
Bonfire API #1 APIのリトライ処理 by Yahoo!デベロッパーネットワーク
Bonfire API #1 APIのリトライ処理
Yahoo!デベロッパーネットワーク
•
6.5K views
自動運転に向けた取り組みと安全管理 by Kuwabara Kunihito
自動運転に向けた取り組みと安全管理
Kuwabara Kunihito
•
999 views
グロースハック なぜ我々は無意味な施策を打ってしまうのか by Yahoo!デベロッパーネットワーク
グロースハック なぜ我々は無意味な施策を打ってしまうのか
Yahoo!デベロッパーネットワーク
•
2.5K views
スポーツナビアプリ スモールチームでのアプリ強化の進め方 #yjcamp by Yahoo!デベロッパーネットワーク
スポーツナビアプリ スモールチームでのアプリ強化の進め方 #yjcamp
Yahoo!デベロッパーネットワーク
•
3.2K views
ECCV2018 Everybody dance now論文紹介 (CV勉強会@関東) by Tenki Lee
ECCV2018 Everybody dance now論文紹介 (CV勉強会@関東)
Tenki Lee
•
2K views
DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon by DeNA
DeNAのゲームを支えるプラットフォーム Sakasho #denatechcon
DeNA
•
5.7K views
マーケティングテクノロジー勉強会 by 伊藤 孝
マーケティングテクノロジー勉強会
伊藤 孝
•
1.3K views
DeNAのゲーム開発を支える Game Backend as a Service by Makoto Haruyama
DeNAのゲーム開発を支える Game Backend as a Service
Makoto Haruyama
•
20.4K views
Presto in Yahoo! JAPAN #yjdsnight by Yahoo!デベロッパーネットワーク
Presto in Yahoo! JAPAN #yjdsnight
Yahoo!デベロッパーネットワーク
•
1.5K views
WWDC2017 レポート & Quick Look Preview Extension について by Yahoo!デベロッパーネットワーク
WWDC2017 レポート & Quick Look Preview Extension について
Yahoo!デベロッパーネットワーク
•
1.3K views
Unification of the middle scale services by Nuxt.js by HajimeSasanuma
Unification of the middle scale services by Nuxt.js
HajimeSasanuma
•
2.6K views
インフラエンジニアの楽しい標準化活動 by gree_tech
インフラエンジニアの楽しい標準化活動
gree_tech
•
2.1K views
Hadoopエコシステムを駆使したこれからのWebアクセス解析サービス by Yukinori Suda
Hadoopエコシステムを駆使したこれからのWebアクセス解析サービス
Yukinori Suda
•
3.2K views
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来 by 馮 富久
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来
馮 富久
•
706 views
kukai: 省エネ世界2位のディープラーニング・スパコン by Yahoo!デベロッパーネットワーク
kukai: 省エネ世界2位のディープラーニング・スパコン
Yahoo!デベロッパーネットワーク
•
3.3K views
Recently uploaded
システム概要.pdf by
システム概要.pdf
Taira Shimizu
44 views
•
1 slide
onewedge_companyguide1 by
onewedge_companyguide1
ONEWEDGE1
54 views
•
22 slides
Najah Matsuo Self Introduction by
Najah Matsuo Self Introduction
NajahMatsuo
10 views
•
29 slides
SSH超入門 by
SSH超入門
Toru Miyahara
457 views
•
21 slides
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 by
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
修治 松浦
208 views
•
36 slides
概要.pdf by
概要.pdf
Taira Shimizu
6 views
•
1 slide
Recently uploaded
(6)
システム概要.pdf by Taira Shimizu
システム概要.pdf
Taira Shimizu
•
44 views
onewedge_companyguide1 by ONEWEDGE1
onewedge_companyguide1
ONEWEDGE1
•
54 views
Najah Matsuo Self Introduction by NajahMatsuo
Najah Matsuo Self Introduction
NajahMatsuo
•
10 views
SSH超入門 by Toru Miyahara
SSH超入門
Toru Miyahara
•
457 views
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 by 修治 松浦
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
修治 松浦
•
208 views
概要.pdf by Taira Shimizu
概要.pdf
Taira Shimizu
•
6 views
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. ⾃⼰紹介 ! @i110 ! 株式会社ディー・エヌ・エー !
システム本部技術開発室所属 ⁃ ⾊んな⼈が⾊んなことをやってる部署 ⁃ 平均年齢⾼め ! 昨年夏くらいにあれやこれやあってH2Oの開発にjoin ! 現在、業務時間の全てをH2Oの開発に注いでいる状態 ⁃ 最近はmrubyまわりの機能追加&改善が多め 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翻訳いわく !
おおむねこの通りです(⾚字部分を除いて) ! みんな⼤好き某kazuho sanが開発 ! 現在の最新verはv2.2.0-beta1 4 H2Oは、古い世代のWebサーバーと⽐較して、 CPU使⽤率が低いユーザーに迅速な応答を提供する、 新しい世代のHTTPサーバーです。 基盤から設計されたサーバーは、優先コンテンツ配信と サーバープッシュを含むHTTP / 2機能をフルに活⽤し、 Webサイトの訪問者に有望な経験を提供します。
5.
Copyright © DeNA Co.,Ltd. All Rights Reserved. H2Oはなぜ⾼速なのか ! 主に3つの理由による 1. 優先度制御が優秀 2.
先進仕様への対応の速さ(Cache-digests、TLS1.3、etc..) 3. neatかつ無駄のない実装 ! 詳しくはWebで! 5
6.
Copyright © DeNA Co.,Ltd. All Rights Reserved. しかし… ! Apacheとnginxつよい ! 理由(私⾒) 1.
豊富なモジュール群 2. 情報の多さ 3. 枯れてる度 ! 私は当然H2Oが最⾼のWebサーバーだと信じているので 世界の⼈々をより幸せにするためにH2Oが普及してほしい ! 速いことはわかった。それ以外に何が必要か 6 hGps://w3techs.com/technologies/overview/ web_server/all
7.
Copyright © DeNA Co.,Ltd. All Rights Reserved. 便利で快適なWebサーバーへ ! Apacheやnginxに出来て、H2Oに出来ないことを無くしたい ! 拡張モジュールの整備 !
ユーザー⾃⾝による拡張モジュールの書きやすさ ! Apacheやnginxよりも、同じことが簡単にできるようにしたい ! 設定ファイルの柔軟さ&テスタビリティ ! あとドキュメントももっと沢⼭書きますすいません 7
8.
Copyright © DeNA Co.,Ltd. All Rights Reserved. 組み込み⾔語としてのmrubyの採⽤ ! 2015年7⽉にリリースしたv1.4で、 Ryosuke Matsumoto(@matsumotory) さんが初期実装 ! リクエストハンドラとしてmrubyのコードを実⾏できる 8
9.
Copyright © DeNA Co.,Ltd. All Rights Reserved. 組み込み⾔語としてのmrubyの採⽤ ! ApacheやNginxよりも強いサポート ! コアに付属、デフォルトでON !
⾮同期I/Oを可能にする各種ライブラリの提供 ! Rack Specに準拠した⾃然なインターフェース ! 今後さらに⼿厚くしていく予定 ! 想定⽤途 ! アクセス制御、URIリライト、レスポンスの書き換え、etc.. ! プログラマブルで柔軟な設定が可能に ! サーバー機能の⼿軽な拡張も可能に 9
10.
Copyright © DeNA Co.,Ltd. All Rights Reserved. mrubyの何がどう嬉しいのか 1. サーバ機能の拡張性 2. 設定の柔軟性&テスタビリティ 10
11.
Copyright © DeNA Co.,Ltd. All Rights Reserved. 1. サーバ機能の拡張性 ! ユーザ⾃⾝が、欲しい機能をさくっと書いて追加できる状態が理想 ! しかしcでモジュール作るのは⼤変 !
Cloudbleed (2017) ! https://blog.cloudflare.com/incident-report-on-memory-leak-caused-by-cloudflare- parser-bug/ ! Cloudflare (CDN)で発⽣したユーザ秘匿情報の漏えい問題 ! 原因は、内製のnginxモジュール(HTMLパーサ)のバグ ! ポインタ管理のミスによるバッファオーバーラン ! mrubyで書けば原理的に発⽣しえない問題 ! コードにバグがあっても、バッファオーバーランが発⽣することはない 11
12.
Copyright © DeNA Co.,Ltd. All Rights Reserved. 2. 設定の柔軟性&テスタビリティ ! 個⼈的な話にはなりますが、Apacheやnginxのディレクティブを ⼀切覚えられない(覚えるつもりもない)ので 毎回サーバー⽴てるたびに2時間くらいぐぐっている ! 凶悪なmod_rewrite、 ミスりやすいアクセス制御、 何故か効かないsection… !
理想 ! シンプルなことはディレクティブで簡単に ! 複雑なことはプログラマブルにがっつり 12
13.
Copyright © DeNA Co.,Ltd. All Rights Reserved. なんとなく印象と⼀致する参考値 ! ⽐較 ! Excel not working: 1,170万件 !
PowerPoint not working: 1,040万件 ! nginx config not working: 73万件 ! nginxはユーザーの⾃⼰解決能⼒が⾼いというのもありそう 13
14.
Copyright © DeNA Co.,Ltd. All Rights Reserved. 2. 設定の柔軟性&テスタビリティ ! ディレクティブによる設定だと、設定がちゃんと効いているか 実際にリクエストを送って試してみるしかない ! 設定追加したらConflictして別の箇所が動かなくなった!とか… !
複雑であるからこそテストを書きたいのに… ! mrubyならテストを書ける ! 粒度の細かい単体テスト ! スタブを使ったテスト ! etc.. ! 近⽇中に何かしらのHowToを公開します(たぶん) 14
15.
Copyright © DeNA Co.,Ltd. All Rights Reserved. というわけで、本⽇は ! H2O x mruby の仕組みの簡単な解説 ! 知られざる機能の紹介 !
ステルスで追加した機能 ! 近々マージ予定の機能 15
16.
Copyright © DeNA Co.,Ltd. All Rights Reserved. H2O x mruby 概説 16
17.
Copyright © DeNA Co.,Ltd. All Rights Reserved. H2Oのアーキテクチャ ! マルチスレッド x イベントループ ! デフォルトでコア数と同じ数のスレッドが起動 !
各スレッドがイベント駆動でリクエストを捌く ! 外部I/Oによるブロックはスループットに直結するので、 全てのI/O絡みの処理をノンブロッキングで⾏うことが肝要 17
18.
Copyright © DeNA Co.,Ltd. All Rights Reserved. mruby中の処理もノンブロッキングでやりたい ! 何も考えずに既存のmrbgemsを使うと簡単にブロックする ! イベントループ対応された既存mrbgemsはほとんど無い !
特にh2oでは独⾃の(⾼速な!)イベントループを使っており、 例えばlibuv対応のmrbgemsがあっても普通には使えない ! CにもAnyEventみたいなレイヤがあればいいんですけどね ! H2O x mruby ではイベント駆動の恩恵を受けられないのか? 18
19.
Copyright © DeNA Co.,Ltd. All Rights Reserved. それFiberでできるよ ! Fiber: Rubyにおけるコルーチン/継続/協調的マルチタスク ! 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 ! 実際のH2Oのコード ! https://github.com/h2o/h2o/blob/master/lib/ handler/mruby/embedded/core.rb#L51 !
設定ファイルから得たmrubyハンドラの コードを、Fiber Runnerに変換 ! 最適化のため、⾒た⽬がそこそこ怖い ! 作成したFiberの再利⽤ ! begin-rescueのオーバーヘッド回避 ! ちなみにv2.3からはもっと怖い感じにな ります 21
22.
Copyright © DeNA Co.,Ltd. All Rights Reserved. Rack ApplicaIon としての mrubyハンドラ ! Rack仕様に則ったRackアプリケーションとして(ほぼ)記述可能 ! v2.2以前はレスポンスの書き換えが不可だが、v2.3以降で出来るように なる予定 22
23.
Copyright © DeNA Co.,Ltd. All Rights Reserved. Rack ApplicaIon としての mrubyハンドラ ! mrubyコードを外部ファイルに置くことも勿論可能 ! Rack Middleware的なことも勿論可能 !
そのうちRack::Builder互換の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という組み込みメソッドを⽤意 ! アクセス制御が簡単に書けるように !
サンプルケース ! 127.0.0.1からのアクセスは常に許可 ! 192.168.*以外からのcurlは403 ! 特定のipからのリクエストには503 ! “moved” が含まれるパスへのリクエストは特定URLにリダイレクト ! /admin/ 以下へのリクエストにはBasic認証を要求 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/ifisevil/ 27 警告: そんなにちゃんと動作確認してないので参考にしないで下さい
28.
Copyright © DeNA Co.,Ltd. All Rights Reserved. Access Control - Apacheの場合 ! 僕の低いApache⼒では不可能でした ! 正直にいうと調べる気も起きませんでした 28
29.
Copyright © DeNA Co.,Ltd. All Rights Reserved. Access Control - H2O 2.0以前の場合 ! うっこわい ! まぁやりたいことが素直にできはするし、読めもする !
しかしもうちょっとなんとかならないものか 29
30.
Copyright © DeNA Co.,Ltd. All Rights Reserved. Access Control - H2O 2.1以降 ! なんとなくエレガントに書けるようになった! ! aclブロックの中では各種DSLメソッドが使える !
allow: 即座に後続のハンドラにpass through ! deny: 即座に403 ! etc.. ! 各メソッドのブロック内では、適⽤条件を好きに書ける ! ここでも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アドレスベースで単位時間内のリクエスト数をカウントし、 超えたら⼀定期間BANする (403 Forbidden) !
Apacheのmod_dosdetectorに相当 ! https://github.com/stanaka/mod_dosdetector ! ロジックも参考にさせて頂きました 32
33.
Copyright © DeNA Co.,Ltd. All Rights Reserved. DoS DetecIon - Advanced ! DoS判定時の処理はcallbackでカスタマイズ可能 ! ログ吐いたりアラートメール⾶ばしたり !
strategyを⾃作すれば、DoS判定ロジックもカスタマイズ可能 33
34.
Copyright © DeNA Co.,Ltd. All Rights Reserved. DoS DetecIon – もろもろ ! 注意点 ! 現在の実装は、スレッド単位のローカル変数でカウントしているの で、閾値をホスト数×スレッド数で割り算する必要がある !
v2.3あたりから、mrubyからRedisが使えるようになる予定(後 述)なので、そういったstrategyを⽤意する予定がなくはない ! Pure mrubyで書かれているため、モジュール⾃作したいユーザーさんの サンプルとして良いのでは ! なおPure mrubyコードなら単に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段階の同期ポイント ! req.joinしてステータスとヘッダのみを取得 ! resp[2].joinしてボディを取得 36
37.
Copyright © DeNA Co.,Ltd. All Rights Reserved. HTTP Request - 例1 ! 起動時にetcdから設定値を取得するサンプル(v2.3〜) ! 資料からは詳細省いたけど、このハンドラの外側で⾮同期処理させるや つ⼤変だったんですよ…詳しくはWebで… !
逆にいうと今はハンドラの外ではhttp_requestとか使えないので お気をつけ下さい 37
38.
Copyright © DeNA Co.,Ltd. All Rights Reserved. HTTP Request - 例2 ! 複数リクエストを同時に投げて、結合して返すサンプル 38
39.
Copyright © DeNA Co.,Ltd. All Rights Reserved. HTTP Request - 例2 - もっと効率よく ! こんな⾵にすると、より早くレスポンスのパイプラインに載せられる ! メモリフットプリントも⼩さくなる(多分) 39
40.
Copyright © DeNA Co.,Ltd. All Rights Reserved. HTTP Request - 例3 ! ESI (Edge Side Includes) のサンプル ! ちなみにESIとは !
エッジサーバ(e.g. CDN)側で、 動的にコンテンツを組み⽴てるためのマークアップ仕様(超古い) ! ページを構成する部品ごとにキャッシュできる 40
41.
Copyright © DeNA Co.,Ltd. All Rights Reserved. HTTP Request - 例3 ! 適当にこんなの作って… 41 <esi:include>タグの src属性を抜き出して HTTPリクエストを送信 bodyを受信(というか同期)
42.
Copyright © DeNA Co.,Ltd. All Rights Reserved. HTTP Request - 例3 ! こう ! シンプルに⾒えるが、この機能をcで実装することをご想像下さい… 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の場合:チケットの保管場所として ! ちなみにauto rotate機能付き ! 2.1以前はmemcachedだけだった ! HiRedisをラップしてh2oコアに持ってる ! v2.3以降 ! そのredisライブラリをmrubyからも扱えるようにした H2O::Redisがリリース予定 ! キャッシュをredisから取ってきて返却する、みたいな処理を 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やコア側で実装がすでにあったからそれを使えばよかった ! でも今後、他のプロトコルを使いたい場合等はどうする? !
MySQL, memcached, etc.. ! 個別にcでプロトコルバインディングを実装してくのはしんどい 47
48.
Copyright © DeNA Co.,Ltd. All Rights Reserved. Other TCP Bindings ! ノンブロッキングなH2O::TCPSocketを作った ! 個別のバインディングは、mrubyでこれを使いつつ書けばよい !
ので、⾮常に書きやすくなったはず ! mrubyのパフォーマンスが問題になることは ほとんど無いだろう想定 ! とりあえずMySQLでも書いてみる予定(予定は未定) 48
49.
Copyright © DeNA Co.,Ltd. All Rights Reserved. Image Filter 49
50.
Copyright © DeNA Co.,Ltd. All Rights Reserved. Image Filter ! 発表駆動開発で、今⽇までになんとかそれっぽいもの作ろうと思ってた んですけど、間に合いませんでした… ! いちおう今後こんなことも考えてますよ、的なノリで紹介させて下さい !
主旨: ! mod_small_light的な、画像をオンザフライで縮⼩やクリップして くれるやつが欲しい ! 流⽯にmrubyで画像処理をするのは遅いだろう ! 外部コマンド実⾏できたらよいのでは ! それ以外にも出来ることの幅が広がるし 50
51.
Copyright © DeNA Co.,Ltd. All Rights Reserved. ベンチマーク 51
52.
Copyright © DeNA Co.,Ltd. All Rights Reserved. ベンチマーク ! ⽰したいこと ! mrubyであれこれやっても、システムのボトルネックはどうせ I/Oもしくはアプリケーションなので、問題にならないはず !
同じ処理をするnginxと⽐較して誤差レベルの劣化しかないはず ! サンプルアプリ: ! 単純なTODOリストみたいなやつのJSON API ! https://github.com/i110/tinytodo ! 設定ファイルやwrk scriptも⼊ってます 52
53.
Copyright © DeNA Co.,Ltd. All Rights Reserved. ベンチマーク構成 53 ! 検証環境 ! 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の純粋な性能差を調べよう ! アプリ抜きで、それぞれが直接200返してみる !
mrubyぶんのoverheadのせいでnginxのほうが速い想定 負荷かけ サーバ revproxy (H2O or nginx) クソアプリ 負荷 sqlite 問答無⽤で 200
55.
Copyright © DeNA Co.,Ltd. All Rights Reserved. 事前ベンチマーク – 結果 55 ! この時点でH2Oのほうが速いんですけど…まじで… ! クソアプリいらなかったわ… Requests per second
56.
Copyright © DeNA Co.,Ltd. All Rights Reserved. ベンチマーク: 考察 ! よくわからない ! まぁnginxもごにょごにょ書きすぎると遅くなるということですかね !
とにかく⼤勝利でよかった ! 少なくともほとんどのユースケースでは、mrubyであれこれやっても 問題ないと⾔えるのではないか 56
57.
Copyright © DeNA Co.,Ltd. All Rights Reserved. 結論 57
58.
Copyright © DeNA Co.,Ltd. All Rights Reserved. 結論 ! H2O x mrubyでみんなで幸せになろう ! つらみのある設定ファイルとはさよならしよう !
⾃由にサーバを拡張していこう ! 簡単に拡張機能を書けるので是⾮書いてみてください ! ブログに書いたりgithubで公開してくれる等すると⼤変嬉しいです ! Feature requestしてくれるだけでも⼤変嬉しいです ! ⾊々な機能&改善が⼊る予定のv2.3にご期待下さい ! むしろコアまわりのPRもお待ちしております 58