gazelle & cpan modules for performance. shibuya.pm tech talk #17 lt

19
Gazelle & CPAN modules for Performance 長野雅広 @kazeburo Shibuya Perl Mongers テクニカルトーク #17 LT

Upload: masahiro-nagano

Post on 05-Aug-2015

3.310 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

Gazelle & CPAN modules for Performance

長野雅広 @kazeburoShibuya Perl Mongers テクニカルトーク #17 LT

Page 2: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

Me

• 長野雅広(Masahiro Nagano)

• @kazeburo

• Mercari, Inc.

• Operations Engineer, Site Reliability

• PHP, YAML

Page 4: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

Gazelle

• Plack Handler / PSGI Server

• HTTP/1.1 Web Server

• Starlet compatible / Hot Deploy

• Fast

Page 5: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

Benchmark

0

100000

200000

300000

400000

starman Starlet Gazelle

965776056243588

334752

9202748888

hello world counter

https://gist.github.com/kazeburo/71603b4bc0994e2222b4

Page 6: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

なぜGazelleは速いのか• Simple Architecture

• Prefork

• no keepalive support

• Mostly written in XS

• Ultra fast HTTP processing using picohttpparser

• Use accept4(2) and writev(2)

Page 7: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

Gazelleの使いどころ• ISUCON!!!1

• ソーシャルゲーム、広告、大規模サイト• 高度に最適化されたWebアプリケーション

• 普通に使えます

Page 8: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

実績

• livedoorBlog

• 日本最大級のBlogサービス

• Starletからの移行でCPU使用率が1~3%下がった

Page 9: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

WWW::Form::UrlEncodedWWW::Form::UrlEncoded::XS

parser and builder for application/x-www-form-urlencoded

Page 10: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

s_id=1&type=foo&message1=foo+bar+baz+hoge+hoge+hoge+hoge+hogehogemessage2=

%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%A7%E3%81%99%E3%82%88%E3%83%BC

(s_id => 1, type => 'foo', message1 => 'foo bar baz hoge hoge hoge hoge

hogehoge', message2 => '日本語ですよー')

parse build

Page 11: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

Rate wwwform_pp wwwform_xs urlencode_xswwwform_pp 21764/s -- -90% -91%wwwform_xs 227555/s 946% -- -1%urlencode_xs 229375/s 954% 1% --

parseのベンチマークで9.5倍* URL::Encode(::XS)は若干互換性がない

Page 12: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

Rate use_uri concat_escape build_xsuse_uri 23640/s -- -32% -97%concat_escape 34796/s 47% -- -96%build_xs 843158/s 3467% 2323% --

buildのベンチマークで35倍

Page 13: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

W::F::UE::XS使いどころ• Query String付きのリクエストが非常に多いところ

• Plack::Requestと互換性あるので置き換え可能

• Query String付きのURLを大量に生成する場合

• URL::Builderがおすすめ

Page 14: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

Cookie::BakerCookie::Baker::XS

Page 15: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

my $cookie = bake_cookie('foo', { value => 'val', path => "test", domain => '.example.com', expires => '+24h'});$headers->push_header(‘Set-Cookie’,$cookie);

my $cookie_hashref = crush_cookie($headers->header(‘Cookie’));

build

parse

Page 16: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

Benchmark: running pp, xs for at least 1 CPU seconds... crush_pp: 1 wallclock secs @ 16592.59/s (n=17920) crush_xs: 1 wallclock secs @ 182043.81/s (n=191146) Rate pp xscrush_pp 16593/s -- -91%crush_xs 182044/s 997% --

Benchmark: running pp, xs for at least 1 CPU seconds... crush_pp: 2 wallclock secs @ 201749.06/s (n=213854) crush_xs: 0 wallclock secs @ 1042617.50/s (n=1251141) Rate pp xscrush_pp 201749/s -- -81%crush_xs 1042618/s 417% --

## length($cookie) == 675

## length($cookie) == 17

Page 17: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

C::B使いどころ• Cookie::Bakerはすでに[email protected]

TRIALで使われている

• Cookieのparseだけを行うシンプルなモジュールがなかった

• Cookie::Baker::XSを入れる事で”parse”が高速化

Page 18: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

C::B::XS使いどころ

• Cookieがすごくたくさん付いて来るサイト

• Google Analytics, Ninja, Ad, Ad tracking, Session and more

Page 19: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT

使ってくださいまし