18/12/14 - The World Café - Classmethod, Inc. Lightning Talks
5 LT ͰΘ͔Δ(Θ͔Βͳ͍)18/12/14 - The World Café - Classmethod, Inc.Dai Kurosawa / @ponde_m
View Slide
Introduce
What is
What is gRPC ?• Google ͕ެ։ͨ͠ RPC ͷϑϨʔϜϫʔΫ• Protocol Buffers ͰαʔϏεͷΠϯλϑΣʔεΛఆٛͯ͠ Server, Client ͷίʔυΛࣗಈͰੜͰ͖Δ• Protocol Buffers σϑΥϧτͰͦΕҎ֎ͷσʔλϑΥʔϚοτ͋Δ• HTTP/2 Λ༻ͯ͠௨৴, stream ͳͲͰ͖Δfrom: [What is gRPC?](https://grpc.io/docs/guides/index.html)
Protocol Buffers ??
(͕࣌ؒͳ͍ͷͰ)ோΊΔ͚ͩͰͳΜͱͳ͘Θ͔ΔProtocol Buffersͷ͍ํ
How to useProtocol Buffers in gRPCfrom: [Go Quick Start](https://grpc.io/docs/quickstart/go.html)
How to useProtocol Buffers in gRPCfrom: [Go Quick Start](https://grpc.io/docs/quickstart/go.html)• protoc ͱ͍͏ίϚϯυͰίϯύΠϧ͢Δͱ֤ݴޠͷίʔυΛδΣωϨʔτͰ͖Δ• ରԠݴޠ͍ͬͺ͍• from: [API Reference | Protocol Buffers] (https://developers.google.com/protocol-buffers/docs/reference/overview)
What is gRPC ?from: [What is gRPC?](https://grpc.io/docs/guides/index.html)• ਤʹ͢Δͱ͜Μͳײ͡
શʹཧղͨ͠ʕ◔ϖ◔ʔ͜͜·Ͱ 2 ͘Β͍
Λ͏ͱԿ͕خ͍͠ͷ ?
Advantage of gRPC• Single Source of Truth ͷ࣮ݱ• ΠϯλϑΣʔεશͯ protobufs ʹఆٛ͢Δ• protobufs = શͳυΩϡϝϯτ• ܕ͞ΕΔ• ϧʔϧΛकΕલํޓ, ޙํޓʹରԠͰ͖Δ (https://developers.google.com/protocol-buffers/docs/proto3#updating)• ͲͪΒ͔ͱ͍͑ protobufs Λ͏͜ͱʹΑΔخ͠͞• Protobufs ͔ΒίʔυΛδΣωϨʔτͯ͠։ൃΛߦ͏• υΩϡϝϯτʹهࡌ࿙Ε͕͋ͬͯ…… Έ͍ͨͳͷ͔Βղ์͞ΕΔ• REST API ઃܭ͔Βղ์
Advantage of gRPC• HTTP/2 ͔ΒಘΒΕΔԸܙ• ߴύϑΥʔϚϯε• HTTP/1 ͷςΩετϓϩτίϧ͔ΒόΠφϦϓϩτίϧʹ• సૹ͢Δσʔλྔ͕খ͘͞ͳΔ• ߴͳσʔλղੳ• 1ͭͷ TCP ଓʹରͯ͠ଟॏϦΫΤετΛૹΔ͜ͱ͕Ͱ͖Δ• ίωΫγϣϯཱ֬ͷΦʔόϔου͕খ͘͞ͳΔ• ํετϦʔϛϯά• GCP ͷ API ͱ͔ͩͱ gRPC ͕׆༻͞Ε͍ͯͨΓ͢Δ• [gRPC Λհͨ͠ Cloud Pub/Sub: ֓ཁ] (https://cloud.google.com/pubsub/grpc-overview?hl=ja)
Ͱ͍͍͜ͱ͔ΓͰͳ͍ΜͰ͠ΐ͏ʁ
Disadvantage of gRPC• gRPC ͷ API REST ͷ API ͱͯ͠ίʔϧͰ͖ͳ͍• curl ͢ΒͰ͖ͳ͍• ϑϩϯτΤϯυ͔ΒݺͿʹ……?• gRPC HTTP/2 ͕લఏ• ϩʔυόϥϯγϯάͳͲΛߟ͑ͳ͍ͱ͍͚ͳ͍• ALB ͷ෦௨৴ HTTP/2 ඇରԠ• CLB ͩͱ L4 ϨΠϠͷϩʔυόϥϯγϯάʹͳͬͯ͠·͏
grpc-gateway• HTTP/1.1 ͷ API ΛఏڙͰ͖ΔϦόʔεϓϩΩγ• protobufs ʹ option ΛՃ͑Δͱ REST ͱ gPRC ͷΫϥΠΞϯτΛհ͢Δ Golang ͷίʔυ͕ੜ͞ΕΔ• Swagger ΛδΣωϨʔτ͢Δ͜ͱ͕Ͱ͖Δfrom: [grpc-ecosystem/grpc-gateway](https://github.com/grpc-ecosystem/grpc-gateway)
gRPC-Web• gRPC ͷΫϥΠΞϯτ͕ϒϥβͰಈ͘• protobufs ͔Β JavaScript ͷΫϥΠΞϯτΛδΣωϨʔτ• CNCF ͕ GA Λൃදͯͨ͠from: [gRPC-Web is going GA](https://www.cncf.io/blog/2018/10/24/grpc-web-is-going-ga/)
gRPC-Web• ͓…… ʁfrom: [gRPC-Web is going GA](https://www.cncf.io/blog/2018/10/24/grpc-web-is-going-ga/)
service proxy …… ?
gRPC-Webfrom: [Envoy and gRPC-Web: a fresh new alternative to REST] (https://blog.envoyproxy.io/envoy-and-grpc-web-a-fresh-new-alternative-to-rest-6504ce7eb880)• ݱ࣮͜͏• Local Proxy ΛࠓޙͷϩʔυϚοϓͱͯ͠ݕ౼தΒ͍͠
gRPC-Webfrom: [ϑϩϯτΤϯυΤϯδχΞ͓͖͍ͬͯͨgRPC] (https://speakerdeck.com/suusan2go/hurontoendoenziniamozhi-tuteokitaigrpc?slide=25)• ͜ͷੈքʹͳͬͯ΄͍͠
gRPC Load Balancing• HTTP/2 1ͭͷίωΫγϣϯͰෳͷϦΫΤετΛૹΔ• L4 ϨΠϠͰϩʔυόϥϯγϯάΛߦ͏ͱίωΫγϣϯ͕அ͞ΕΔ·Ͱಉ͡αʔόʹϦΫΤετΛૹͬͯ͠·͏• HTTP/2 ʹରԠͨ͠ proxy ͕ඞཁfrom: [gRPC Load Balancing on Kubernetes without Tears] (https://kubernetes.io/blog/2018/11/07/grpc-load-balancing-on-kubernetes-without-tears/)
gRPC Load Balancing• ϦΫϧʔτ͞Μͷϒϩά͕ΊͬͪΌΑ͔ͬͨfrom: [EnvoyͱAmazon ECS Service DiscoveryΛར༻ͨ͠gRPCͷෛՙࢄ] (https://tech.recruit-mp.co.jp/infrastructure/post-17098/)
·ͱΊ• gPRC ͍͍ͧ• ͰԿߟ͑ͣʹ࠾༻Ͱ͖ΔͷͰͳ͘ɺ৭ʑߟྀ͠ͳ͚ΕͳΒͳ͍ଟʑ͋ΔͷͰ͔ͬ͠Γͱௐࠪ, ݕ౼্ͨ͠Ͱ࠾༻͠Α͏• gRPC ͷࠓޙʹ͝ظ͍ͩ͘͞
Enjoy gRPC :)