SlideShare a Scribd company logo
1 of 27
Download to read offline
Геннадий Карев
Веб разработчик
Кто я
Веб разработчик в 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 для удаленного вызова процедур
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

What's hot

What's hot (20)

gRPC vs REST: let the battle begin!
gRPC vs REST: let the battle begin!gRPC vs REST: let the battle begin!
gRPC vs REST: let the battle begin!
 
DevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágilDevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágil
 
GRPC.pptx
GRPC.pptxGRPC.pptx
GRPC.pptx
 
Functional Tests Automation with Robot Framework
Functional Tests Automation with Robot FrameworkFunctional Tests Automation with Robot Framework
Functional Tests Automation with Robot Framework
 
Build microservice with gRPC in golang
Build microservice with gRPC in golangBuild microservice with gRPC in golang
Build microservice with gRPC in golang
 
Neoload
Neoload Neoload
Neoload
 
Introduction to robot framework
Introduction to robot frameworkIntroduction to robot framework
Introduction to robot framework
 
Performance testing using jmeter
Performance testing using jmeterPerformance testing using jmeter
Performance testing using jmeter
 
Postman Webinar: “Continuous Testing with Postman”
Postman Webinar: “Continuous Testing with Postman”Postman Webinar: “Continuous Testing with Postman”
Postman Webinar: “Continuous Testing with Postman”
 
gRPC and Microservices
gRPC and MicroservicesgRPC and Microservices
gRPC and Microservices
 
Software testing and game testing
Software testing and game testingSoftware testing and game testing
Software testing and game testing
 
Holistic testing in DevOps
Holistic testing in DevOpsHolistic testing in DevOps
Holistic testing in DevOps
 
Postman An Introduction for Testers, October 26 2022.pptx
Postman An Introduction for Testers, October 26 2022.pptxPostman An Introduction for Testers, October 26 2022.pptx
Postman An Introduction for Testers, October 26 2022.pptx
 
Testes automatizados com Cypress
Testes automatizados com CypressTestes automatizados com Cypress
Testes automatizados com Cypress
 
Xray for Jira - How to automate your QA process
Xray for Jira - How to automate your QA processXray for Jira - How to automate your QA process
Xray for Jira - How to automate your QA process
 
BDD with Cucumber
BDD with CucumberBDD with Cucumber
BDD with Cucumber
 
Android Automation Testing with Selendroid
Android Automation Testing with SelendroidAndroid Automation Testing with Selendroid
Android Automation Testing with Selendroid
 
Introducing Playwright's New Test Runner
Introducing Playwright's New Test RunnerIntroducing Playwright's New Test Runner
Introducing Playwright's New Test Runner
 
Introduction to gRPC: A general RPC framework that puts mobile and HTTP/2 fir...
Introduction to gRPC: A general RPC framework that puts mobile and HTTP/2 fir...Introduction to gRPC: A general RPC framework that puts mobile and HTTP/2 fir...
Introduction to gRPC: A general RPC framework that puts mobile and HTTP/2 fir...
 
Cypress Automation
Cypress  AutomationCypress  Automation
Cypress Automation
 

Similar to Введение в gRPC / Introduction to gRPC

Видеозвонки и шаринг экрана в мобильном приложении
Видеозвонки и шаринг экрана в мобильном приложенииВидеозвонки и шаринг экрана в мобильном приложении
Видеозвонки и шаринг экрана в мобильном приложении
Voximplant
 
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest
 
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169
Media Gorod
 

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

Введение в gRPC
Введение в gRPCВведение в gRPC
Введение в gRPC
 
Введение в gRPC
Введение в gRPCВведение в gRPC
Введение в gRPC
 
Node.js for enterprise 2021 - JavaScript Fwdays 3
Node.js for enterprise 2021 - JavaScript Fwdays 3Node.js for enterprise 2021 - JavaScript Fwdays 3
Node.js for enterprise 2021 - JavaScript Fwdays 3
 
