gazelle & cpan modules for performance. shibuya.pm tech talk #17 lt
TRANSCRIPT
![Page 1: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/1.jpg)
Gazelle & CPAN modules for Performance
長野雅広 @kazeburoShibuya Perl Mongers テクニカルトーク #17 LT
![Page 2: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/2.jpg)
Me
• 長野雅広(Masahiro Nagano)
• @kazeburo
• Mercari, Inc.
• Operations Engineer, Site Reliability
• PHP, YAML
![Page 3: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/3.jpg)
Gazellehttps://www.!ickr.com/photos/ckindel/424610604/
![Page 4: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/4.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/5.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/6.jpg)
なぜ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](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/7.jpg)
Gazelleの使いどころ• ISUCON!!!1
• ソーシャルゲーム、広告、大規模サイト• 高度に最適化されたWebアプリケーション
• 普通に使えます
![Page 8: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/8.jpg)
実績
• livedoorBlog
• 日本最大級のBlogサービス
• Starletからの移行でCPU使用率が1~3%下がった
![Page 9: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/9.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/10.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/11.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/12.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/13.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/14.jpg)
Cookie::BakerCookie::Baker::XS
![Page 15: Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/15.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/16.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/17.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/18.jpg)
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](https://reader030.vdocuments.site/reader030/viewer/2022032503/55c11ea3bb61eb362a8b456d/html5/thumbnails/19.jpg)
使ってくださいまし