ݺߣ

ݺߣ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

Similar to Введение в gRPC (20)

CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатора
SQALab
“Tips&Tricks&Antitricks with .Net Core backend in GameDev”
“Tips&Tricks&Antitricks with .Net Core backend in GameDev”“Tips&Tricks&Antitricks with .Net Core backend in GameDev”
“Tips&Tricks&Antitricks with .Net Core backend in GameDev”
HYS Enterprise
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169
Media Gorod
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
Aliaksandr Ikhelis
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
SQALab
Архитектура программных систем на Node.js
Архитектура программных систем на Node.jsАрхитектура программных систем на Node.js
Архитектура программных систем на Node.js
Timur Shemsedinov
Hyperledger Fabric: From Proof Of Concept to Production
Hyperledger Fabric: From Proof Of Concept to ProductionHyperledger Fabric: From Proof Of Concept to Production
Hyperledger Fabric: From Proof Of Concept to Production
Dmitry Zhvakin
Как мы измеряем наши проекты
Как мы измеряем наши проектыКак мы измеряем наши проекты
Как мы измеряем наши проекты
Rambler Android
MSDevCon 2016 DevOps Impact on Architecture
MSDevCon 2016 DevOps Impact on ArchitectureMSDevCon 2016 DevOps Impact on Architecture
MSDevCon 2016 DevOps Impact on Architecture
Sergey Baranov
Миграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудствоМиграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудство
SQALab
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
GeeksLab Odessa
DevOps
DevOps DevOps
DevOps
Liubov Belousova
2056
20562056
2056
Andrew Svetlov
New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)
Sergey Skvortsov
Презентация компании БМС Софт
Презентация компании БМС СофтПрезентация компании БМС Софт
Презентация компании БМС Софт
БМС Софт
технологическая презентация Gpu digital lab
технологическая презентация Gpu digital labтехнологическая презентация Gpu digital lab
технологическая презентация Gpu digital lab
oleg gubanov
Diplom 1
Diplom 1Diplom 1
Diplom 1
Alexander Popov
Принципы и подходы Cisco для автоматизации в сетях операторов связи
Принципы и подходы Cisco для автоматизации в сетях операторов связиПринципы и подходы Cisco для автоматизации в сетях операторов связи
Принципы и подходы Cisco для автоматизации в сетях операторов связи
Cisco Russia
разработка Metro style приложений
разработка Metro style приложенийразработка Metro style приложений
разработка Metro style приложений
Олег Винников
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатора
SQALab
“Tips&Tricks&Antitricks with .Net Core backend in GameDev”
“Tips&Tricks&Antitricks with .Net Core backend in GameDev”“Tips&Tricks&Antitricks with .Net Core backend in GameDev”
“Tips&Tricks&Antitricks with .Net Core backend in GameDev”
HYS Enterprise
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169
Media Gorod
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
Aliaksandr Ikhelis
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
SQALab
Архитектура программных систем на Node.js
Архитектура программных систем на Node.jsАрхитектура программных систем на Node.js
Архитектура программных систем на Node.js
Timur Shemsedinov
Hyperledger Fabric: From Proof Of Concept to Production
Hyperledger Fabric: From Proof Of Concept to ProductionHyperledger Fabric: From Proof Of Concept to Production
Hyperledger Fabric: From Proof Of Concept to Production
Dmitry Zhvakin
Как мы измеряем наши проекты
Как мы измеряем наши проектыКак мы измеряем наши проекты
Как мы измеряем наши проекты
Rambler Android
MSDevCon 2016 DevOps Impact on Architecture
MSDevCon 2016 DevOps Impact on ArchitectureMSDevCon 2016 DevOps Impact on Architecture
MSDevCon 2016 DevOps Impact on Architecture
Sergey Baranov
Миграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудствоМиграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудство
SQALab
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
JSLab.Тимур Шемсединов. "Архитектура программных систем на Node.js"
GeeksLab Odessa
New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)
Sergey Skvortsov
Презентация компании БМС Софт
Презентация компании БМС СофтПрезентация компании БМС Софт
Презентация компании БМС Софт
БМС Софт
технологическая презентация Gpu digital lab
технологическая презентация Gpu digital labтехнологическая презентация Gpu digital lab
технологическая презентация Gpu digital lab
oleg gubanov
Принципы и подходы Cisco для автоматизации в сетях операторов связи
Принципы и подходы Cisco для автоматизации в сетях операторов связиПринципы и подходы Cisco для автоматизации в сетях операторов связи
Принципы и подходы Cisco для автоматизации в сетях операторов связи
Cisco Russia
разработка Metro style приложений
разработка Metro style приложенийразработка Metro style приложений
разработка Metro style приложений
Олег Винников

More from Колёса Крыша Маркет (6)

Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Колёса Крыша Маркет
Интеграция и управление системами с помощью ESB
Интеграция и управление системами с помощью ESBИнтеграция и управление системами с помощью ESB
Интеграция и управление системами с помощью ESB
Колёса Крыша Маркет
Автоматизация тестирования
Автоматизация тестированияАвтоматизация тестирования
Автоматизация тестирования
Колёса Крыша Маркет
Переход на Php 7 и итоги
Переход на Php 7 и итогиПереход на Php 7 и итоги
Переход на Php 7 и итоги
Колёса Крыша Маркет
Крыша 2.0
Крыша 2.0Крыша 2.0
Крыша 2.0
Колёса Крыша Маркет
Жизнь и приключения картинки
Жизнь и приключения картинкиЖизнь и приключения картинки
Жизнь и приключения картинки
Колёса Крыша Маркет

Введение в gRPC