糸より軽い(?)繊維の話
by
Hirotake Kobayashi
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. 糸より軽い(?)繊維の話 ラクスル株式会社 小林 寛武 令和元年 5月15日
Slide 2
Slide 2 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. About me 小林 寛武 ● Server Side Engineer, Tech Lead in RAKSUL ● Works for RAKSUL INC. from 2017/02 ● printing SCM team ● I ● I play CHUNITHM hkobayash @hkobayash
Slide 3
Slide 3 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. 本日の内容 3 Falcon を触ってみた 2 1 「Fibers Are the Right Solution」振り返り Fiber とは?
Slide 4
Slide 4 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. 本日の内容 3 Falcon を触ってみた 2 1 「Fibers Are the Right Solution」振り返り Fiber とは?
Slide 5
Slide 5 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. 「Fibers Are the Right Solution」振り返り YouTube に動画が上がっているので、そちらをどうぞ。 資料:Fibers Are the Right Solution
Slide 6
Slide 6 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. 「Fibers Are the Right Solution」振り返り(3行) ● Blocking する処理によりスケーラビリティが損なわれる ● スケーラビリティ改善のための Fiber と Falcon という選択肢 ● Fiber が正しい選択 出典: Fibers Are the Right Solution
Slide 7
Slide 7 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. 本日の内容 3 Falcon を触ってみた 2 1 「Fibers Are the Right Solution」振り返り Fiber とは?
Slide 8
Slide 8 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. Fiber とは? ● Ruby 1.9 で登場 ● Enumerator の内部実装ために実装 ● Thread(糸) より軽量という意味で、Fiber(繊維)と名付けられた
Slide 9
Slide 9 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. 「継続」について ● 計算機科学の概念の一つ ● プログラムのある時点で、処理されていない残りのプログラムのこと sum = 0 for num in 1..10 do sum += num sum end 1回目のループのここまで処理した場合、 2回目のループ以降の処理のことを「継続」 と呼ぶ
Slide 10
Slide 10 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. 「継続」と「Fiber」について ● 「継続」を変数として扱えるように(*) 実装したものが 「Fiber」 ● 他言語では「co-routine」という名前で実装されている 場合もある 「継続」の概念自体はどの言語にも存在するが、 第一級オブジェクトとして扱えるとは限らない (*) 「第一級オブジェクト」と呼びます
Slide 11
Slide 11 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. 「非同期処理」と「継続」について 非同期処理とは ● 待ち (blocking) が発生した時、処理を一時停止して、 別の処理を行うこと ● 一時停止から戻ってきたあとの処理は「継続」である 「継続」を第一級オブジェクトとして扱えない言語では、 「継続」の処理を関数に切り出し、引数に渡せば「継続」を扱える
Slide 12
Slide 12 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. Falcon ● 非同期型イベント駆動アプリケーションサーバ ● 1リクエスト1Fiber ● nio4r(New I/O for Ruby): I/O Selector ● async: 非同期I/Oフレームワーク ● timers: イベントループ用タイマー
Slide 13
Slide 13 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. 本日の内容 3 Falcon を触ってみた 2 1 「Fibers Are the Right Solution」振り返り Fiber とは?
Slide 14
Slide 14 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. Falcon を触ってみた 今回は下記の処理をするWeb アプリケーションを実装し、 puma と falcon で比較。 ● 外部(raksul.com)にリクエストを投げ、結果を返す ● 1秒 sleep する abを利用して、req/sec を計測。 https://github.com/hkobayash/falcon-sample
Slide 15
Slide 15 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. コード class MyApp < Sinatra::Base get '/' do endpoint = Async::HTTP::URLEndpoint.parse('https://raksul.com') client = Async::HTTP::Client.new(endpoint) response = client.get('/') response.read ensure client.close end get '/sleep' do Async::Task.current.sleep(1) 'Wake Up!' end end
Slide 16
Slide 16 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. 外部にリクエストを投げる場合 concurrency 32 64 128 256 512 puma / 1process 128 thread 238.56 req/sec 265.14 req/sec 283.31 req/sec 291.17 req/sec 289.09 req/sec falcon / 1process 176.54 req/sec 190.46 req/sec 189.21 req/sec 188.92 req/sec 181.84 req/sec
Slide 17
Slide 17 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. 1秒 sleep する場合 concurrency 32 64 128 256 512 puma / 1process 128 thread 31.95 req/sec 63.84 req/sec 127.57 req/sec 127.42 req/sec 127.55 req/sec falcon / 1process 31.92 req/sec 63.78 req/sec 127.39 req/sec 252.63 req/sec 502.04 req/sec
Slide 18
Slide 18 text
AFTER RubyKaigi 2019 © RakSul,Inc. All Rights Reserved. まとめ ● コードそのままで falcon を使うのは(まだ)難しそう ● ドキュメントや例が(まだ)少ないため、どのようなコードを書け ば効率がよいのかよくわからい ● Auto fiber にも期待
Slide 19
Slide 19 text
© RakSul,Inc. All Rights Reserved. AFTER RubyKaigi 2019 仕組みを変えれば、 世界はもっと良くなる Our Vision