Slide 1

Slide 1 text

TVࢹௌࢀՃܕγεςϜΛࢧ͑Δ   Socket.IOΫϥελͷཪଆ 2013/06/24   Tsuyoshi  Torii  (@toritori0318)   Bascule  Inc.

Slide 2

Slide 2 text

ࣗݾ঺հ •  ௗډɹ߶࢘(@toritori0318)   •  גࣜձࣾόεΩϡʔϧ   –  WebΞϓϦέʔγϣϯΤϯδχΞʁ   •  Πϯϑϥʗӡ༻อकʗetc…   –  Perl  /  Node.js  /  Python   •  Blog   -­‐  http://d.hatena.ne.jp/toritori0318/   -­‐  http://d.hatena.ne.jp/tori243/  

Slide 3

Slide 3 text

ΞδΣϯμ 1.  MɾIɾEɾSͱ͸   2.  ϦΞϧλΠϜϝοηʔδϯάγεςϜ ʢSonicShooterʣͷத਎   3.  ͞ΒͳΔεςοϓ   4.  ·ͱΊ  

Slide 4

Slide 4 text

MɾIɾEɾS

Slide 5

Slide 5 text

MɾIɾEɾSͱ͸ μϒϧεΫϦʔϯࢹௌʹΑΔςϨϏ൪૊΁ͷ ࢀՃମݧΛఏڙ͢Δ ϚογϒɾΠϯλϥΫςΟϒɾΤϯλʔς ΠϯϝϯτɾγεςϜ

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

BloodyTube ݂ӷܕର߅Ϩʔεʹࢹௌऀ͕ࢀՃͯ͠൪૊Λߏ੒͢Δ׬શΠϯλϥΫςΟϒTV   όεΩϡʔϧͷاըɾఏڙɾ੍࡞     ࢹௌऀͷεϚϗ͔ΒͷࢀՃঢ়گ͕ςϨϏʹ൓ө͞ΕΔ   ༏উνʔϜʹ͸ϦΞϧళฮͰར༻Ͱ͖ΔPontaϙΠϯτ͕ఏڙ͞ΕΔ   B2O2O(Broadcast  to  Online  to  Offline)ϚʔέςΟϯάࢪࡦʹ΋νϟϨϯδ

Slide 8

Slide 8 text

SonicShooter

Slide 9

Slide 9 text

SonicShooter •  SonicShooter͕ग़དྷΔ·Ͱ   •  Socket.IOͷબఆ   •  SonicShooter機能一覧   •  γεςϜ֓ཁ   •  Ϋϥελ؅ཧͷ࢓૊Έ   •  Tips  

Slide 10

Slide 10 text

SonicShooter͕ग़དྷΔ·Ͱ •  ཁ݅   –  ϦΞϧλΠϜʹ༑ୡͷ৘ใΛڞ༗͍ͨ͠   –  ϒϩʔυΩϟετ഑৴͍ͨ͠   –  ൚༻ੑ   –  Ϋϩεϒϥ΢βରԠʗΞϓϦରԠ   –  ͳΔ΂҆͘͘   –  εέʔϧ   •  ؆୯ʹ্͛Լ͛Ͱ͖ΔΑ͏ʹ   –  ࠷௿Ͱ΋ಉ࣌20ສϢʔβʂʁ

Slide 11

Slide 11 text

Socket.IO

Slide 12

Slide 12 text

Socket.IO •  Ϛϧντϥϯεϙʔτ   –  Ϋϩεϒϥ΢β   –  iPhone  /  Android  ΞϓϦ   •  ίωΫγϣϯʗೝূ؅ཧ   •  ࠶઀ଓॲཧ   •  ϧʔϜ؅ཧ   •  ϒϩʔυΩϟετ  

Slide 13

Slide 13 text

Socket.IO •  ໰୊   –  ̎ճΞΫηε໰୊   –  εέʔϧΞ΢τ   •  RedisStore   •  ϓϩΩγ   –  HAProxy   –  Nginx   –  Bouncy  /  http-­‐proxy   •  ಠࣗϊʔυ؅ཧ  

Slide 14

Slide 14 text

SonicShooterػೳҰཡ •  Ϣʔβʗೝূ؅ཧ   •  ϑϨϯυάϥϑ؅ཧ   •  Push   –  ϑϨϯυ഑৴   –  ϒϩʔυΩϟετ഑৴   –  ύϒϦοΫϏϡʔΠϯά഑৴   •  Pull   –  ϑϨϯυλΠϜϥΠϯ   –  ϒϩʔυΩϟετ   –  ύϒϦοΫϏϡʔΠϯά  

