Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TV視聴参加型システムを支える Socket.IOクラスタの裏側

TV視聴参加型システムを支える Socket.IOクラスタの裏側

Tsuyoshi Torii

July 05, 2013
Tweet

More Decks by Tsuyoshi Torii

Other Decks in Technology

Transcript

  1. ࣗݾ঺հ •  ௗډɹ߶࢘(@toritori0318)   •  גࣜձࣾόεΩϡʔϧ   –  WebΞϓϦέʔγϣϯΤϯδχΞʁ  

    •  Πϯϑϥʗӡ༻อकʗetc…   –  Perl  /  Node.js  /  Python   •  Blog   -­‐  http://d.hatena.ne.jp/toritori0318/   -­‐  http://d.hatena.ne.jp/tori243/  
  2. SonicShooter͕ग़དྷΔ·Ͱ •  ཁ݅   –  ϦΞϧλΠϜʹ༑ୡͷ৘ใΛڞ༗͍ͨ͠   –  ϒϩʔυΩϟετ഑৴͍ͨ͠  

    –  ൚༻ੑ   –  Ϋϩεϒϥ΢βରԠʗΞϓϦରԠ   –  ͳΔ΂҆͘͘   –  εέʔϧ   •  ؆୯ʹ্͛Լ͛Ͱ͖ΔΑ͏ʹ   –  ࠷௿Ͱ΋ಉ࣌20ສϢʔβʂʁ
  3. Socket.IO •  Ϛϧντϥϯεϙʔτ   –  Ϋϩεϒϥ΢β   –  iPhone  /

     Android  ΞϓϦ   •  ίωΫγϣϯʗೝূ؅ཧ   •  ࠶઀ଓॲཧ   •  ϧʔϜ؅ཧ   •  ϒϩʔυΩϟετ  
  4. Socket.IO •  ໰୊   –  ̎ճΞΫηε໰୊   –  εέʔϧΞ΢τ  

    •  RedisStore   •  ϓϩΩγ   –  HAProxy   –  Nginx   –  Bouncy  /  http-­‐proxy   •  ಠࣗϊʔυ؅ཧ  
  5. SonicShooterػೳҰཡ •  Ϣʔβʗೝূ؅ཧ   •  ϑϨϯυάϥϑ؅ཧ   •  Push  

    –  ϑϨϯυ഑৴   –  ϒϩʔυΩϟετ഑৴   –  ύϒϦοΫϏϡʔΠϯά഑৴   •  Pull   –  ϑϨϯυλΠϜϥΠϯ   –  ϒϩʔυΩϟετ   –  ύϒϦοΫϏϡʔΠϯά  
  6. γεςϜ֓ཁ •  AWS   –  APIαʔό   •  Node.js  0.8.x

     /  express  2.x   –  ιέοταʔό   •  Node.js  0.8.x  /Socket.IO  0.9.x   –  όοναʔό   –  DB   •  DynamoDB/Redis
  7. 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ʜ ③ ② ① %#ʹอ࣋ ④
  8. 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 ② ④ ③ ①
  9. 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 ③ ③ ② ①
  10. 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
  11. Socket   01   API Socket   02   Socket

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

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

      03 Batch 01 02 03 ϊʔυ௥Ճ࣌ 04 Socket   04 SonicShooter ιέοταʔό܈ APIαʔό܈ όοναʔό܈ DB インスタンスタグと ステータスで判断͠ɺ ࠩ෼Λ%#ొ࿥ ৽ͨʹίωΫγϣ ϯϓʔϦϯά͢Δ ① ② ③
  14. ϝϞɿϊʔυ࡟আ࣌ͷϑϩʔ   •  ΫϥΠΞϯτ   1.  ϊʔυ͕མͪͯίωΫγϣϯ੾அ   2.  ϑΣΠϧΦʔόʔॲཧʢ܁Γฦ͠ʣ

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

      3.  ҰཡͱϔϧενΣοΫ͔Β؅ཧDB΁ͷ௥Ճʗ࡟আͷ ൑அΛߦ͏   •  APIαʔό   1.  socket.ioίωΫγϣϯϦετʹ௥Ճ͠ɺ৽ن઀ଓ  
  16. ิ଍ɿ઀ଓࣦഊʗ࠶઀ଓͷྲྀΕ •  Socket.IO   –  ϋʔτϏʔτ͕੾ΕΔ   •  <disconnect>Πϕϯτ  

    –  reconnection  delay  ×  max  reconnection  attempts   •  <reconnecting>Πϕϯτ   –  max  reconnection  attempts  ʹ౸ୡ   •  <reconnect_failed>Πϕϯτ   •  SonicShooter(reconnect_faildൃੜޙ)   –  ϊʔυऔಘAPI΁ϦΫΤετ   •  …
  17. ಉ࣌ඦສϢʔβ઀ଓ •  ͦͷͨΊͷࢪࡦ   –  APIαʔόͱιέοταʔόͷ݁߹౓ΛԼ͛Δ   •  ௚઀SocketΛͭͳ͙ͷͰ͸ͳ͘ɺؒʹϦϨʔαʔόΛڬΉ  

    •  δϣϒΩϡʔ   •  Amazon  SNS   –  σʔλετΞ   •  TwemproxyʴRedis   •  Riak  
  18. ·ͱΊ •  TvͱεϚʔτϑΥϯ͕ϦΞϧλΠϜʹ࿈ಈ͢Δϓ ϥοτϑΥʔϜ   •  Socket.IOͰ΋े෼ʹେྔͷ઀ଓ͕ࡹ͚Δ   –  ޻෉͸ඞཁ

      •  ϦΞϧλΠϜʹΑΔฐ֐Λೝ͓ࣝͯ͘͠   –  ΞΫηε͕ूத͠ͳ͍޻෉   –  ιέοτʹܨ͕Βͳ͔ͬͨΫϥΠΞϯτ΋ٹ͏खஈ Λ༻ҙ͓ͯ͘͠