Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Введение в gRPC

502 views

Published on

Доклад Геннадия Карева на конференции kolesa/web

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Введение в gRPC

  1. 1. Геннадий Карев Веб разработчик
  2. 2. Кто я Веб разработчик в Mad Devs • nambataxi.kg • nambafood.kg 1 год на Golang 3 года на Python 5 лет сис. администрирования
  3. 3. Монолитная архитектура getUserInfo() getDirections() renderMap() reports()
  4. 4. Микросервисная архитектура getUserInfo() Server getDirections() Server Stub renderMap() Stub reports() Server Stub
  5. 5. Сложности в микросервисной архитектуре ● и т.д. ● Дебаггинг ● Мониторинг ● Стриминг данных ● Взаимодействие между языками ● Безопасность / Аутентификация ● Сериализация данных ● Скорость общения по сети
  6. 6. gRPC фреймворк от Google для удаленного вызова процедур
  7. 7. Protocol Buffers
  8. 8. Protocol Buffers IDL (Язык описания интерфейсов) Описывает и генерирует интерфейсы для разных языков программирования. Модель данных Структуры запросов и ответов. Бинарный формат Для передачи данных. syntax = “proto3”; message Profile { string name = 1; int32 id = 2; string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { string number = 1; PhoneType type = 2; } repeated PhoneNumber phone = 4; }
  9. 9. Определение Сервисов service RouteGuide { rpc GetPlace(Point) returns (Place); rpc RouteChat(stream RouteNote) returns (stream RouteNote); } message Point { int32 Latitude = 1; • int32 Longitude = 2; } message RouteNote { Point location = 1; string message = 2; } message Place { string name = 1; Point location = 2; }
  10. 10. Protocol Buffers HTTP/2
  11. 11. https://http2.golang.org/gophertiles HTTP/2 HTTP/2HTTP/1.1
  12. 12. HTTP/2 Мультиплексинг HTTP/2 HTTP/1.x
  13. 13. HTTP/2 Двунаправленный стриминг
  14. 14. HTTP/2 HTTPS
  15. 15. Protocol Buffers HTTP/2 Множество Языков
  16. 16. C/C++
  17. 17. Ruby Service gRPC server Go Service gRPC server gRPC Stub Java Service gRPC Stub Python Service gRPC server gRPC Stub Поддержка разных языков
  18. 18. Кто использует gRPC
  19. 19. Установка утилит $ brew install protobuf # Библиотеки protoc-gen $ go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
  20. 20. Helloworld.proto syntax = “proto3”; package helloworld; service Greeter { rpc SayHello (HelloRequest) return (HelloReply); } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
  21. 21. Генерируем код $ protoc -I pb pb/helloworld.proto --go_out=plugins=grpc:helloworld
  22. 22. Greeter server func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { return &pb.HelloReply{Message: "Hello " + in.Name}, nil } func main() { lis, _ := net.Listen("tcp", port) s := grpc.NewServer() pb.RegisterGreeterServer(s, &server{}) reflection.Register(s) _ := s.Serve(lis); }
  23. 23. Greeter Client func main() { conn, _ := grpc.Dial(address, grpc.WithInsecure()) defer conn.Close() c := pb.NewGreeterClient(conn) name := defaultName if len(os.Args) > 1 { name = os.Args[1] } r, _ := c.SayHello(context.Background(), &pb.HelloRequest{Name: name}) log.Printf("Greeting: %s", r.Message) }
  24. 24. Запуск $ greeter_server & $ greeter_client Gennady $ 2017/04/14 21:58:44 Greeting: Hello Gennady
  25. 25. Хочешь узнать больше? Документация и код • http://www.grpc.io • https://github.com/grpc • https://github.com/grpc-ecosystem Помощь и поддержка • https://gitter.im/grpc/grpc • https://groups.google.com/forum/#!forum/grpc-io
  26. 26. Контакты ● @maddevsio ● https://maddevs.io ● https://blog.maddevs.io

×