Slide 15

Slide 15 text

γεςϜ֓ཁ •  AWS   –  APIαʔό   •  Node.js  0.8.x  /  express  2.x   –  ιέοταʔό   •  Node.js  0.8.x  /Socket.IO  0.9.x   –  όοναʔό   –  DB   •  DynamoDB/Redis

Slide 16

Slide 16 text

Consumer S2   Socket S2   API S2   Socket S2   Socket S2   Socket S2   API S2   API S2   API Consumer Consumer SonicShooter ιέοτ઀ଓཱ֬·Ͱ id userA host xxx.exam ple.com conn  id 111 ιέοταʔό܈ APIαʔό܈ ιέοταʔόυϝΠϯ FUDʜ ③ ② ① %#ʹอ࣋ ④

Slide 17

Slide 17 text

Consumer S2   Socket S2   API S2   Socket S2   Socket S2   Socket S2   API S2   API S2   API Consumer Consumer SonicShooter ϑϨϯυ഑৴ ͍͚ʔʂ ͍͚ʔʂ ͍͚ʔʂ ιέοταʔό܈ APIαʔό܈ id userB host yyy.exam ple.com conn  id 222 ̍ɽUser"ͷϑϨϯυ ʢ6TFS#ʣΛऔಘ ̎ɽ6TFS#ͷ઀ଓ৘ใΛऔಘ ̏ɽ઀ଓઌʹϝοηʔδૹ৴ User  A User  B ② ④ ③ ①

Slide 18

Slide 18 text

Consumer S2   Socket S2   API S2   Socket S2   Socket S2   Socket S2   API S2   API S2   API Consumer Consumer SonicShooter ブロードキャスト഑৴ CMͰʔ͢ CMͰʔ͢ ιέοταʔό܈ APIαʔό܈ CMͰʔ͢ CMͰʔ͢ User  A User  B ③ ③ ② ①

Slide 19

Slide 19 text

Consumer S2   Socket S2   API S2   Socket S2   Socket S2   Socket S2   API S2   API S2   API Consumer Consumer SonicShooter サーバ間通信 ιέοταʔό܈ APIαʔό܈ 4PDLFUJP User  A User  B

Slide 20

Slide 20 text

Ϋϥελ؅ཧͷ࢓૊Έ ಈతͳϊʔυ௥Ճʗ࡟আ

Slide 21

Slide 21 text

Socket   01   API Socket   02   Socket   03 Batch 01 02 03 ϊʔυ؅ཧ SonicShooter ιέοταʔό܈ όοναʔό܈ APIαʔό܈ DB ʮʯϊʔυʹ ͭͳ͛ͯͶ インスタンスのタグͱ εςʔλεで判断 ① ② a b c d

Slide 22

Slide 22 text

Socket   01   API Socket   02   Socket   03 Batch 01 02 03 ϊʔυ࡟আ࣌ SonicShooter ιέοταʔό܈ APIαʔό܈ όοναʔό܈ DB ʮʯϊʔυʹ ͭͳ͛ͯͶ c ① ② b a d e ίωΫγϣϯϓʔ ϧ͔Β࡟আ ③

Slide 23

Slide 23 text

Socket   01   API Socket   02   Socket   03 Batch 01 02 03 ϊʔυ௥Ճ࣌ 04 Socket   04 SonicShooter ιέοταʔό܈ APIαʔό܈ όοναʔό܈ DB インスタンスタグと ステータスで判断͠ɺ ࠩ෼Λ%#ొ࿥ ৽ͨʹίωΫγϣ ϯϓʔϦϯά͢Δ ① ② ③

Slide 24

Slide 24 text

ϝϞɿϊʔυ࡟আ࣌ͷϑϩʔ   •  ΫϥΠΞϯτ   1.  ϊʔυ͕མͪͯίωΫγϣϯ੾அ   2.  ϑΣΠϧΦʔόʔॲཧʢ܁Γฦ͠ʣ   3.  ઀ଓࣦഊͨ͠Β2ʹ໭Δ   •  όοναʔό   1.  ఆظతʹΫϥελͷҰཡΛऔಘ(EC2Πϯελϯεͷಠࣗλά)   2.  ҰཡͰऔಘͨ͠ϊʔυͷϔϧενΣοΫ   3.  ҰཡͱϔϧενΣοΫ͔Β؅ཧDB΁ͷ௥Ճʗ࡟আͷ൑அΛߦ͏   •  APIαʔό   1.  socket.ioίωΫγϣϯ؅ཧϦετ͔ΒίωΫγϣϯΛ࡟আ͠ɺ੾அ  

