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

gRPC at OA Dev team

gRPC at OA Dev team

奥山 裕也 (LINE / 開発4センター / Official Account開発室)
いま、OA Dev チームではOAに関する新規サービスを開発しており、サーバー API を Kotlin と gRPC で実装しています。 また、gRPC フレームワークとしては、社内製マイクロサービスフレームワーク Armeria を採用しています。"gRPC 便利そう"、"趣味で触ったことあるけど..." という方は多いと思いますが、サービス開発では使ったことがない方が多いかもしれません。サービス開発で使うには、ロギングやトレーシング、ロードバランシング、エラーハンドリング、ドキュメンテーションといったことが必須になってきます。このセッションでは、OA Dev チームにおける Armeria による gRPC サーバー開発についてご紹介します。

LINE Developers

July 29, 2020
Tweet

More Decks by LINE Developers

Other Decks in Technology

Transcript

  1. About me • Yuya Okuyama • 2019೥4݄ೖࣾ • Official Account

    ։ൃࣨ • LINEެࣜΞΧ΢ϯτؔ࿈ͷ৽نαʔϏε ( ) • line-bot-sdk-python ϝϯς 2
  2. Outline • What’s gRPC? • gRPC at OA Dev •

    Our system overview • gRPC server built with Armeria • Error handling • Documentation • Summary 3
  3. What’s gRPC • Google ͕։ൃͨ͠ RPC ϑϨʔϜϫʔΫ. ݱࡏ͸, ͷϓϩδΣΫτ. •

    Protocol Buffers (ΠϯλʔϑΣΠεఆٛݴޠ) • εΩʔϚϑΝʔετͳ։ൃ • ಛఆͷݴޠʹґଘ͠ͳ͍ϝοηʔδ΍αʔϏεͷఆٛ • JSON ͱͷ૬ޓม׵ • લํ/ޙํޓ׵ੑΛอͭมߋ • ίϯύΫτ͔ͭޮ཰తͳΤϯίʔσΟϯά • HTTP/2 ͰσʔλΛૹड৴͢Δ • ૒ํ޲௨৴ 5
  4. gRPC at LINE 6 • Our service • LINE Official

    Account • LINE LIVE Commerce • LINE MUSIC • LINE Financial • etc. • Java, Kotlin, Scala • Go • Python • JavaScript (gRPC-Web) Services Languages Thrift http://thrift.apache.org/ Facebook ੡ͷ RPC ϑϨʔϜϫʔΫ. ࣾ಺ͷଟ͘ͷՕॴͰར༻͞Ε͍ͯΔ.
  5. What should we do to deploy gRPC app? • Logging

    • Metrics • Distributed tracing • Circuit breaker • Retry • Load balancing • Debug tool • Error handling • Documentation 7
  6. Our system overview 9 #SPXTFS 1BSUOFS4ZTUFN 0UIFS5FBN 4FSWJDF 4FSWJDF 4FSWJDF

    --# REST gRPC gRPC 3&45H31$ 1SPYZ gRPC REST Our service 1SPYZ gRPC
  7. Our system overview 10 #SPXTFS 1BSUOFS4ZTUFN 0UIFS5FBN 4FSWJDF 4FSWJDF 4FSWJDF

    --# REST gRPC gRPC 3&45H31$ 1SPYZ gRPC REST Our service 1SPYZ gRPC 1SPYZͰMPBECBMBODJOH
  8. Our system overview 11 #SPXTFS 1BSUOFS4ZTUFN 0UIFS5FBN 4FSWJDF 4FSWJDF 4FSWJDF

    --# REST gRPC gRPC 3&45H31$ 1SPYZ gRPC REST &OWPZ΍HSQDHBUFXBZ (P ͸࢖Θͣ 4QSJOHͰखॻ͖ ࣾ֎αʔόʔ͔Βݺ͹ΕΔͷͰ ॊೈͰӡ༻ίετͷͳ͍ํ๏ʹ Our service 1SPYZ gRPC 1SPYZͰMPBECBMBODJOH
  9. gRPC server built with 12 • gRPC ϑϨʔϜϫʔΫͱͯ͠, LINE ੡ϚΠΫϩαʔϏεϑϨʔϜϫʔΫ

    Armeria Λ࠾༻. • Reasons: • LogNet/grpc-spring-boot-starter, yidongnan/grpc-spring-boot-starter ΑΓ׆ൃ • ࣾ಺੡ͳͷͰ feature request ͠΍͍͢ • ࣾ֎ͷํͰ΋ line-armeria.slack.com Ͱؾܰʹ • grpc/grpc-java ͷ interface Λ࢖͍ͬͯΔͷͰ, gRPC ΤίγεςϜ͔Βҳ୤͠ͳ͍ • ศརͰଟ࠼ͳػೳ: • ϚΠΫϩαʔϏεͰఆ൪ͳػೳ͕؆୯ʹ࢖͑Δ • Client-side load balancing and service discovery • Circuit breaker • Retry • Distributed tracing (Zipkin) • DocService (Swagger UI తͳը໘)
  10. Armeria: Very easy to use many features 13 gRPC server

    H31$TFSWJDFͷ࣮૷Λ౉͢ $POUFOUUZQFʹԠͯ͡  +40/ͰγϦΞϥΠζ͢Δઃఆ΋ %JTUSJCVUFEUSBDJOH ;JQLJO
  11. Armeria: Very easy to use many features 14 gRPC client

    $MJFOUTJEFMPBECBMBODJOH %/4CBTFETFSWJDFEJTDPWFSZ
  12. What should we do to deploy gRPC app? (reappeared) •

    Logging • Metrics • Distributed tracing • Circuit breaker • Retry • Load balancing • Debug tool • Error handling • Documentation 17 }
  13. Error handling • REST ͱҧͬͯ, ΤϥʔϖΠϩʔυΛ HTTP Body Ͱฦͤͳ͍ •

    ํ๏ • grpc-status, grpc-message ͷΈΛฦ͢ • શͯͷϨεϙϯεఆٛʹΤϥʔ༻ͷϑΟʔϧυΛ௥Ճ͢Δ • google/rpc/error_details.proto Λ Metadata (http header) ʹؚΊͯฦ͢ • ࣗ෼Ͱఆٛͨ͠ϝοηʔδΛ Metadata (http header) ʹؚΊͯฦ͢ 18
  14. Error handling • REST ͱҧͬͯ, ΤϥʔϖΠϩʔυΛ HTTP Body Ͱฦͤͳ͍ •

    ํ๏ • grpc-status, grpc-message ͷΈΛฦ͢ • શͯͷϨεϙϯεఆٛʹΤϥʔ༻ͷϑΟʔϧυΛ௥Ճ͢Δ • google/rpc/error_details.proto Λ Metadata (http header) ʹؚΊͯฦ͢ • ࣗ෼Ͱఆٛͨ͠ϝοηʔδΛ Metadata (http header) ʹؚΊͯฦ͢ 19
  15. Error handling: Returning custom error message 21 proto Server Client

    ϖΠϩʔυΛ ProtoBuf ͰόΠφϦΤϯίʔυͯ͠, Metadata (http header) ܦ༝ͰૹΔ
  16. Error handling: Returning custom error message 22 proto Server Client

    ϖΠϩʔυΛ ProtoBuf ͰόΠφϦΤϯίʔυͯ͠, Metadata (http header) ܦ༝ͰૹΔ ड͚औΓख͕ࣗ෼ͰσγϦΞϥΠζ͢Δ
  17. What should we do to deploy gRPC app? (reappeared) •

    Logging • Metrics • Distributed tracing • Circuit breaker • Retry • Load balancing • Debug tool • Error handling • Documentation 24 } Metadata ʹΤϥʔϖΠϩʔυΛؚΊΔ protoc-gen-docs
  18. How was gRPC? • εΩʔϚϑΝʔετ • ࣮૷Ͱ͸ͳ͘εΩʔϚ(࢓༷)͕͋ΔͷͰ, ίʔυϨϏϡʔ͕͠΍͍͢ • proto

    ϑΝΠϧͰؔ਺໊΍ϑΟʔϧυ໊ͷมߋΛιʔείʔυ΁มߋ͢Δͷ͕πϥ͍ • HTTP/2 • ࣾ಺LB, Nginx Ͱ͸ଟগ໘౗͕ͩͬͨ, େͨ͠໰୊͸ͳ͔ͬͨ • ΤίγεςϜ • CLI ͔ΒϦΫΤετ͢ΔͨΊͷ gRPCurl,υΩϡϝϯτΛੜ੒͢Δ protoc-gen-docs
 ͳͲ, ศརͳπʔϧ͸ͦͦ͋͜͜Δ • GUI Client ΋͍͔ͭ͋͘Δ͕, Ϧονͳػೳ͸ͳ͍ 25
  19. Takeaways • LINE ࣾͰ΋গͣͭ͠ gRPC ͕ϓϩμΫγϣϯͰ࢖ΘΕ͍ͩͯ͠Δ • (For Java,) Armeria

    Λ࢖͑͹, production ready ͳ gRPC αʔόʔΛ؆୯ʹߏஙͰ͖Δ • gRPC Ͱͷ error handling ͸ REST ΑΓͪΐͬͱ໘౗ • εΩʔϚϑΝʔετͩͱ, ϨϏϡʔ΋υΩϡϝϯτੜ੒΋͠΍͍͢ 27