Slide 1

Slide 1 text

GraphQL GatewayΛ Node.jsͰ࡞ͬͯΔ࿩ haruhiko kobayashi 2018/12/6

Slide 2

Slide 2 text

!2 ࣗݾ঺հ Haruhiko Kobayashi Chief Tech Lead εϖʔεϚʔέοτ yahooͷόοΫΤϯυΤϯδχΞ ग़਎Ͱ͢ɻϑϩϯτΤϯυͱΠϯ ϑϥ΋Ұ௨Γ͔ͬͨ͡ͷͪʹεϖʔ εϚʔέοτʹJoin

Slide 3

Slide 3 text

!3 Agenda

Slide 4

Slide 4 text

!4 Agenda • GraphQLͷ͝঺հ • Microservicesͱͷ૊Έ߹Θͤ • GraphQL Gateway on Node.js

Slide 5

Slide 5 text

GraphQLͷ͝঺հ

Slide 6

Slide 6 text

!6 GraphQLͷ͝঺հ • Facebook͕ఏএͨ͠API࢓༷ • ڧ͍ܕγεςϜ • ࢀরܥ͸query • ߋ৽ܥ͸mutation • RESTͱରൺͯ͠ޠΒΕΔࣄ͕ଟ͍ جຊతͳ࿩

Slide 7

Slide 7 text

!7 GraphQLͷ͝঺հ • Partial Response • Batch Request • graphdoc • Graphiql σϑΥϧτػೳ

Slide 8

Slide 8 text

!8 Partial Response ࢦఆͨ͠σʔλͷΈऔಘ

Slide 9

Slide 9 text

!9 Batch Request 1౓ͷAPIίʔϧͰෳ਺ͷϦιʔεΛऔಘՄೳ

Slide 10

Slide 10 text

!10 graphdoc GraphQL API͔ΒυΩϡϝϯτࣗಈੜ੒

Slide 11

Slide 11 text

!11 graphdoc GraphQL API͔ΒυΩϡϝϯτࣗಈੜ੒ confidential

Slide 12

Slide 12 text

!12 GraphiQL GraphQLͷΫΤϦ࣮ߦ؀ڥ

Slide 13

Slide 13 text

!13 ಋೖ࣌ظ 2017೥ࠒ͔Β෦෼తʹಋೖ • Client: Apollo Client • Server: Rails RESTͱൺ΂ͨ։ൃମݧ • FEɾΞϓϦ։ൃऀ͔Β૬౰ָʹͳͬͨͱ͍͏੠ • BEͱͯ͠΋ແବͳϖΠϩʔυ࡟ݮͳͲϝϦοτ͸ଟ͍

Slide 14

Slide 14 text

Microservicesͱͷ૊Έ߹Θͤ

Slide 15

Slide 15 text

!15 Microservicesͱͷ૊Έ߹Θͤ • ݕࡧαʔϏε • ΞΧ΢ϯταʔϏε • ϦίϝϯυαʔϏε • etc.. ڊେͳREST API͔ΒGraphQLαʔϏεΛ੾Γग़͠த

Slide 16

Slide 16 text

!16 Microservicesͱͷ૊Έ߹Θͤ API͕ଟ͗ͯ͢frontendͷਏΈ͕༧૝͞ΕΔ ݕࡧ (GraphQL) Ϩίϝϯυ (REST) ΞΧ΢ϯτ (GraphQL) ༧໿ (REST) FE

Slide 17

Slide 17 text

!17 Microservicesͱͷ૊Έ߹Θͤ GraphQL GatewayΛrubyͰ࡞ͬͨ ݕࡧ (GraphQL) Ϩίϝϯυ (REST) ΞΧ΢ϯτ (GraphQL) ༧໿ (REST) FE gateway

Slide 18

Slide 18 text

!18 Microservicesͱͷ૊Έ߹Θͤ Gateway͸remoteͷAPIʹϦΫΤετͯ݁͠ՌΛฦ͢

Slide 19

Slide 19 text

!19 Microservicesͱͷ૊Έ߹Θͤ resolverͰผAPIΛୟ͘ confidential

Slide 20

Slide 20 text

!20 Microservicesͱͷ૊Έ߹Θͤ resolverͰผAPIΛୟ͘

Slide 21

Slide 21 text

!21 Microservicesͱͷ૊Έ߹Θͤ ՝୊1: GraphQLͷܕΤϥʔʹͳΔ confidential • GraphQL͸ఆٛ͞Ε͍ͯͳ͍ܕ͕ΫΤϦʹؚ·ΕΔͱΤϥʔ ʹͳΔ

Slide 22

Slide 22 text

