ݺߣ

ݺߣShare a Scribd company logo
Геннадий Карев
Веб разработчик
Кто я
Веб разработчик в Mad Devs
• nambataxi.kg
• nambafood.kg
1 год на Golang
3 года на Python
5 лет сис. администрирования
Монолитная архитектура
getUserInfo()
getDirections()
renderMap()
reports()
Микросервисная архитектура
getUserInfo()
Server
getDirections()
Server
Stub
renderMap()
Stub
reports()
Server
Stub
Сложности
в микросервисной
архитектуре
● и т.д.
● Дебаггинг
● Мониторинг
● Стриминг данных
● Взаимодействие между языками
● Безопасность / Аутентификация
● Сериализация данных
● Скорость общения по сети
gRPC фреймворк от Google для удаленного вызова процедур
Введение в gRPC
Protocol Buffers
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;
}
Определение Сервисов
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;
}
Protocol Buffers
HTTP/2
https://http2.golang.org/gophertiles
HTTP/2
HTTP/2HTTP/1.1
HTTP/2
Мультиплексинг
HTTP/2
HTTP/1.x
HTTP/2
Двунаправленный
стриминг
HTTP/2
HTTPS
Protocol Buffers
HTTP/2
Множество Языков
C/C++
Ruby Service
gRPC server
Go Service
gRPC server
gRPC
Stub
Java Service
gRPC
Stub
Python Service
gRPC server
gRPC
Stub
Поддержка разных языков
Кто использует gRPC
Установка утилит
$ brew install protobuf
# Библиотеки protoc-gen
$ go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
Helloworld.proto
syntax = “proto3”;
package helloworld;
service Greeter {
rpc SayHello (HelloRequest) return (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Генерируем код
$ protoc -I pb pb/helloworld.proto --go_out=plugins=grpc:helloworld
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);
}
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)
}
Запуск
$ greeter_server &
$ greeter_client Gennady
$ 2017/04/14 21:58:44 Greeting: Hello Gennady
Хочешь узнать больше?
Документация и код
• 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
Контакты
● @maddevsio
● https://maddevs.io
● https://blog.maddevs.io

More Related Content

Введение в gRPC