gRPC

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ

  • Помимо batch-запросов (это ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ запросы, Ρ‚Π°ΠΊ сдСлано Π² JSON RPC), ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ стриминговыС запросы (ΠΊΠ°Π½Π°Π» Π½Π΅ закрываСтся сСтСвой, запросы ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ΡΡ)

  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ΠΎΠ² ΠΈ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ запросов Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° (Π² HTTP Π½Π°ΠΌ самим приходится ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ всякиС Request ID, ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Ρ€Π΅Ρ‚Ρ€Π°Π΅Π² ΠΈ Ρ‚ΠΏ). А Ρ‚ΡƒΡ‚ пСрСдаСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ информация

  • Для описания Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° сообщСний ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ IDL. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ наши сообщСния ΠΊΠ°ΠΊ Π½Π°ΠΌ ΡƒΠ΄ΠΎΠ±Π½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· json ΠΈΠ»ΠΈ proto).

ΠšΠΎΠ΄ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡ

ΠŸΡƒΡΡ‚ΡŒ Π΅ΡΡ‚ΡŒ ΠΊΡƒΡ‡Π° ΠΏΡ€ΠΎΡ‚ΠΎΡ„Π°ΠΉΠ»ΠΎΠ² с описаниСм gRPC-сСрвисов

web/
    account/
        some.proto
    admin/
        some.proto
    ...

НастраиваСм срСду (python)

$ python3 -m venv .venv
$ source .venv/bin/activate

$ python -m pip install grpcio
$ python -m pip install grpcio-tools

Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ python-ΠΊΠΎΠ΄ (pb2 ΠΈ grpc ΠΊΠΎΠ΄)

python -m grpc_tools.protoc -I /full/path/to/proto/root/directory --python_out=. --grpc_python_out=. /full/path/to/proto/root/directory/web/*/*.proto

ЗапускаСм ΠΊΠΎΠ΄

$ python greeter_server.py
$ python greeter_client.py

gRPC ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹

Достаточно слоТно Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ gRPC API, Π½Π΅ имСя исходных proto-Ρ„Π°ΠΉΠ»ΠΎΠ².

На сколько этот gRPC ΠΊΠ»ΠΈΠ΅Π½Ρ‚ унивСрсалСн? https://github.com/ktr0731/evans

grpc_cli β€” Π°Π½Π°Π»ΠΎΠ³ curl для gRPC-сСрвисов

Бписок сСрвисов Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ:
$ grpc_cli ls localhost:8080

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ информация ΠΏΡ€ΠΎ сСрвис:
$ grpc_cli ls localhost:8080 helloworld.Greeter -l

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ информация ΠΏΡ€ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄:
$ grpc_cli ls localhost:8080 helloworld.Greeter.SayHello -l

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ сообщСний:
$ grpc_cli type localhost:8080 helloworld.HelloRequest

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ запроса:
$ grpc_cli call localhost:8080 SayHello "name: 'gRPC CLI'"

Π•ΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ cli evans

Аналог Postman/Insomnia β€” BloomRPC (Π½ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Postman ΡƒΠΆΠ΅ ΡƒΠΌΠ΅Π΅Ρ‚ Π² gRPC).

grpcdump β€” для ΠΎΡ‚Π»ΠΎΠ²Π° ΠΈ дСкодирования gRPC запросов:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ сСрвису Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ 8080
$ grpcdump -i io -p 8080 -proto-path ./grpc/protofiles -proto-files helloworld.prot |

Last updated