Slide 25

Slide 25 text

ϝϞɿϊʔυ௥Ճ࣌ͷϑϩʔ •  όοναʔό   1.  ఆظతʹΫϥελͷҰཡΛऔಘ(EC2Πϯελϯεͷ ಠࣗλά)   2.  ҰཡͰऔಘͨ͠ϊʔυͷϔϧενΣοΫ   3.  ҰཡͱϔϧενΣοΫ͔Β؅ཧDB΁ͷ௥Ճʗ࡟আͷ ൑அΛߦ͏   •  APIαʔό   1.  socket.ioίωΫγϣϯϦετʹ௥Ճ͠ɺ৽ن઀ଓ  

Slide 26

Slide 26 text

αʔόTips •  ಛఆͷϊʔυʹภΒͳ͍Α͏ʹɺϊʔυ ຖʹॏΈ෇͚Λ保持   – Socket.IOίωΫγϣϯ਺ʹΑΓܾఆ   – https://github.com/toritori0318/node-­‐sio.status

Slide 27

Slide 27 text

ΫϥΠΞϯτTips •  ࠶઀ଓॲཧ   – Socket.IOͷύϥϝʔλௐ੔   – reconnect_failedΠϕϯτͷύον   •  https://github.com/LearnBoost/socket.io/issues/652   – ผϊʔυ΁ͷϑΣΠϧΦʔόʔ  

Slide 28

Slide 28 text

ิ଍ɿ઀ଓࣦഊʗ࠶઀ଓͷྲྀΕ •  Socket.IO   –  ϋʔτϏʔτ͕੾ΕΔ   •  Πϕϯτ   –  reconnection  delay  ×  max  reconnection  attempts   •  Πϕϯτ   –  max  reconnection  attempts  ʹ౸ୡ   •  Πϕϯτ   •  SonicShooter(reconnect_faildൃੜޙ)   –  ϊʔυऔಘAPI΁ϦΫΤετ   •  …

Slide 29

Slide 29 text

͞ΒͳΔεςοϓ

Slide 30

Slide 30 text

࣮੷ ಉ࣌̎̌ສϢʔβ઀ଓ

Slide 31

Slide 31 text

ಉ࣌ඦສϢʔβ઀ଓ νϟϨϯδ

Slide 32

Slide 32 text

ಉ࣌ඦສϢʔβ઀ଓ •  ͦͷͨΊͷࢪࡦ   –  APIαʔόͱιέοταʔόͷ݁߹౓ΛԼ͛Δ   •  ௚઀SocketΛͭͳ͙ͷͰ͸ͳ͘ɺؒʹϦϨʔαʔόΛڬΉ   •  δϣϒΩϡʔ   •  Amazon  SNS   –  σʔλετΞ   •  TwemproxyʴRedis   •  Riak  

Slide 33

Slide 33 text

ಉ࣌ඦສϢʔβ઀ଓ •  ̍୆͋ͨΓͷ઀ଓ਺Λ্͛ΔͨΊͷࢪࡦ   – ClusterԽΛ࠾༻͢Δ   – ͋Δ͍͸Socket.IOΛ΍ΊΔ   •  Sock.js   •  Engine.io   –  Socket.io  1.0…ʁ  

Slide 34

Slide 34 text

·ͱΊ

Slide 35

Slide 35 text

·ͱΊ •  TvͱεϚʔτϑΥϯ͕ϦΞϧλΠϜʹ࿈ಈ͢Δϓ ϥοτϑΥʔϜ   •  Socket.IOͰ΋े෼ʹେྔͷ઀ଓ͕ࡹ͚Δ   –  ޻෉͸ඞཁ   •  ϦΞϧλΠϜʹΑΔฐ֐Λೝ͓ࣝͯ͘͠   –  ΞΫηε͕ूத͠ͳ͍޻෉   –  ιέοτʹܨ͕Βͳ͔ͬͨΫϥΠΞϯτ΋ٹ͏खஈ Λ༻ҙ͓ͯ͘͠  

Slide 36

Slide 36 text

એ఻

Slide 37

Slide 37 text

όεΩϡʔϧͰ͸   ΤϯδχΞΛืू͓ͯ͠Γ·͢

Slide 38

Slide 38 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