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

スケール可能で運用しやすいWebSocketサーバ設計の課題と工夫 / The development of scalable and operating friendly WebSocket Server

mackee
August 23, 2018
18k

スケール可能で運用しやすいWebSocketサーバ設計の課題と工夫 / The development of scalable and operating friendly WebSocket Server

CEDEC 2018

mackee

August 23, 2018
Tweet

More Decks by mackee

Transcript

  1. εέʔϧՄೳͰ
    ӡ༻͠΍͍͢
    WebSocketαʔόઃܭͷ
    ՝୊ͱ޻෉
    CEDEC 2018
    ໘ന๏ਓΧϠοΫɹ୩࿬ ਅۏ

    View Slide

  2. ͜ͷηογϣϯͰ࿩͢͜ͱ
    • ैདྷͷWebΞϓϦέʔγϣϯͷ࡞ΓํͷԆ௕ઢ্Ͱ
    • ϛυϧ΢ΣΞΛ෇͚Ճ͑ΔܗͰWebSocketʹΑΔϦΞϧ
    λΠϜ௨৴Λ༻͍Δ
    • ήʔϜαʔόΛ։ൃɾӡ༻ͯ͠Έͨ
    ͦͷ࣌ͷ޻෉ͱۤ࿑Λ࿩͠·͢ɻ

    View Slide

  3. ͜ͷηογϣϯͰ࿩͞ΕΔ͜ͱ͸
    ౦ژϓϦζϯ1ͱ͍͏ϞόΠϧήʔϜͷࣄྫͰ͢
    1 https://tokyo-prison.kayac.com/

    View Slide

  4. ήʔϜͷಛੑ
    • ൒λʔϯ੍ɻλʔϯ͸Ұఆඵ਺͕ܦա͢Δͱऴྃ͢Δɻλʔϯ
    ಺͸͋Δఔ౓ࣗ༝ʹಈ͚Δ

    View Slide

  5. ήʔϜͷಛੑ
    • ϓϨΠϠʔ3ਓ vs ϓϨΠϠʔ3ਓ

    View Slide

  6. ߨԋऀͷόοΫάϥ΢ϯυ
    • ໘ന๏ਓΧϠοΫ ιʔγϟϧήʔϜࣄۀ෦
    • αʔόαΠυΛઐ໳Ͱ୲౰ɻΞϓϦέʔγϣϯίʔυΛॻ͕͘
    Πϯϑϥߏங΋΍Γɺӡ༻΋΍Δ
    • झຯ͸Perlͱ3DϓϦϯλվ଄ͱϛυϧ΢ΣΞ։ൃ

    View Slide

  7. ैདྷͷWebΞϓϦͰ
    ΞʔΩςΫνϟͰ
    WebSocketΛ༻͍Δͱ͖ͷ՝୊

    View Slide

  8. આ໌ͷॱ൪
    1. ैདྷͷWebΞϓϦͷߏ଄
    2. WebSocketΛ࢝Ίͱͨ͠ੜଘ࣌ؒͷ௕͍ηογϣϯΛѻ͏্Ͱ
    ͷ໰୊
    3. ղܾํ๏(kuiperbeltͷ঺հ)΁

    View Slide

  9. ͜͜Ͱ͍͏WebΞϓϦͱ͸
    • ΠϯλʔωοτΛ௨ͬͯओʹHTTPΛ࢖͏
    ΞϓϦέʔγϣϯ
    • HTTP͸·ͣϦΫΤετ͋Γ͖

    View Slide

  10. ͳͥHTTPΛ࢖͏ͷ͔
    • ͍͍ͩͨͷWebϑϨʔϜϫʔΫ͸HTTPΛѻ͏ͨΊʹ࡞ΒΕ͍ͯ
    Δ
    • curlΛ͸͡Ίͱͨ͠HTTPΛσόοά͢ΔͨΊͷπʔϧ΍஌ݟ͕
    ੈͷதʹ͋;Ε͍ͯΔ
    • HTTP͸εςʔτϨε͕લఏͷϓϩτίϧͳͷͰεέʔϧͤ͞Δ
    ͷʹ༗ར(ޙड़)

    View Slide

  11. εςʔτϨε͔ͩΒԣʹ૿΍ͤΔ
    Keep-AliveͰTCP઀ଓ࢖͍ճ͠Λߦ͏৔߹΋͋Δ͕ɺHTTPͷ૚͔ΒݟΕ͹ಉ͡

    View Slide

  12. εςʔτϨε͔ͩΒԣʹ૿΍ͤΔ

    View Slide

  13. Ϣʔβ਺෼ಉ࣌ʹϦΫΤετΛड͚͍ͯΔ͜
    ͱ΋ͳ͍

    View Slide

  14. WebΞϓϦέʔγϣϯͷੈք
    • HTTP͕εςʔτϨεͳͷͰԣʹಉ͡ΞϓϦΛฒ΂ͯLBʹೖΕ
    Δ
    • ෛՙ෼ࢄͱHA໨త
    • Lightweight Language(PHP΍Ruby2ͳͲ)͕࢖ΘΕΔ͜ͱ͕͋Δ
    • ͜ΕΒ͸ϚϧνϓϩηεϞσϧ͕ओྲྀ
    2 ΋ͪΖΜJava΍C#Ͱ૊Ήͱ͜Ζ΋͋ΓɺͦΕΒ͸ϚϧνεϨου

    View Slide

  15. ϦΞϧλΠϜ௨৴ΛWebͷԆ௕Ͱ΍Δબ୒ࢶ
    • Long Polling
    • WebSocket
    • WebRTC DataChannel
    • ͋Δ͍͸ੜιέοτ

    View Slide

  16. ͳͥWebSocketΛ࢖͏ͷ͔
    => ௕͍΋ͷʹר͔Εͨ΄͏ָ͕͕Ͱ͖Δ
    • 2011೥ʹඪ४ࡦఆ͞Ε͔ͯΒ͕࣌ؒܦͪϥΠϒϥϦ͕ރΕ͍ͯ
    Δ
    • ੜιέοτͱҧͬͯϥΠϒϥϦΛࣗ෼Ͱॻ͔ͳͯ͘Α͍
    • wscatΛ࢝Ίͱͨ͠σόοάπʔϧ΋๛෋
    • TCPͳͷͰ࠶ૹͳͲͷ໘౗͸ݟͯ͘ΕΔ

    View Slide

  17. ͦ΋ͦ΋ͳͥඪ४Webٕज़ʹͩ͜ΘΔͷ͔
    • Web։ൃऀίϛϡχςΟʹ৐͔ͬΕΔ
    • ϥΠϒϥϦ΍஌ݟΛٵऩͰ͖Δ
    • (͜Ε͸ޙ෇Ͱ͕͢)PWAήʔϜΞϓϦ࣌୅Λݟਾ͑ͯͷબ୒
    • ϒϥ΢β͸࢖͑Δϓϩτίϧ͕ݶΒΕΔ

    View Slide

  18. WebSocket͸εςʔτϑϧ௨৴
    • ΫϥΠΞϯτ͸WebAppʹରͯ͠ܨ͗ͬͺͳ͠ͷঢ়ଶʹͳΔ
    • WebSocket͸ηογϣϯͷੜଘ͕࣌ؒ௕͍ͨΊͦͷؒ͸Ϧ
    ιʔεΛઐ༗͢Δ

    View Slide

  19. WebSocket͸઀ଓΛҡ࣋͠ଓ͚Δඞཁ͕͋Δ

    View Slide

  20. ϦΞϧλΠϜ௨৴͸εςʔτϑϧ௨৴
    • 1ͭͷΫϥΠΞϯτ͕1WebAppΠϯελϯεͱີ݁߹͢Δ
    • গͳ͘ͱ΋1ηογϣϯͷؒ͸ॊೈͳεέʔϧΞ΢τ(୆਺Λ
    ԣʹ૿΍͢)΍ϦΞϧλΠϜ௨৴͕ߦΘΕ͍ͯΔؒͷίʔυ
    ߋ৽(σϓϩΠ)͕೉͍͠

    View Slide

  21. ϦΞϧλΠϜ௨৴͸εςʔτϑϧ௨৴
    • εςʔτϑϧ௨৴ͱಉظܕPreforkͷ૬ੑͷѱ͞
    • 1ݸͷϓϩηε͕1ͭͷϦΫΤετΛಉظతʹॲཧ
    • 1ϦΫΤετͷॲཧ͕࣌ؒ୹͍(ʙ1sec)͜ͱ͕લఏ
    • 1ϓϩηεͰ1WebSocketηογϣϯΛѲΔͱϓϩηε਺෼͠
    ͔ΫϥΠΞϯτΛऩ༰Ͱ͖ͳ͍

    View Slide

  22. ٧·Δਤ

    View Slide

  23. ࠓ·ͰͷWebΞϓϦ͕ͦͷ··
    WebSocketΛ஻Δ͜ͱ͸೉͍͜͠ͱ
    ͕Θ͔ͬͨ

    View Slide

  24. ͍͔ʹͯ͠զʑ͸ϦΞϧλΠϜ௨৴ʹཱͪ޲
    ͔͑͹͍͍ͷ͔
    • ָͰ
    • Θ͔Γ΍ͯ͘͢ɺγϯϓϧͰ
    • εέʔϧՄೳͰ
    • ӡ༻͠΍͍͢ͷ͕΄͍͠

    View Slide

  25. ͦΜͳ͏·͍
    ιϦϡʔγϣϯ͸͋Δͷ͔

    View Slide

  26. ैདྷͷWebΞʔΩςΫνϟ͕WebSocketΛ
    ѻ͏ͱ͖ͷ೉͍͠఺Λ੔ཧ
    • ௕࣌ؒੜ͖ଓ͚Δ௨৴ηογϣϯΛҡ࣋͢Δͷ͕೉͍͠
    • ௨৴ͱϢʔβΛඥ෇͚Δͷ͕೉͍͠
    => ͜ͷลϛυϧ΢ΣΞʹ೚ͤΔͷ͸Ͳ͏͔
    ֎ʹग़͢ͷ͸ϚΠΫϩαʔϏεͷߟ͑ํʹ͍͔ۙ΋͠Εͳ͍

    View Slide

  27. WebSocketηογϣϯΛ
    ҡ࣋͢Δ͚ͩͷ
    ϛυϧ΢ΣΞ
    kuiperbeltͷ։ൃͱಋೖ

    View Slide

  28. kuiperbeltͱ͸
    • OSSͰ͢3
    • WebSocketͷηογϣϯΛड͚ͯҡ࣋͢Δ͚ͩͷ௨৴σʔϞϯ
    • ࠷ॳ͸ݸਓϓϩδΣΫτͰ͕ͨ͠ɺձࣾͰ͔ͳΓ࢖ΘΕ͍ͯ·
    ͢
    • ձࣾͷਓʹ΋ίϛοτͯ͠΋Β͍ͬͯ·͢
    3 https://github.com/kuiperbelt/kuiperbelt

    View Slide

  29. View Slide

  30. View Slide

  31. ໊લͷ༝དྷ
    ఱจֶͷΤοδϫʔεɾΧΠύʔϕϧτ*͔Β
    * photo by NASA

    View Slide

  32. kuiperbelt͕ग़དྷΔ͜ͱ
    • WebSocketηογϣϯͷҡ࣋
    • HTTP-APIͰͷಛఆηογϣϯ΁ͷϝοηʔδͷྲྀ͠ࠐΈ
    • ্Γ(ΫϥΠΞϯτ->αʔό)͸ඇରԠ7
    7 ରԠ༧ఆ͸͋Γ

    View Slide

  33. ࿩͢͜ͱͷྲྀΕ
    1. ౦ژϓϦζϯͰͷαʔόߏ੒ͷུ֓
    2. kuiperbeltΛ࢖ͬͨWebSocketηογϣϯͷೝূɾϝοηʔδ഑

    3. ઃܭࢥ૝
    4. ࣮ࡍͷӡ༻ࣄྫ
    5. ౦ژϓϦζϯͰͷ࣮ࡍͷ࢖ΘΕํ

    View Slide

  34. ౦ژϓϦζϯͷαʔόߏ੒8
    8 ຊ೔17:50ΑΓฐࣾ౻ݪͷৄ͍͠ߏ੒ͷղઆ͕͋Γ·͢

    View Slide

  35. HTTPͷதͷ࢓૊ΈͷதͰೝূΛ͢Δ
    • ೝূ͸WebSocket΁ͷΞοϓάϨʔυલʹWebAppଆʹϓϩΩ
    γΛߦ͏
    • ϓϩΩγ࣌ʹkuiperbelt͸ࣗ෼ͷղܾՄೳͳϗετ໊Λ෇Ճ͢
    Δ -> εέʔϧΞ΢τʹ༻͍Δ
    • WebAppଆ͸ϨεϙϯεͷϔομʹࣝผࢠΛՃ͑Δ

    View Slide

  36. HTTPͷதͷ࢓૊ΈͷதͰೝূΛ͢Δ

    View Slide

  37. HTTPͷதͷ࢓૊ΈͷதͰϝοηʔδ഑৴Λ
    ͢Δ
    • ΫϥΠΞϯτ΁ͷϝοηʔδ͸ϔομͰࣝผࢠΛࢦఆͯ͠ɺϘ
    σΟͷ಺༰͸ͦͬ͘Γͦͷ··WebSocketͷηογϣϯʹྲྀ͠
    ࠐΉ
    • த਎ͷϝοηʔδͷܗࣜ͸kuiperbelt͸ؔ༩͠ͳ͍
    • ౦ژϓϦζϯ͸όΠφϦΛྲྀͯ͠·͢

    View Slide

  38. HTTPͷதͷ࢓૊ΈͷதͰϝοηʔδ഑৴Λ
    ͢Δ

    View Slide

  39. kuiperbeltࣗ਎ͷઃܭࢥ૝
    • ୯७ͳ͜ͱ͔͠΍Βͳ͍ͷͰམͪͳ͍ɾ࠶ىಈ͠ͳͯ͘ྑ͍
    • ήʔϜϩδοΫ͸஌Βͳ͍ͷͰσϓϩΠ͕ඞཁͳ͍
    • ൒೥Ҏ্ӡ༻͍ͯ͠Δ͕ϝϞϦϦʔΫ͸ى͖͍ͯͳ͍
    • ಛఆϓϩτίϧɾϛυϧ΢ΣΞʹґଘ͠ͳ͍

    View Slide

  40. ผλΠτϧͰͷো֐ࣄྫ
    ͏͔ͬΓHTTP/2ࣄ݅
    ݱࡏ͸ҰఆִؒͰίωΫγϣϯΛഁغ͢Δ࣮૷͕ೖ͍ͬͯ·͢

    View Slide

  41. kuiperbeltࣗ਎ͷઃܭࢥ૝
    • GoͰॻ͔Ε͍ͯΔͷͰίΞ෼͚ͩͪΌΜͱεέʔϧ͢Δ
    • 1ίΞ͋ͨΓඵؒ10,000ϝοηʔδ͙Β͍(1ϝοηʔδ͋ͨΓ
    ฏۉ150bytes)
    • ϝϞϦྔ͸ΫϥΠΞϯτ਺ʹൺྫ͠ɺϝοηʔδͷ಺༰ͳͲ
    ʹ΋ࠨӈ͞ΕΔ͕1ສ઀ଓͰ1GBʙ1.8GB

    View Slide

  42. ࣮ࡍͷӡ༻Ͱ͸
    • ࣮ෛՙࢼݧͰϝοηʔδྲྀྔͱϝοηʔδαΠζ͕େ͖͍͜ͱ
    ͕൑໌ͨͨ͠Ίɺ1Πϯελϯε5000઀ଓఔ౓ʹ཈͑ͨ
    • m3.large4ͱr4.large5ͷspot fleetʹ͍ͯͨ͠Βm3.largeͷpps
    ্ݶ͕௿ͯ͘ภΓ͕ग़ͨͷͰr4.largeͷΈͷӡ༻ʹ͍ͯ͠Δ
    5 2core 15.25GBϝϞϦ
    4 2core 7.5GBϝϞϦ

    View Slide

  43. ύέοτ٧·ΓΛىͯ͜͠࠶ૹ͕ߦΘΕ͍ͯ
    Δϩά
    21:00:47 plack.1 | 1019.259 ms [Furl::HTTP] POST http://XX.XX.XX.XX:9180/send | Furl:40
    21:00:47 plack.1 | 3017.341 ms [Furl::HTTP] POST http://XX.XX.XX.XX:9180/send | Furl:40
    21:00:47 plack.1 | 1017.801 ms [Furl::HTTP] POST http://XX.XX.XX.XX:9180/send | Furl:40
    21:00:47 plack.1 | 7174.359 ms [Furl::HTTP] POST http://XX.XX.XX.XX:9180/send | Furl:40
    21:00:47 plack.1 | 1025.966 ms [Furl::HTTP] POST http://XX.XX.XX.XX:9180/send | Furl:40
    21:00:47 plack.1 | 10010.330 ms [Furl::HTTP] POST http://XX.XX.XX.XX:9180/send | Furl:40
    1, 3, 7, 10...ͱ஗Ԇ͍ͯ͠ΔͷͰ࠶ૹͰ٧·͍ͬͯΔͷͰ͸ʁ ͱ
    ͳͬͨ

    View Slide

  44. ΍͍ͬͯΔ͜ͱ͕γϯϓϧͳͷͰ༷ʑͳΞʔΩςΫνϟʹରԠͰ͖Δ
    MO޲͖ͷதܧ͚ͩߦ͏ΞʔΩςΫνϟ

    View Slide

  45. ΍͍ͬͯΔ͜ͱ͕γϯϓϧͳͷͰ༷ʑͳΞʔΩςΫνϟʹରԠͰ͖Δ
    MMO΍Ϛονϯά޲͖ͷαʔόͰήʔϜϩδοΫΛ࣮ߦ͢ΔΞʔΩςΫνϟ

    View Slide

  46. ϦΞϧλΠϜ௨৴αʔόΛϩʔυόϥϯαʔʹ૊ΈࠐΉ
    Q: ෳ਺ͷαʔόΛܦ༝͢Δ͔ΒϨΠςϯγ͕ݫ͍͠ͷͰ͸ʁ
    A1: ϞόΠϧʹ͓͍ͯ͸ͦͷݶΓͰ͸ͳ͍
    A2: λʔϯ੍ͳΒ͋Δఔ౓ڐ༰Ͱ͖Δ

    View Slide

  47. A1: ϞόΠϧʹ͓͍ͯ͸ͦͷݶΓͰ͸ͳ͍
    HTTP-APIΛଧ͔ͬͯΒWebSocketͰԠ౴͕͔͑ͬͯ͘Δ·Ͱͷ
    RTTΛܭଌ6
    6 JavaScriptͳͷͰspectreͷӨڹͰ2msఔ౓ͷؙΊ͕ଘࡏ͍ͯ͠Δͷ͸ཹҙ

    View Slide

  48. A1: ϞόΠϧʹ͓͍ͯ͸ͦͷݶΓͰ͸ͳ͍
    • લ൒͕ݻఆޫճઢܦ༝ͷWiFi, ޙ൒͕4G
    • WiFiͩͱ20 ʙ 30ms, 4Gͩͱ75msʙ
    • LBΛܦ༝͢Δ͜ͱʹΑΔϨΠςϯγ͸1ܻmsఔ౓
    • ϞόΠϧʹ͓͍ͯ͸LBʹΑΔϨΠςϯγ͸ࢧ഑తͰ͸ͳ͍

    View Slide

  49. A2: λʔϯ੍ͳΒ͋Δఔ౓ڐ༰Ͱ͖Δ
    • ͜Ε͕PC΍ίϯγϡʔϚͰ΍ΔΑ͏ͳFPS΍֨ήʔͰ͋Ε͹1ܻ
    msͷ஗ԆͰ͢Β୹ॖ͍ͨ͠
    • ڐ༰͞ΕΔ஗Ԇ෯͸ήʔϜγεςϜʹΑͬͯมΘΔ
    • ཁ݅ʹΑͬͯ͸ૹΓͬͺͳ͠ʹͰ͖Δ/Φʔόʔϔου͕গͳ
    ͍UDPͳͲΛબ୒͢Δ

    View Slide

  50. ݱঢ়͸LBʹೖΕΔϝϦοτ͕Ͱ͔͍
    • TLS TerminationΛ೚ͤΔ͜ͱ͕ग़དྷΔ
    • ݸผʹTerminationΛ΍͍ͬͯΔͱূ໌ॻͷ؅ཧ͕໘౗
    • ࠷ۙ͸௨Βͳ͍ϑΥϫʔυϓϩΩγ͕ݮͬͨͱ͸͍͑ੜ
    WebSocket͸ૄ௨͢Δ͔Ͳ͏͔ͷϦεΫ͕͋Δ

    View Slide

  51. ݱঢ়͸LBʹೖΕΔϝϦοτ͕Ͱ͔͍
    • ࣗಈͰ༙͍ͨԾ૝Ϛγϯ/ίϯςφʹ౸ୡՄೳͳIPΞυϨε/ϗ
    ετΛͲ͏΍ͬͯΫϥΠΞϯτʹ௨஌͢Δ͔໰୊
    • ैདྷ͸ಉ͡ϧʔϜΛݻΊΔΑ͏ʹϚονϯά࣌ʹ઀ଓ͢΂͖
    ΞυϨεΛࣔͨ͠Γ
    • LBͳΒೖΕΔ͚ͩͰ౸ୡՄೳʹͳΔɺϧʔϜͰݻΊΔΈ͍ͨ
    ͳͷ͸ग़དྷͳ͍͕

    View Slide

  52. ࣮ࡍʹ૊ΈࠐΜͰΈͯ౦ژϓϦζϯ
    ͸ͲͷΑ͏ʹήʔϜΛਐߦ͍ͯ͠Δ
    ͔

    View Slide

  53. kuiperbeltΛ૊ΈࠐΜͩ౦ژϓϦζϯͷॲཧ

    View Slide

  54. kuiperbeltΛ૊ΈࠐΜͩ౦ژϓϦζϯͷॲཧ

    View Slide

  55. ήʔϜϩδοΫ͕αʔόଆʹ͋Δ͜ͱͷϝ
    Ϧοτ
    • ήʔϜϩδοΫͷมߋ͕͋Δఔ౓༰қ ετΞਃ੥͕ཁΒͳ͍
    • ΫϥΠΞϯτੑೳʹҾͬுΒΕͳ͍
    • ΫϥΠΞϯτ։ൃऀ͸ֆΛग़͢͜ͱʹूதͰ͖Δ
    • νʔτ΋͞Εʹ͍͘
    • ϩΪϯά΋༰қͳͷͰղੳͳͲ΋Ͱ͖Δ

    View Slide

  56. ήʔϜϩδοΫ͕αʔόଆʹ͋Δ͜ͱͷσϝ
    Ϧοτ
    • ΫϥΠΞϯτ͕αʔόͷॲཧΛ଴ͭͨΊϨεϙϯγϏϦςΟ͕
    ѱ͍
    • αʔόͷϨεϙϯεΛ଴ͨͳ͍ͳͲͷରࡦΛߨ͍ͯ͡Δ(ඇಉ
    ظԽ)

    View Slide

  57. ήʔϜϩδοΫ͕αʔόଆʹ͋Δ͜ͱͷσϝ
    Ϧοτ
    • αʔόͷෛՙରࡦΛे෼ʹߦ͏ඞཁ͕͋ΔɹϦιʔε΋֬อ͢
    Δඞཁ͕͋Δ
    • ૝ఆ࣮ෛՙࢼݧͱνϡʔχϯάΛ܁Γฦ͠·͕ͨ͠ඇৗʹۤ
    ࿑͠·ͨ͠

    View Slide

  58. ͦͷଞkuiperbeltΛಋೖͨ͜͠ͱͰݟ͖͑ͯͨ
    ໰୊఺
    1. ϝοηʔδ౸ୡॱ໰୊
    2. αʔόؒϝοηʔδܽଛ໰୊

    View Slide

  59. ϝοηʔδ౸ୡॱ໰୊
    kuiperbeltͷதͰϩοΫऔΕͨॱ൪ʹྲྀΕΔ

    View Slide

  60. ϝοηʔδ౸ୡॱ໰୊
    ղ๏
    • γʔέϯε൪߸Λ΋্ͨͤͨͰ
    1. ΫϥΠΞϯτଆͰόοϑΝϦϯάͭͭ͠ฒ΂௚͢
    2. kuiperbeltଆͰόοϑΝϦϯάͭͭ͠ฒ΂௚͢

    View Slide

  61. ϝοηʔδ౸ୡॱ໰୊
    ΫϥΠΞϯτଆͰฒ΂௚͢ͷΛ࠾༻
    • kuiperbeltͰ΍ΔͱϝϞϦ࢖༻ྔ͕૿͑Δ, ঢ়ଶ͕૿͑ͯίϯς
    φ͕མͪͨͱ͖ʹϝοηʔδܽଛ͕૿͑Δ
    • ඈ͹ͦ͏ͱͨ͠ϝοηʔδ͸ͬ͞͞ͱૹͬͯঢ়ଶΛͳ͘͢
    • kuiperbelt͸த਎ʹྲྀΕΔσʔλʹؔ༩͠ͳ͍ϧʔϧ

    View Slide

  62. αʔόؒϝοηʔδܽଛ໰୊
    • HTTPͰ௚઀ૹΔͱܽଛ͢ΔΜ͡Όͳ͍ʁʁʁ
    • DC಺௨৴, Ϧʔδϣϯ಺௨৴ͳͷͰܦ࿏ͰམͪΔ͜ͱ͸ͳ͔
    ͳ͔ͳ͍
    • ϦτϥΠ&ΫϥΠΞϯτଆͰͷॏෳݕ஌ͳͲ΋ೖΕ͍ͯΔ
    • ࠓޙ͸circuit breaker΋ೖΕΔ

    View Slide

  63. ͦͯ͠ӡ༻͍ͯ͠Δࠓ͸
    • αʔόͷਓ͕͋Μ·ΓWebSocketͷ͜ͱΛߟ͑ͣʹࠓ·ͰͲ͓
    ΓίʔυΛॻ͚Δ
    • WebSocketαʔό͕ίϯςφͱϩʔυόϥϯαʔʹΑͬͯϊʔ
    ϝϯςͰಈ͍͍ͯΔ
    • ͍ͭͰ΋ίϚϯυҰൃͰεέʔϧΞ΢τՄೳ
    • WebSocketͷ͜ͱΛ͋·Γߟ͑ͣʹσϓϩΠ͕ग़དྷΔ

    View Slide

  64. εέʔϧՄೳͰ
    ӡ༻͠΍͍͢
    WebSocketαʔό
    ͕ಈ͍͍ͯΔ

    View Slide

  65. ·ͱΊ
    • ैདྷͷWebΞϓϦέʔγϣϯΞʔΩςΫνϟʹൺֱత༰қʹಋ
    ೖͰ͖ΔϦΞϧλΠϜ௨৴༻ϛυϧ΢ΣΞΛ࡞࣮ͬͯࡍʹຊ൪
    ಋೖ͠·ͨ͠
    • ଞͷطʹӡ༻தͷήʔϜʹ΋ಋೖ͢Δχʔζ͕͋ΔΑ͏ͳͷͰ
    ͜Ε͔Β΋΍͍͖ͬͯ·͢
    • ຊ൪ӡ༻ͯ͠ΈͯɺղܾՄೳͰ͸͋Δ͕ɺͦͦ͜͜ͷ໰୊͸͍
    ͔ͭ͘߹ͬͨͷͰڞ༗͍͖ͤͯͨͩ͞·ͨ͠

    View Slide

  66. Any Questions?

    View Slide