[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатора
 
“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”
 
Миграция БД - практический_подход с инструментами Embarcadero
Миграция БД - практический_подход с инструментами EmbarcaderoМиграция БД - практический_подход с инструментами Embarcadero
Миграция БД - практический_подход с инструментами Embarcadero
 
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
 
Видеозвонки и шаринг экрана в мобильном приложении
Видеозвонки и шаринг экрана в мобильном приложенииВидеозвонки и шаринг экрана в мобильном приложении
Видеозвонки и шаринг экрана в мобильном приложении
 
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 
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
 
Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169
 
MSDevCon 2016 DevOps Impact on Architecture
MSDevCon 2016 DevOps Impact on ArchitectureMSDevCon 2016 DevOps Impact on Architecture
MSDevCon 2016 DevOps Impact on Architecture
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
 
Как мы измеряем наши проекты
Как мы измеряем наши проектыКак мы измеряем наши проекты
Как мы измеряем наши проекты
 
Миграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудствоМиграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудство
 
2056
20562056
2056
 
Yacovlev
YacovlevYacovlev
Yacovlev
 

More from Mad Devs

Mad Stream: Software Architecture 101.
Mad Stream: Software Architecture 101. Mad Stream: Software Architecture 101.
Mad Stream: Software Architecture 101.
Mad Devs
 
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Devs
 

More from Mad Devs (20)

Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
 
Дружелюбнй онбординг: как с увеличением количества не потерять качество
Дружелюбнй онбординг: как с увеличением количества не потерять качество Дружелюбнй онбординг: как с увеличением количества не потерять качество
Дружелюбнй онбординг: как с увеличением количества не потерять качество
 
Mad Stream: Software Architecture 101.
Mad Stream: Software Architecture 101. Mad Stream: Software Architecture 101.
Mad Stream: Software Architecture 101.
 
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
 
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy FedorenkoMad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
 
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
 
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий КононенкоMaв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
 
Лайфхаки менеджмента на удаленке от Дмитрия Кононенко
Лайфхаки менеджмента на удаленке от Дмитрия КононенкоЛайфхаки менеджмента на удаленке от Дмитрия Кононенко
Лайфхаки менеджмента на удаленке от Дмитрия Кононенко
 
Mad Talks. Astashov_splitbrain
Mad Talks. Astashov_splitbrainMad Talks. Astashov_splitbrain
Mad Talks. Astashov_splitbrain
 
Flutter vs Native App Development
Flutter vs Native App DevelopmentFlutter vs Native App Development
Flutter vs Native App Development
 
Mad Talks. Marketing tips for tech companies
Mad Talks. Marketing tips for tech companiesMad Talks. Marketing tips for tech companies
Mad Talks. Marketing tips for tech companies
 
The paradox of choice in design
The paradox of choice in designThe paradox of choice in design
The paradox of choice in design
 
Git and Github for Beginners
Git and Github for Beginners Git and Github for Beginners
Git and Github for Beginners
 
How to hire freelancers
How to hire freelancersHow to hire freelancers
How to hire freelancers
 
Ethereum blockchain
Ethereum blockchainEthereum blockchain
Ethereum blockchain
 
"Outside In". Web application testing.
"Outside In". Web application testing."Outside In". Web application testing.
"Outside In". Web application testing.
 
Asynchrony in python exists and why should you use it
Asynchrony in python exists and why should you use itAsynchrony in python exists and why should you use it
Asynchrony in python exists and why should you use it
 
Ethereum: аспекты разработки смарт-контрактов
Ethereum: аспекты разработки смарт-контрактовEthereum: аспекты разработки смарт-контрактов
Ethereum: аспекты разработки смарт-контрактов
 
Why we sleep. Michael Ivashenko
Why we sleep. Michael IvashenkoWhy we sleep. Michael Ivashenko
Why we sleep. Michael Ivashenko
 
Удаленное управление приложением и его аналитика
Удаленное управление приложением и его аналитикаУдаленное управление приложением и его аналитика
Удаленное управление приложением и его аналитика
 

Введение в gRPC / Introduction to gRPC