!22 Microservicesͱͷ૊Έ߹Θͤ ՝୊1: GraphQLͷܕΤϥʔʹͳΔ • GraphQLͷΫΤϦΛղੳͯ͠༨ܭͳ΋ͷΛফ͢ॲཧΛॻ͍ͯ ରԠ

Slide 23

Slide 23 text

!23 Microservicesͱͷ૊Έ߹Θͤ ՝୊2: Blocking IO confidential • ruby͸Blocking IO͕ඪ४ͷͨΊΫΤϦ͕૿͑ΔͱͲΜͲΜ஗ ͘ͳΔ

Slide 24

Slide 24 text

!24 Microservicesͱͷ૊Έ߹Θͤ ՝୊2: Blocking IO • ΫΤϦͷ࣮ߦΛ஗ԆධՁͯ͠1ͭͷΫΤϦʹ·ͱΊ࣮ͯߦ • graphql-batchͱ͍͏ϥΠϒϥϦͰରԠ͸Մೳ

Slide 25

Slide 25 text

!25 Microservicesͱͷ૊Έ߹Θͤ ՝୊2: Blocking IO • ̎ͭͷϦΫΤετΛ஗ԆධՁͤͯ͞1ͭͷϦΫΤετʹ߹੒

Slide 26

Slide 26 text

!26 Microservicesͱͷ૊Έ߹Θͤ ՝୊2: Blocking IO confidential • ̎ͭͷϦΫΤετΛ஗ԆධՁͤͯ͞1ͭͷϦΫΤετʹ߹੒

Slide 27

Slide 27 text

!27 Microservicesͱͷ૊Έ߹Θͤ ͜͜·Ͱͷ·ͱΊ • ৭ʑ͕Μ͹͕ͬͨෳ਺APIΤϯυϙΠϯτͱͳΔͱॲཧ͕ṫ ࡶʹͳΔ • rubyͷಛੑ͸GraphQL Gatewayʹ͸޲͍ͯͳͦ͞͏ • Node.js΁ͷҠ২Λݕ౼͠͸͡ΊΔ

Slide 28

Slide 28 text

GraphQL Gateway on Node.js

Slide 29

Slide 29 text

!29 Apollo Server Node.jsͷGraphQL Server࣮૷ • jsͰGraphQL API࡞Δʹ͸σϑΝΫτελϯμʔυ • Gatewayͱͯ͠ಈ͘ػೳ΋ఏڙ͍ͯ͠Δ • (ਖ਼֬ʹ͸graphql-toolsύοέʔδʹ)

Slide 30

Slide 30 text

!30 ՝୊1: GraphQLͷܕΤϥʔʹͳΔ ղܾࡦ: Schema Stitching • remoteͷGraphQL APIΛ͔͋ͨ΋localͷGraphQL APIͱͯ͠ ѻ͏ػೳͷ͜ͱ

Slide 31

Slide 31 text

!31 Schema Stitching ͭ·Γ͜Εͷ͜ͱͰ͢ ݕࡧ (GraphQL) Ϩίϝϯυ (REST) ΞΧ΢ϯτ (GraphQL) ༧໿ (REST) FE gateway

Slide 32

Slide 32 text

!32 ՝୊1: GraphQLͷܕΤϥʔʹͳΔ ղܾ: Schema Stitching confidential • remoteͷGraphQL APIΛlocalͷGraphQL APIͱͯ͠ѻ͏

Slide 33

Slide 33 text

!33 ՝୊1: GraphQLͷܕΤϥʔʹͳΔ ղܾ: Schema Stitching • 1ͭͷqueryΛผͷAPI͔ΒऔಘͰ͖ΔΑ͏ʹͳΔ

Slide 34

Slide 34 text

!34 ՝୊1: GraphQLͷܕΤϥʔʹͳΔ ղܾ: Schema Stitching • rubyͰؤுͬͯ࡞࣮ͬͨ૷͕20ߦ΄Ͳͷ࣮૷ͰղܾͰ͖ͨ • ׬શʹٕज़࠾୒ͷࣦഊ..

Slide 35

Slide 35 text

!35 ՝୊2: Blocking IO ղܾ:NodeͷಛੑΛੜ͔ͯ͠Non-Blocking IOͰ௨৴ͯ͘͠ΕΔ confidential

Slide 36

Slide 36 text

!36 ՝୊2: Blocking IO ղܾ:NodeͷಛੑΛੜ͔ͯ͠Non-Blocking IOͰ௨৴ͯ͘͠ΕΔ

Slide 37

Slide 37 text

·ͱΊ

Slide 38

Slide 38 text

!38 • ݴޠͷಛੑΛݟۃΊͯϛυϧ΢ΣΞ͸ઃܭ͢΂͖ • GraphQL GatewayελοΫ΋javascriptͰ࣮૷

Slide 39

Slide 39 text

No content