Yop - Yo private - kuiperbelt + Amon2
༗໊ΞϓϦͷΫϩʔϯΛPerlͰ࡞Δʢ༧ఆ@mackee_w Mishima.pm 2014-07-12
View Slide
୭• @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͔Β͍ग़͢ʂ
KuiperbeltAsyncronous Protocol Proxy
Kuiperbeltͱ• ಉظϞσϧ(preforkϞσϧ)ͷΞϓϦέʔγϣϯͱ࿈ܞ͢Δ͜ͱΛఆͨ͠ඇಉظϓϩτίϧͷίωΫγϣϯϓʔϧ• ࠓͷͱ͜ΖHTTP Stream(Long polling/Comet)ͷΈରԠ• Golang github.com/mackee/kuiperbelt
ίωΫγϣϯ࣌
kuiperbeltYop(Amon2)PAPIX
kuiperbeltYop(Amon2)PAPIX ᶃTUSFBNDPOOFDU
kuiperbeltYop(Amon2)PAPIX ᶃTUSFBNDPOOFDUᶄ66*%ΛؚΜͩ+40/
kuiperbeltYop(Amon2)PAPIX ᶃTUSFBNDPOOFDUᶄ66*%ΛؚΜͩ+40/ᶅKPJOVVJE66*%OBNF1"1*9
YopΛૹΔͱ͖
kuiperbeltYop(Amon2)PAPIXMOZNION
kuiperbeltYop(Amon2)PAPIXMOZNIONᶃTFOEUBSHFU@OBNF1"1*9
kuiperbeltYop(Amon2)PAPIXMOZNIONᶃTFOEUBSHFU@OBNF1"1*9ᶄTUSFBNTFOE66*%1"1*9ͷ66*%
kuiperbeltYop(Amon2)PAPIXMOZNIONᶃ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Ͱ͕͢ࣄಉ͡Α͏ͳײ͡+ͷΞϨϯδͱݴ͏ײ͡Ͱ͢ɻڵຯ͕͋ΕͲ͏ͧɻ͋ͱͰ্͛Δ