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
某人気アプリのクローンをPerlで作る(予定
Search
mackee
July 12, 2014
Programming
0
910
某人気アプリのクローンをPerlで作る(予定
Yop - Yo private -
kuiperbelt + Amon2
mackee
July 12, 2014
Tweet
Share
More Decks by mackee
See All by mackee
マイクロサービス化を利用した Goへの移行事例
mackee
0
26
PerlでつくるフルスクラッチWebAuthn/パスキー認証 / Demonstration of full-scratch WebAuthn/Passkey Authentication written in Perl
mackee
3
1.8k
SRE定例やその辺の取り組みをアプリケーションエンジニア目線で語る / "Observe" about SRE Meeting by Application Engineer
mackee
0
1.7k
TinyGoで使えるORM sqllaの 紹介とTinyGoで使えるようにするための工夫
mackee
0
490
Go向けORM sqllaの紹介と JOINやUNIONを含んだクエリの扱い方
mackee
0
820
デプロイ今昔物語 〜CGIからサーバーレスまで〜 / The deployment technics
mackee
10
9.8k
E2Eテストから負荷試験シナリオを作ってみた / Why do we make a scenario of load testing from E2E testing scenarios
mackee
2
4.6k
じわじわとPerlからGoに移行しようとしている俺達のマイクロサービシーズの紹介 / The migrating to microservices in Go from Monolith in Perl
mackee
2
2.7k
Mojoliciousで書いて理解するhotwireの仕組み
mackee
0
4.7k
Other Decks in Programming
See All in Programming
try!Swift Tokyo 2024 参加報告 LT
akidon0000
1
190
Git Rebase
bkuhlmann
11
1.6k
Site Reliability Engineering for GMO
pyama86
6
910
VSCodeでのDatabricks開発もお勧めしたい/I would also recommend Databricks development with VSCode.
kazumain
0
240
Prepare for Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
420
try! Swift Tokyo 初参加報告LT
hinakko2
0
190
GitHub Actionsで泣かないためにやっておきたい設定 / Recommended GHA settings to avoid crying
pinkumohikan
3
480
try! Swift Tokyo 2024 参加報告 / try! Swift Tokyo 2024 Report
hironytic
0
170
HUIT新歓2024「競技プログラミング、やってみませんか?」
slephy2784
1
250
両面どころかインフラもTSでできるよ ~ 全方位TypeScriptによるプロダクト開発 ~
myfinder
9
3.2k
#phpcon_odawara オープン・クローズドなテストフィクスチャを求めて / open closed test fixtures
77web
3
210
SwiftUI Performance 不要なViewの再描画と更新を抑える
bigamitiongit
1
150
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
59
7.1k
A Tale of Four Properties
chriscoyier
150
22k
A designer walks into a library…
pauljervisheath
199
23k
The World Runs on Bad Software
bkeepers
PRO
61
6.7k
[RailsConf 2023] Rails as a piece of cake
palkan
22
3.9k
The Mythical Team-Month
searls
215
42k
BBQ
matthewcrist
80
8.7k
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
What the flash - Photography Introduction
edds
64
11k
Git: the NoSQL Database
bkeepers
PRO
422
63k
We Have a Design System, Now What?
morganepeng
42
6.7k
How GitHub (no longer) Works
holman
304
140k
Transcript
༗໊ΞϓϦͷΫϩʔϯΛ PerlͰ࡞Δʢ༧ఆ @mackee_w Mishima.pm 2014-07-12
୭ • @mackee_w / Ϛίϐʔ / ϑΝογϣϯϙΤϜ • Yokohama.pm ෭Ϧʔμʔ
• ໘ന๏ਓ ઌGoΛΔͱ͍͕ͬͨPerlΛ ΊΔͱݴ֮ͬͨ͑ͳ͍ͧͱ͍͏ࢥ͍
༗໊ΞϓϦͱ
͜Ε͔ͳʁ
͜Ε͔ͳʁ
͜Ε͔ͳʁ
͜ΕɾɾɾɾͰ͢
Yoͱ ໊લΛࢦఆͯ͠ʮYoʯͱૹΕΔΞϓϦ ϋΠίϯςΩετ͔ͭάϩʔόϧͰΦϙνϡχςΟͳίϛϡχέʔ γϣϯΛ࣮ݱ͢ΔࠓϋΠτΡΤϯςΟٴͼौ୩ք۾ʹਓؾͷSNS ΞϓϦέʔγϣϯ ࠓ͔ΒpapixʹૹΓ·͢
ͳͥYoΛͭ͘Δ͔ • ͷۈΊ͍ͯΔ໘ന๏ਓʹϓϥΠϕʔτ GyazoϓϥΠϕʔτGistͳͲطଘαʔϏεͷ ΦϯϓϨ൛ʢʁʣΈ͍ͨͳͷΛαΫοͱॻ͍ ͯஔ͍͍ͯ·͢ • YoͰίϛϡχέʔγϣϯऔΕΔͳΒΫϩʔζ υͳYoधཁ͕͋ΔͷͰʁ
Yo private
ུͯ͠Yop
·ͩදଆ࡞ͬͯΔͱ͜Ζ αʔόαΠυΛհ
Yoʹඞཁͳཁૉ • ໊લΛܾΊΔ(࠷ۙύεϫʔυೖͬͨ • ϓογϡ௨
໊લΛܾΊΔ • ͳΜ͔ೖྗͯ͠Β͍APIͳΓϑΥʔϜͳΓͰ ૹͬͯΒ͏ • ૹ͖ͬͯͯΒ໊ͬͨલΛόϦσʔγϣϯ͠ ͯDBʹಥͬࠐΉ • ͦΕΛΑ͠ͳʹҾ͚ΔΑ͏ʹ͢Δ
׳Ε͍ͯΔAmon2Ͱ ΜͰΈΔ
amon2-setup.pl Yop
Yop::Web::Dispather
Yop::Model::Member
t/model/member.t
͍ͬͯΔCPANϞδϡʔϧ • JSON::Types • Data::Validator • Time::Piece::Plus • Furl
ςετͷ΄͏ • Test::Time • Test::Fatal • Test::Mock::Guard • Path::Tiny
PerlͰϓογϡ௨ • Protocol::Websocket • Amon2ʹWebSocketϓϥάΠϯ͋Δ • PocketIO • Socket.IOͷผ࣮
Perl + ඇಉظ = AnyEvent • ίωΫγϣϯΛͭͳ͗ͬͺͳ͠ʹ͠ͳ͍ͱ͍ ͚ͳ͍ͷͰඇಉظඞਢ • ͦ͜ͰAnyEvent
• ͔͠͠AnyEventʹ᠘͕……
ίʔϧόοΫࠈ • AΛͬͨΒBΛͬͯͦΕ͕͓ΘͬͨΒCΛ ͬͯ…… • ίʔϧόοΫ͕ωετ͍ͯͬͯ͠Α͘Θ͔Β ͳ͍͜ͱʹͳΔʂ • Promise::Defferedͱ͍͏ճආํ๏͋Δ
AnyEvent + DBI = blocking… • DBIΛͦͷ··͏ͱϒϩοΩϯάIOͳͷͰ વΠϕϯτϧʔϓΛࢭΊΔ • WebSocketͩͱίωΫγϣϯҡ࣋Ͱ͖ͳ͔ͬ
ͨΓ͢Δ • ࣮ࡍͦΜͳʹͳΒͳ͍આ͋Δ
DBI on AnyEvent • AnyEvent::DBI • ͦͷ໊ͷ௨Γ • forkΛར༻ τϥϯβΫγϣϯ͕ࠞ͟Δ
• AnyEvent::DBI::MySQL • MySQLઐ༻ • txn͑ͳ͍ؾ͕͢ΔΜͰ͚͢ΕͲͲ͏ͳΜͰ͠ΐ͏͔
Gearmanͱ͔ʹͤΔ • Gearman δϣϒΩϡʔϫʔΧʔ • Gearman::ClientϒϩοΩϯάIO • AnyEvent::Gearman::ClientMooseͷґଘ࣋ ͪͳͷͰ͋Μ·Γ͍ͨ͘ͳ͍ײ͕͡க͠· ͢(࣋පͷMooseΞϨϧΪʔʁ
ඇಉظPerl͔Β͍ग़͢ʂ
Kuiperbelt Asyncronous Protocol Proxy
Kuiperbeltͱ • ಉظϞσϧ(preforkϞσϧ)ͷΞϓϦέʔγϣ ϯͱ࿈ܞ͢Δ͜ͱΛఆͨ͠ඇಉظϓϩτί ϧͷίωΫγϣϯϓʔϧ • ࠓͷͱ͜ΖHTTP Stream(Long polling/ Comet)ͷΈରԠ
• Golang github.com/mackee/kuiperbelt
ίωΫγϣϯ࣌
kuiperbelt Yop(Amon2) PAPIX
kuiperbelt Yop(Amon2) PAPIX ᶃTUSFBNDPOOFDU
kuiperbelt Yop(Amon2) PAPIX ᶃTUSFBNDPOOFDU ᶄ66*%ΛؚΜͩ+40/
kuiperbelt Yop(Amon2) PAPIX ᶃTUSFBNDPOOFDU ᶄ66*%ΛؚΜͩ+40/ ᶅKPJOVVJE66*%OBNF1"1*9
YopΛૹΔͱ͖
kuiperbelt Yop(Amon2) PAPIX MOZNION
kuiperbelt Yop(Amon2) PAPIX MOZNION ᶃTFOEUBSHFU@OBNF1"1*9
kuiperbelt Yop(Amon2) PAPIX MOZNION ᶃTFOEUBSHFU@OBNF1"1*9 ᶄTUSFBNTFOE66*%1"1*9ͷ66*%
kuiperbelt Yop(Amon2) PAPIX MOZNION ᶃTFOEUBSHFU@OBNF1"1*9 ᶄTUSFBNTFOE66*%1"1*9ͷ66*% ᶅDPOOFDUΛͬͯNFTTBHF:PQΛૹ৴
PerlͰॻ͖͍͢ͱ͜ΖPerl ͦͷଞؙ͛
σόοάڥ • ҎԼͷͷΛProcletͰଋͶΔ • Yop(Starlet) • kuiperbelt • Ҏ্ͷͷΛҰͭͷϙʔτͰड͚ΔͨΊʹ Plack::App::Proxy(Twiggy)
• ຊ൪ڥnginxͰଋͶΔ͔ͳ͋ • ଋͶΔͷΫϩεΦϦδϯରԠΊΜͲ͍ͷͰ
·ͱΊ • ϑϩϯτ͕શવ࡞Εͯͳ͍ͷͰؼͬͨΒຊؾ ग़͢ • Component / Vue.js / Polymerͱ͔͍͍ͨ
• Amon2Ͱ͕͢ࣄಉ͡Α͏ͳײ͡+ͷΞϨ ϯδͱݴ͏ײ͡Ͱ͢ɻڵຯ͕͋ΕͲ͏ͧɻ ͋ͱͰ্͛Δ