Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The tale of kuiperbelt ...and Perl.
Search
mackee
July 14, 2017
Programming
1
2.4k
The tale of kuiperbelt ...and Perl.
吉祥寺.pm11
mackee
July 14, 2017
Tweet
Share
More Decks by mackee
See All by mackee
ワンバイナリWebサービスのススメ
mackee
10
7.8k
tanukistack ライブコーディング / tanukistack live-coding
mackee
0
100
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
640
perl for shell, awk and sed programmers
mackee
2
2.2k
今更GoのWebフレームワークを作ろうとしているワケ / Why am I trying to create a Go web framework now?
mackee
1
610
database/sqlでNullを扱う歴史とsql.Null[T]の登場 / sql.Null[T] history
mackee
0
500
マイクロサービス化を利用した Goへの移行事例
mackee
0
630
PerlでつくるフルスクラッチWebAuthn/パスキー認証 / Demonstration of full-scratch WebAuthn/Passkey Authentication written in Perl
mackee
3
4.5k
SRE定例やその辺の取り組みをアプリケーションエンジニア目線で語る / "Observe" about SRE Meeting by Application Engineer
mackee
0
1.9k
Other Decks in Programming
See All in Programming
Spring gRPC で始める gRPC 入門 / Introduction to gRPC with Spring gRPC
mackey0225
2
520
複数アプリケーションを育てていくための共通化戦略
irof
10
4k
git worktree × Claude Code × MCP ~生成AI時代の並列開発フロー~
hisuzuya
0
250
Effect の双対、Coeffect
yukikurage
5
1.4k
GoのGenericsによるslice操作との付き合い方
syumai
2
680
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
140
統一感のある Go コードを生成 AI の力で手にいれる
otakakot
0
3k
関数型まつり2025登壇資料「関数プログラミングと再帰」
taisontsukada
2
840
C++20 射影変換
faithandbrave
0
500
コード書くの好きな人向けAIコーディング活用tips #orestudy
77web
3
330
Team topologies and the microservice architecture: a synergistic relationship
cer
PRO
0
950
アンドパッドの Go 勉強会「 gopher 会」とその内容の紹介
andpad
0
250
Featured
See All Featured
Docker and Python
trallard
44
3.4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Scaling GitHub
holman
459
140k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Making Projects Easy
brettharned
116
6.3k
Raft: Consensus for Rubyists
vanstee
140
7k
What's in a price? How to price your products and services
michaelherold
245
12k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
It's Worth the Effort
3n
184
28k
The Cost Of JavaScript in 2023
addyosmani
51
8.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
660
Transcript
The tale of kuiperbelt …and Perl. ٢ࣉ.pm11 2017-07-13 macopy a.k.a
@mackee_w
Yokohama.pmͷ ΄͏͔Βདྷɾɾɾ
(໘നͳͷͰຊຊʹ) ח͔Βདྷ·ͨ͠
YAPC::Fukuoka 2017 HAKATA
༧ఆͰόʔδϣϯݻఆͨ͠ CPANϞδϡʔϧͱͦͷཧ༝ Έ͍ͨͳΛ͢Δ༧ఆͰͨ͠ ͕ফۃతͰ໘ന͘ແͦ͞͏ͳ ͷͰkuiperbeltͷΛ͠·͢
kuiperbeltͱ github.com/mackee/kuiperbelt
݁ہͳΜͶΜ
WebSocketͱHTTP1.1ͷ ૬ޓมϓϩΩγαʔό
kuiperbeltͷׂ • WebSocketͷίωΫγϣϯͷҡ࣋ • ΞϓϦέʔγϣϯαʔό͕ӬଓతίωΫγϣ ϯΛ࣋ͭ͜ͱͷݞΘΓΛ͢Δ • ӬଓతίωΫγϣϯͷෛՙࢄ • ΑΓݫີʹݴ͑ෛՙࢄͷΈ
kuiperbeltͷ࠾༻ྫ • ࠓͷͱ͜Ζݴ͑Δ͕ͭͳ͍ • ͔ࣾ͠͠Ͱݕ౼ٴͼݕূਐΜͰ͍Δͱͩ ͚ਃ͋͛͠·͢ɻࠓͷͱ͜Ζ͑ͯͦ͏
ͱ͜ΖͰkuiperbeltͬͯGoͩΑͶ
kuiperbelt loves Perl
kuiperbelt loves Perl5(like languages) • kuiperbelt͋͘·ͰσʔϞϯɻԿͰॻ͔Ε͍ͯΔ͔ҙ ࣝ͢Δ͜ͱͳ͍ • ΠϯλʔϑΣΠεHTTP APIɻcurlͰͳΜͰୟ͚Δ
͠ड͚ΒΕΔɻυΩϡϝϯτͰnetcatΛ͍ͬͯΔ • Perl5WebAppͷऑΛิ͏ͨΊʹੜ·Εͨͷ͕ kuiperbelt
Perl5WebAppͷऑͱʁ kuiperbeltͷੜ·ΕͨॠؒΛͨͲΔ
࡞Ζ͏ͱࢥͬͨલ ۭલͷAnyEventϚΠϒʔϜ • Mishima.pm#01ͰAnyEventͱ͔δϣϒΩϡʔ ͷͰΓ্͕Δ • Hachioji.pmͰYanchaͱ͍͏νϟοτΞϓϦͷ ։ൃ͕ਐΜͰ͍ͨ(AnyEventͰWebSocketΛ ड͚Δߏͩͬͨ)
Perl5ͰWebSocketΛड͚Δʹ • Net::WebSocket, Mojo::WebSocket… • ΠϕϯτۦಈϥΠϒϥϦ • TwiggyͳͲΛͬͯҰͭͷϓϩηεͰෳ ͷଓΛ࣋ͯΔ
ΠϕϯτۦಈͷσϝϦοτ • ϒϩοΩϯάಈ࡞Λߦ͏ॲཧ͕ॻ͚ͳ͍ • ී௨ʹDBI͏ͱ͔(τϥϯβΫγϣϯͱ͔) • ී௨ʹϑΝΠϧIO͏ͱ͔ • ී௨ʹAPIϦΫΤετ͢Δͱ͔ •
શ͕ͯίʔϧόοΫܗࣜͰॻ͘Α͏ʹͳΔ
Q: ԿނAnyEvent͕ඞཁ͔ʁ ↓ A: Ұͭͷϓϩηε͕ෳͷ ଓΛ࣋ͯͳ͍ͱͬͯΒΕͳ ͍(C10k Problem)
ී௨ͷPreforkϞσϧͳ WebAppΛॻ͖ͭͭ ͪΐͬ͜ͱ͚ͩWebSocketʹ Ͱ͖ͳ͍͔
WebSocketͷଓΛ࣋ͭ෦ ͚ͩʮ୭͔ʯʹͬͯΒ͑ Ε͍͍ͷͰͳ͍͔ʁ ͦͷਓͱHTTPͰ͠ΌΕ ී௨ʹPerlͰϦΞϧλΠϜΞ ϓϦ͕ॻ͚Δ
͓खܰʹϚϧνεϨουΛॻ ͚Δݴޠͱͯ͠GoΛ࠾༻
2014-06-21
͔͜͠͠ͷͱ͖WebSocket ͦ͠͏ͩͬͨͷͰ Server Sent Eventతͳϓϩτ ίϧͰ࣮
2015-10-21 WebSocketͰશ໘తʹॻ͖͢
2015-10-21 WebSocketͰશ໘తʹॻ͖͢ ࣮Perlͷίʔυ͕͋Γ·͢
“sample psgi app” • ϑϩʔͳͲΛఆٛͯ͠Έͨͷͷ࣮ࡍͷΞϓ Ϧॻ͍ͯΈͳ͍ͱ͜ΕͰ͍͚Δ͔͔ΒΜͳ ͱͳͬͨ • ୈҰݴޠ͕PerlͳͷͰϖϥΠνPSGIͰνϟο τΞϓϦΛॻ͍ͯΈͯػೳ͢Δ͔Λॻ͍ͯΈ
ͨ
ͦͷޙ • ࣾͰʮͬͯ͘ΕʙʯͬͯԿճ͔ϓϨθϯ͢ Δ • ࣮ࡍʹݕ౼͕࢝·ΓಋೖΞϓϦͷϑΟʔυόο ΫΛड͚ΔܗͰػೳՃ • strict broadcast
• application/octet-stream
ͦͷޙ • fujiwara͞ΜʹϕϯνϚʔΫॻ͍ͯΒͬͯ νϡʔχϯάͯ͠Β͏ • ͦΕΛݟͯଞͷϓϩδΣΫτͰಋೖݕ౼͕ ͕Δ
ࢥ1 -> ʹప͢Δ
ʮ͍ΒΜ͜ͱ͠ͳ͍ʯϝιου • ͋͘·Ͱʮଓཧʯʮϝοηʔδ৴ʯʹప ͢Δ • ϝοηʔδͷதಡ·ͳ͍ • ͍͜͠ͱΛΒͳ͍ • ͜͏ͳͬͨΒ͜͏ͳΔΈ͍ͨͳͷ͕૾͠
͍͢Έ
ࢥ2 -> Կ͔ʹґଘ͠ͳ͍
stretcher͔Βͷֶͼ • fujiwara͞ΜͷpullܕσϓϩΠπʔϧstretcher ʹ͓͍ͯσϓϩΠΛ͑Δ܅ͱtarballΛஔ͘ ͱ͜Ζ࣮ͳΜͰྑ͍ • Α͘consulͱS3͕ΘΕΔ͕ઐ༻Ͱͳ͍
kuiperbeltͷྫ • ෳͷkuiperbeltΛ͏߹ɺͲͷ kuiperbelt͕ಛఆͷଓΛ͍࣋ͬͯΔ͔ଓ ͞Εͨ࣌ʹϔομʹIPΞυϨεΛೖΕͯ͑ͯ ͘Δ • Α͘Redisʹ֨ೲ͍ͯ͠Δ͕memcachedͰ RDBͰͳΜͰྑ͍
୭͕ԿΛ͍࣋ͬͯΔ͔ΛΫϥΠΞ ϯτ͕அ͢ΔγϟʔσΟϯά • ketamaͳͲͷconsistent hashingΛ༻͍ͨ memcachedͷsharding͔Βண • ͔͠͠kuiperbeltखલʹLBΛஔ͘લఏͳͷ ͰͲ͜ͷkuiperbeltʹͭͳ͛Δ͔Λ੍ޚͰ͖ ͳ͍
-> ܨ͕ͬͨ࣌ʹWebAppଆʹ͑Δ
ӬଓతίωΫγϣϯΛΞϓϦΛ ͢ΔࣄʹΑΔԸܙ • ΞϓϦ͕ӬଓతίωΫγϣϯΛ࣋ͭͱߋ৽࣌ͳͲͰίωΫγϣ ϯ͕ΕΔ • ࠶ଓͰҰؾʹෛՙ͕͔͔ͬͨΓετϨε͕ཷ·ͬͨΓ͢ Δ • ͋·ΓϩδοΫΛ࣋ͨͣߋ৽Λ͢Δඞཁ͕ͳ͍αʔό͕ίωΫ
γϣϯΛ࣋ͭ͜ͱͰΞϓϦߋ৽࣌ʹஅ͕ى͜Βͳ͘ͳΔ • ͱ͍͏Θ͚ͰGoͷϓϩδΣΫτͰ࠾༻͞ΕΔΑ͏ʹͳΓ ·ͨ͠
૾͍͢͠Έ ґଘΛۃྗͳ͘͢͜ͱͰ ΘΕ͘͢͢Δ
ͦΜͳ͜ΜͳͰ
·ͱΊ • kuiperbeltͱ͍͏WebSocketΛҡ࣋ͯ͘͠ΕΔσʔϞϯΛ ॻ͍͍ͯ·͢ • kuiperbeltPerl5 loveͰ͢ɻผʹޙΖͳΜͰ͍͍͚Ε Ͳ࡞ऀతʹPerl5ͷͨΊʹॻ͔Ε͍ͯ·͢ • Ұ෦͚͍ͩ͠ͱ͜ΖΛΓग़͢ͷΧοίΠΠ
• ͬͯײΛฉ͔ͤͯ͘ΕʂʂɹຊޠυΩϡϝϯτॻ ͍ͨͧʂʂʂɹཔΉʂʂʂʂʂ