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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

Avatar for Tsuyoshi Torii

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Ͱ΋े෼ʹେྔͷ઀ଓ͕ࡹ͚Δ   –  ޻෉͸ඞཁ

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