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

WebSocket Connection Proxy kuiperbeltの プラグイン機構の実装

B5582ce2d9959dfcff0384a07003e188?s=47 mackee
February 16, 2016

WebSocket Connection Proxy kuiperbeltの プラグイン機構の実装

B5582ce2d9959dfcff0384a07003e188?s=128

mackee

February 16, 2016
Tweet

Transcript

  1. WebSocket Connection Proxy kuiperbeltͷ ϓϥάΠϯػߏͷ࣮૷ @mackee_w a.k.a macopy

  2. • twitter:@mackee_w • github:mackee • ໘ന๏ਓΧϠοΫ • ιʔγϟϧήʔϜͷ ։ൃͱӡ༻PG •

    Perl / Go ୭ʁ
  3. ॻ͍ͨύοέʔδ • github.com/mackee/go-sqlla • code generate͢Δײ͡ͷΫΤϦϏϧμ

  4. ॻ͍ͨύοέʔδ • github.com/mackee/go-sqlla • code generate͢Δײ͡ͷΫΤϦϏϧμ

  5. ॻ͍ͨύοέʔδ • github.com/mackee/go-genddl • struct͔ΒSQLͷDDLΛ࡞Δ܅

  6. ॻ͍ͨύοέʔδ • github.com/mackee/go-genddl • struct͔ΒSQLͷDDLΛ࡞Δ܅

  7. go generateେ޷͖ਓؒͰ͢

  8. ࠷ۙ(࢓ࣄͰ)΍ͬͨ͜ͱ https://speakerdeck.com/mackee/perl-plus-goshi-yun-yong-falsehua

  9. PerlͷҰຕΞϓϦ͔Β Go΁੾Γग़͠ • ෳ਺DBΛԣஅ͢ΔΑ͏ͳ৘ใΛ࣋ͬͨAPI αʔόΛGoͰॻ͍ͯ੾Γग़͢ • Ϣʔβొ࿥ɺIDൃ൪ɺιʔγϟϧάϥϑetc… • ιʔγϟϧήʔϜΛશ෦GoͰॻ͘ͷ͸·ͩͭ Β͍ͱ͍͏ҹ৅

  10. ιʔγϟϧήʔϜͷ ػೳͷଟ͞

  11. ιʔγϟϧήʔϜͷػೳͷଟ͞ • ϑϨϯυొ࿥ • ෢ثతͳϠπͷ૷උɺ߹੒ɺਐԽ • Ψνϟ • ҭ੒ཁૉ(͢͝Ζ͘) •

    GvG(ࢼ߹)
  12. ιʔγϟϧήʔϜͷػೳͷଟ͞ • ϑϨϯυొ࿥ • ෢ثతͳϠπͷ૷උɺ߹੒ɺਐԽ • Ψνϟ • ҭ੒ཁૉ(͢͝Ζ͘) •

    GvG(ࢼ߹) • ɾɾɾ͜ΕΒΛϦΞϧλΠϜͰɹˡNew!
  13. ϦΞϧλΠϜʁʁʁʁ

  14. ࠷ۙͷτϨϯυͱͯ͠ͷ ϦΞϧλΠϜ • GvGͱ͔PvPͱ͔ͷରਓઓ΍ڠྗϓϨΠ͕ग़ͯ ͖ͯɺଞਓͷεϚϗͰߦͬͨߦಈΛʮଈ࠲ʹʯ ࣗ෼ͷͱ͜Ζʹ൓өͤ͞Δඞཁ͕͋Δ • ϦΞϧλΠϜײͱ͍͏ͷ͸ɺ੝Γ্͕ΓΛԋ शͭͨ͠Γਓͱ΍͍ͬͯΔײΛग़͢ͷʹඞཁ ͳཁૉʹͳΓͭͭ͋Δ

  15. ϦΞϧλΠϜͷ࣮ݱํ๏ • ྫ͑͹ಠࣗϓϩτίϧΛੜιέοτͰ͠Ό΂ΔήʔϜαʔόΛ C++͋ͨΓͰॻ͘ • ήʔϜαʔόͱ͸ϦΞϧλΠϜ෦෼ʹඞཁͳήʔϜͷཁૉ෦෼ (εΩϧൃಈʂͱ͔)΋࣮૷ͯ͠DBʹॻ͖ࠐΜͩΓͱ͔ • Ή͠ΖDBհͣ͞ʹͳΜ͔಄͍͍ײ͡Ͱԣͱ΍ΓऔΓͨ͠Γͱ ͔

    • HTTP͠Ό΂Δαʔό͔͠ॻ͍͖͍ͯͯͳ͍ͷʹͦΜͳεΩϧ͸ ͳ͔ͬͨɾɾɾ
  16. ιέοτͱ͔Α͘Θ͔Μͳ͍ ͷͰ Webඪ४ʹ৐͔ͬΓ·͢ ↓ WebSocket

  17. PerlͰWebSocketΛ͠Ό΂…… WSͰͭͳ͙

  18. PerlͰWebSocketΛ͠Ό΂…… ͝ʹΐ͝ʹΐܭࢉ…

  19. PerlͰWebSocketΛ͠Ό΂…… DBʹॻ͖ࠐΈத…

  20. PerlͰWebSocketΛ͠Ό΂…… DBʹॻ͖ࠐΈத… WSͰͭͳ͙…

  21. PerlͰWebSocketΛ͠Ό΂…… DBʹॻ͖ࠐΈத… WSͰͭͳ͙… ͪΐͬͱࠓ࢓ࣄதͳΜͰ…

  22. PerlͰWebSocketΛ͠Ό΂…… DBʹॻ͖ࠐΈத… ͑ͬ ͪΐͬͱࠓ࢓ࣄதͳΜͰ…

  23. ΍ͬͺΓC++Ͱ……

  24. ͦ͏ͩWSΛ͠Ό΂ͬͯ ͭͳ͗ͬͺʹͯ͘͠ΕΔ ઐ༻ͷαʔόΛॻ͜͏ ↓ kuiperbelt

  25. ͍͍ͩͨ͜Μͳײ͡ • client͕kuiperbeltʹWSͰͭͳ͛ΔͱޙΖͷ PerlʹೝূϦΫΤετΛ౤͛ͯ200ͩͬͨΒ WS։࢝ • ޙΖͷPerl͔ΒkuiperbeltʹHTTPͰϦΫΤε τΛ౤͛ΔͱWSͰϝοηʔδΛ഑ૹ͢Δ

  26. ͍͍ͩͨҎԼͷهࣄʹ http://qiita.com/mackee_w/items/b6036d132888caaf5f98

  27. ΫϥελԽͱ ϓϥάΠϯͷ࿩

  28. ݱঢ়ͷkuiperbeltͷ෼ࢄͷ࢓૊ Έ • Ұ൪ॳΊͷೝূϦΫΤετͷ࣌ʹϔομʹࣗ෼ͷϗ ετ໊Λ෇͚ͯૹ͍ͬͯΔ • ͜ͷΫϥΠΞϯτʹૹΓ͍ͨͱ͖͸ͦͷϗετ໊Λ ࢖͍ͬͯͩ͘͞ͱͳΔ(redisͱ͔ʹอଘ͠ͱ͍ͯͶ) • ͜ΕͩͱͲͷαʔόʹͲͷΫϥΠΞϯτ͕ͿΒԼ͕ͬ

    ͍ͯΔ͔ΛόοΫΤϯυଆ͕ҙࣝ͠ͳ͍ͱ͍͚ͳ͍
  29. ݱঢ়ͷkuiperbeltͷ෼ࢄͷ࢓ ૊Έ LVJQFSCFMU CBDLFOE

  30. LVJQFSCFMU CBDLFOE ೝূͷͱ͖ʹ ͭͳ͕ͬͨkuiperbeltͷϗετΛ௨஌͢Δ ઀ଓ࣌

  31. CBDLFOE LVJQFSCFMU ηογϣϯΩʔͱϗετ໊ͷϖΞΛอଘ ઀ଓ࣌

  32. CBDLFOE LVJQFSCFMU ηογϣϯΩʔ͔Βϗετ໊ΛऔΔ ૹ৴࣌

  33. CBDLFOE ϗετ໊Ͱͭͳ͕͍ͬͯΔkuiperbeltΛࢦ໊ͯ͠ ௨৴͢Δ ૹ৴࣌ LVJQFSCFMU

  34. όοΫΤϯυ͕ Ͳͷαʔόʹͭͳ͕͍ͬͯΔ ͔Ͳ͏͔Λߟྀ͢Δඞཁ͕͋ Δ

  35. ͦͷଞϦΞϧλΠϜήʔϜαʔ όͷྫ • ʮ͍ͭ͜ʹͭͳ͛ʂʯ͍ͬͯ͏αʔόΛࣄલ ʹAPIͰࢦఆ͍ͯͦͭ͠ʹܨ͍Ͱ΋Β͏ • ϝϦοτ: ภΓΛίϯτϩʔϧ • Ͳ͜ʹͭͳ͍Ͱ΋Ͳ͜ʹૹ৴ͯ͠΋Α͠ͳʹ

    ϝοηʔδΛૹͬͯ͘ΕΔ
  36. ͦͷଞϦΞϧλΠϜήʔϜαʔ όͷྫ • ʮ͍ͭ͜ʹͭͳ͛ʂʯ͍ͬͯ͏αʔόΛࣄલ ʹAPIͰࢦఆ͍ͯͦͭ͠ʹܨ͍Ͱ΋Β͏ • ϝϦοτ: ภΓΛίϯτϩʔϧ • Ͳ͜ʹͭͳ͍Ͱ΋Ͳ͜ʹૹ৴ͯ͠΋Α͠ͳʹ

    ϝοηʔδΛૹͬͯ͘ΕΔ ͜ΕΛ΍Γ͍ͨʂʂʂ ↓
  37. node.jsͱ͔ͰΑ͋͘Δ΍ͭ ↓ ԣͷҙࢥૄ௨ʹ redis pubsubΛ࢖͏

  38. pubsubΛར༻͢Δ • ࣗ෼͕͍࣋ͬͯΔΫϥΠΞϯτͰ͋Ε͹ࠓ· ͰͲ͓Γ͍ͦͭʹϝοηʔδΛ഑ૹ • ͍࣋ͬͯͳ͚Ε͹ΫϥΠΞϯτ͕͋Δ͔Ͳ͏ ͔Λ໰͍߹Θͤͯpublish͢Δ • όοΫΤϯυଆ͸ΫϥΠΞϯτͱαʔόͷ૊ ΛҙࣝͤͣʹϝοηʔδΛ౤͛ΒΕΔ

  39. શһʹඞਢͷػೳ͔ʁ • ผʹόοΫΤϯυ͕ؤுΕ͹redisͷυϥΠό ΛೖΕͳͯ͘΋ྑ͍ • redis pubsubҎ֎ʹ΋ಉ༷ͷػೳΛผͷ΍Γ ํͰ࣮ݱͰ͖ΔՄೳੑ͕͋Δ • ແͯ͘΋ಈ͘Α͏ʹ࡞Εͳ͘΋ͳ͍

  40. ϓϥάΠϯԽ͢Δ

  41. GoͷϓϥάΠϯ • go͸Ϗϧυ࣌ʹશ෦ͷϥΠϒϥϦΛؚΊͯ͠ ·͏ͷͰಈతϩʔυͷ࢓૊Έ͕ͳ͍(1.5ͰϥΠ ϒϥϦԽग़དྷΔͷ͸ೖ͕ͬͨ·ͩෆ҆ఆͱ͍ ͏͔࢖͑Δͷ͔ʁ) • ผͷϓϩηεͱ্ཱͯͪ͛ͯ͠ϓϩηεؒ௨ ৴͢Δͷ͕Ұൠత

  42. Goͷແཧ΍ΓϓϥάΠϯԽ .BJO1SPDFTT 1MVHJO1SPDFTT" 1MVHJO1SPDFTT# ϓϩηεؒ௨৴

  43. github.com/dullgiulio/pingo • net/rpc + pluginͷϓϩηεؒͰΑ͠ͳʹίω Ϋγϣϯషͬͯ͘ΕΔ + stdout/errͷ౷߹ • جຊతʹnet/rpcͳͷͰͦΕҎ্͸ग़དྷͳ͍

    • ίϚϯυʹউखʹΦϓγϣϯ͕ੜ͑Δ
  44. ࢖͍ํ

  45. ࢖͍ํ ͭͳ͛ͯ͠·͑͹͋ͱ͸net/rpc

  46. ࢖͍ํ structΛొ࿥͢Δͱ͍ͦͭͷmethodΛ ݺ΂ΔΑ͏ʹͳΔ

  47. ࢓ࠐΜͩͱ͜Ζ • ઀ଓ࣌ -> hookͯ͠pluginʹొ࿥ • pluginଆ͸redisͰchannelΛsubscribe • ੾அ࣌ ->

    hookͯ͠plugin͔Β࡟আ • pluginଆ͸subscribe͍ͯ͠ΔνϟϯωϧΛ࡟ আ
  48. ࢓ࠐΜͩͱ͜Ζ • ૹ৴࣌ -> ࣗ෼ʹΩʔ͕ͳ͚Ε͹pluginʹ౤͛Δ • plugin͸ͱΓ͋͑ͣpublish͢Δ͕ड͚Δ subscriber͕͍ͳ͚Ε͹ແ͍ΑͬͯΤϥʔΛฦ͢ • ड৴࣌

    -> pluginͷsubscribeΛݟ͍ͯΔ΍͕ͭདྷͨ Βϩϯάϙʔϧ(?)͍ͯ͠ΔRPCͰϝοηʔδΛฦ͢ (΋ͬͱ͏·͘΍Γ͍ͨ)
  49. demo (͕࣌ؒ͋ͬͨΒ)

  50. ·ͱΊ • PerlͰ΋DBͱ͔Λ·ͱ΋ʹ࢖͍ͭͭWS஻Γ͍ͨ ͷͰGoͰαʔόॻ͖·ͨ͠ • GoͰແཧ΍ΓPluginॻ͍ͯͦͷαʔόʹredis pub/sub࢖ͬͯෳ਺୆ݐͯΒΕΔΑ͏ʹ͠·ͨ͠ • GoͰ΋ಈతϩʔυग़དྷΔΑ͏ʹͳͬͯ΄͍͠

  51. Yokohama\.(go|pm6?)΍Γ·͢ʂ http://yokohamapm.connpass.com/event/26969/