SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Downloaden Sie, um offline zu lesen
Заряжаем микросервисы
на успех с помощью
gRPC and Protocol Buffers
Алексей Диденко
BigCommerce Inc.
Кто Я?
Борюсь с умирающим PHP почти с пеленок.
Более 12 лет :)
Евангелист Symfony с момента первого релиза.
Научился работать с 10-летним кодом и
сохранять спокойствие.
Творю “великие дела” в BigCommerce.
Что общего у этих компаний?
Что общего у этих компаний?
От монолита к микросервисам
PHP
PHP PHP
PHP PHP
PHP PHP
PHP
PHP
PHP PHP
PHP
PHP
PHP
Scala
PHP
PHP
PHP
Scala
PHP
Ruby
От монолита к микросервисам
“Эффективная” коммуникация
Требования к межсервисному взаимодействию
Описание протокола API должно быть строго декларативным.
Контракт должен быть однозначным и человеко-понятным, необходимо проводить (code)
review.
Возможность описания как и успешного сценария так и ошибки. При чем это должно
делаться явно для каждого метода.
“Скучный” код должен быть автогенерирован из контракта для PHP, Scala, GO и Ruby
Возможные решения
Возможные решения
SOAP
Stateful - необходимо состояние как и сервера,
так и клиента.
Требует наличие клиентской библиотеки.
Многие языки не поддерживают
Требует много вычислительных ресурсов, в
результате - низкое быстродействие.
Раздувает данные в несколько раз (XML)
Сложен для разработчиков в использовании
RPC over RabbitMQ
REST?
Приложение (микросервис)
1. Открываем HTTP соединение с сервером
2. Формируем и отправляем HTTP запрос.
3. Ждем ответ!
Документация
REST
API
Url: https//api.domain.com/products
Method: POST
Body: {“name”: “new product”}
REST?
Приложение (микросервис)
1. Открываем HTTP соединение с сервером
2. Формируем и отправляем HTTP запрос.
3. Ждем ответ!
4. Парсими валидируем ответ
Документация
REST
API
Url: https//api.domain.com/products
Method: POST
Body: {“name”: “new product”}
{
“id”: 12344
“name”: “new product”
}
REST замечателен!
Легко понять что происходит и как работает
(текстовая репрезентация)
Построен на основе HTTP методов
Легко дебажить
Низкая зависимость сервера и клиента
Высококачественная имплементация на многих
языках
Но не всегда...
REST - это про ресурсы. Сложно смоделировать не CRUD операции.
Нет формального (машино-удобного) описания API контракта, реализация клиентов
требует участия человека. Люди не любят создавать клиентских библиотек :)
Проблемы со стримингом данных, невозможность двустроннего стриминга.
Неэффективность: передача текста по сети не оптимально.
Сложность получения множества ресурсов в одном запросе.
Частичное решение
+ Множество кодогенераторов клиентов, server
stubs (swagger-codegen, AutoRest, oas-nodegen,
APIMATIC).
+Отлична сгенерированная документация с
“песочницей”
− Большие и длинные JSON: сложность при code
review.
− Не форсирует подход “Contract first”.
− Сложно описать корректный API в одном стиле:
разные точки зрения на REST :)
100% подходящее решение: gRPC + Protocol Buffers
Очередной стандарт?
Что такое gRPC?
“gRPC is a modern open
source high performance
Remote Procedure Call
framework that can run in any
environment.
grpc.io
Первый шаг - декларация
контракта.
Protocol Buffers v3
syntax = "proto3";
// The contacts service definition.
service Contacts {
// Perform a search.
rpc Search (Request) returns (Response);
}
// The request message containing the search params.
message Request {
// The text to search for.
string text = 1;
}
// The response message containing the search results.
message Response {
// The list of results.
repeated User results = 1;
}
// User.
message User {
string name = 1;
bool active = 2;
}
● Единый источник истины.
● Строгая типизация.
● Правила осуществления обратной
совместимости.
● Эффективное бинарное
представление.
● Комплексное руководство по стилю
написания.
Генерация кода из Protocol Buffer
protoc
*.proto
PHP: автогенерируемый клиент
PHP: использование
gRPC workflow
Мультиплатформенность
gRPC использует HTTP/2 как транспорт
gRPC: двунаправленный стриминг
Дедлайны/Таймауты
Отмены
Аутентификация
● SSL/TLS: gRPC has SSL/TLS integration and promotes the
use of SSL/TLS to authenticate the server, and to encrypt all
the data exchanged between the client and the server.
Optional mechanisms are available for clients to provide
certificates for mutual authentication.
● Token-based authentication with Google: gRPC provides a
generic mechanism (described below) to attach metadata
based credentials to requests and responses. Additional
support for acquiring access tokens (typically OAuth2 tokens)
while accessing Google APIs through gRPC is provided for
certain auth flows: you can see how this works in our code
examples below. In general this mechanism must be used as
well as SSL/TLS on the channel - Google will not allow
connections without SSL/TLS, and most gRPC language
implementations will not let you send credentials on an
unencrypted channel.
grpc.io
Производительность
Производительность
Как обстоят дела с PHP?
Also note that currently you can only create clients
in PHP for gRPC services - you can find out how
to create gRPC servers in our other tutorials…
- grpc.io
Как обстоят дела с PHP?
Also note that currently you can only create clients
in PHP for gRPC services - you can find out how
to create gRPC servers in our other tutorials…
- grpc.io
“Пхпшники не сдаются!”
● FastCGI Proxy (Go, Rust)
● Spiral: gRPC сервер на основе
RoadRunner.
FastCGI Proxy
1. Принимаем запрос;
2. Вынимаем из него тело, сериализованное в Protobuf;
3. Формируем заголовки для FastCGI-запроса;
4. Отправляем FastCGI-запрос в PHP-FPM;
5. В PHP обрабатываем запрос. Формируем ответ;
6. Получаем ответ, конвертируем в gRPC, отправляем адресату;
Postman для gRPC: BloomRPC
Инструменты разработчика
 gRPC command line tool
выводит список доступных сервисов для порта
grpc_cli ls localhost:50051
выводит список методов для сервиса
grpc_cli ls localhost:50051 helloworld.Greeter.SayHello -l
инспектирует список сообщений для метода
grpc_cli type localhost:50051 helloworld.HelloRequest
унарный вызов метода
$ grpc_cli call localhost:50051 SayHello"name: 'gRPC CLI'"
proto-gen-lint
проверяет .proto на соответствие
официальному руководству по
стилю Google’s Protocol Buffers
protoc --lint_out=. *.proto
Трансформация gRPC в REST API: grpc-gateway
Цель REST(HTTP+JSON) gRPC
Единый источник истины ✗ ✔
Мультиплатформенность +
мультиязычность
✗ ✔
Обработка ‘non-breaking’ изменений ✗ ✔
Сеть: обработка запросов ✗ (1 запрос на соединение) ✔ (множество запросов на
соединение)
Скорость: передача данных Текст ✗ Бинарный ✔
CPU: оптимальное использование ресурсов ✗ ✔
Трассировка Вручную ✗ Легко подключить ✔
Логирование Вручную ✗ Легко подключить ✔
Мониторинг Вручную ✗ Легко подключить ✔
COMPATIBILITYPERFORMANCEMAINTENANCE
Во-первых, перестаньте писать интерфейсный
код для вашего API вручную.
Во-вторых, перестаньте писать интерфейсный
код для вашего API вручную.
В-третьих, перестаньте писать интерфейсный
код для вашего API вручную.
Обращайте больше внимания на методологию
создания вашего API.
Разработайте и используйте руководства по
стилю вашего API вручную.
В конце концов, исользуйте OpenAPI или gRPC.
Power-up micro-services with gRPC and ProtoBuffers

Weitere ähnliche Inhalte

Empfohlen

Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Saba Software
 
Introduction to C Programming Language
Introduction to C Programming LanguageIntroduction to C Programming Language
Introduction to C Programming Language
Simplilearn
 

Empfohlen (20)

How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
 
Introduction to C Programming Language
Introduction to C Programming LanguageIntroduction to C Programming Language
Introduction to C Programming Language
 

Power-up micro-services with gRPC and ProtoBuffers

  • 1. Заряжаем микросервисы на успех с помощью gRPC and Protocol Buffers Алексей Диденко BigCommerce Inc.
  • 2. Кто Я? Борюсь с умирающим PHP почти с пеленок. Более 12 лет :) Евангелист Symfony с момента первого релиза. Научился работать с 10-летним кодом и сохранять спокойствие. Творю “великие дела” в BigCommerce.
  • 3. Что общего у этих компаний?
  • 4. Что общего у этих компаний?
  • 5. От монолита к микросервисам PHP PHP PHP PHP PHP PHP PHP PHP PHP PHP PHP PHP PHP PHP Scala PHP PHP PHP Scala PHP Ruby
  • 6. От монолита к микросервисам
  • 8. Требования к межсервисному взаимодействию Описание протокола API должно быть строго декларативным. Контракт должен быть однозначным и человеко-понятным, необходимо проводить (code) review. Возможность описания как и успешного сценария так и ошибки. При чем это должно делаться явно для каждого метода. “Скучный” код должен быть автогенерирован из контракта для PHP, Scala, GO и Ruby
  • 11. SOAP Stateful - необходимо состояние как и сервера, так и клиента. Требует наличие клиентской библиотеки. Многие языки не поддерживают Требует много вычислительных ресурсов, в результате - низкое быстродействие. Раздувает данные в несколько раз (XML) Сложен для разработчиков в использовании
  • 13. REST? Приложение (микросервис) 1. Открываем HTTP соединение с сервером 2. Формируем и отправляем HTTP запрос. 3. Ждем ответ! Документация REST API Url: https//api.domain.com/products Method: POST Body: {“name”: “new product”}
  • 14. REST? Приложение (микросервис) 1. Открываем HTTP соединение с сервером 2. Формируем и отправляем HTTP запрос. 3. Ждем ответ! 4. Парсими валидируем ответ Документация REST API Url: https//api.domain.com/products Method: POST Body: {“name”: “new product”} { “id”: 12344 “name”: “new product” }
  • 15. REST замечателен! Легко понять что происходит и как работает (текстовая репрезентация) Построен на основе HTTP методов Легко дебажить Низкая зависимость сервера и клиента Высококачественная имплементация на многих языках
  • 16. Но не всегда... REST - это про ресурсы. Сложно смоделировать не CRUD операции. Нет формального (машино-удобного) описания API контракта, реализация клиентов требует участия человека. Люди не любят создавать клиентских библиотек :) Проблемы со стримингом данных, невозможность двустроннего стриминга. Неэффективность: передача текста по сети не оптимально. Сложность получения множества ресурсов в одном запросе.
  • 17. Частичное решение + Множество кодогенераторов клиентов, server stubs (swagger-codegen, AutoRest, oas-nodegen, APIMATIC). +Отлична сгенерированная документация с “песочницей” − Большие и длинные JSON: сложность при code review. − Не форсирует подход “Contract first”. − Сложно описать корректный API в одном стиле: разные точки зрения на REST :)
  • 18. 100% подходящее решение: gRPC + Protocol Buffers
  • 20. Что такое gRPC? “gRPC is a modern open source high performance Remote Procedure Call framework that can run in any environment. grpc.io
  • 21. Первый шаг - декларация контракта. Protocol Buffers v3 syntax = "proto3"; // The contacts service definition. service Contacts { // Perform a search. rpc Search (Request) returns (Response); } // The request message containing the search params. message Request { // The text to search for. string text = 1; } // The response message containing the search results. message Response { // The list of results. repeated User results = 1; } // User. message User { string name = 1; bool active = 2; } ● Единый источник истины. ● Строгая типизация. ● Правила осуществления обратной совместимости. ● Эффективное бинарное представление. ● Комплексное руководство по стилю написания.
  • 22. Генерация кода из Protocol Buffer protoc *.proto
  • 27. gRPC использует HTTP/2 как транспорт
  • 31. Аутентификация ● SSL/TLS: gRPC has SSL/TLS integration and promotes the use of SSL/TLS to authenticate the server, and to encrypt all the data exchanged between the client and the server. Optional mechanisms are available for clients to provide certificates for mutual authentication. ● Token-based authentication with Google: gRPC provides a generic mechanism (described below) to attach metadata based credentials to requests and responses. Additional support for acquiring access tokens (typically OAuth2 tokens) while accessing Google APIs through gRPC is provided for certain auth flows: you can see how this works in our code examples below. In general this mechanism must be used as well as SSL/TLS on the channel - Google will not allow connections without SSL/TLS, and most gRPC language implementations will not let you send credentials on an unencrypted channel. grpc.io
  • 34. Как обстоят дела с PHP? Also note that currently you can only create clients in PHP for gRPC services - you can find out how to create gRPC servers in our other tutorials… - grpc.io
  • 35. Как обстоят дела с PHP? Also note that currently you can only create clients in PHP for gRPC services - you can find out how to create gRPC servers in our other tutorials… - grpc.io “Пхпшники не сдаются!” ● FastCGI Proxy (Go, Rust) ● Spiral: gRPC сервер на основе RoadRunner.
  • 36. FastCGI Proxy 1. Принимаем запрос; 2. Вынимаем из него тело, сериализованное в Protobuf; 3. Формируем заголовки для FastCGI-запроса; 4. Отправляем FastCGI-запрос в PHP-FPM; 5. В PHP обрабатываем запрос. Формируем ответ; 6. Получаем ответ, конвертируем в gRPC, отправляем адресату;
  • 38. Инструменты разработчика  gRPC command line tool выводит список доступных сервисов для порта grpc_cli ls localhost:50051 выводит список методов для сервиса grpc_cli ls localhost:50051 helloworld.Greeter.SayHello -l инспектирует список сообщений для метода grpc_cli type localhost:50051 helloworld.HelloRequest унарный вызов метода $ grpc_cli call localhost:50051 SayHello"name: 'gRPC CLI'" proto-gen-lint проверяет .proto на соответствие официальному руководству по стилю Google’s Protocol Buffers protoc --lint_out=. *.proto
  • 39. Трансформация gRPC в REST API: grpc-gateway
  • 40. Цель REST(HTTP+JSON) gRPC Единый источник истины ✗ ✔ Мультиплатформенность + мультиязычность ✗ ✔ Обработка ‘non-breaking’ изменений ✗ ✔ Сеть: обработка запросов ✗ (1 запрос на соединение) ✔ (множество запросов на соединение) Скорость: передача данных Текст ✗ Бинарный ✔ CPU: оптимальное использование ресурсов ✗ ✔ Трассировка Вручную ✗ Легко подключить ✔ Логирование Вручную ✗ Легко подключить ✔ Мониторинг Вручную ✗ Легко подключить ✔ COMPATIBILITYPERFORMANCEMAINTENANCE
  • 41. Во-первых, перестаньте писать интерфейсный код для вашего API вручную.
  • 42. Во-вторых, перестаньте писать интерфейсный код для вашего API вручную.
  • 43. В-третьих, перестаньте писать интерфейсный код для вашего API вручную.
  • 44. Обращайте больше внимания на методологию создания вашего API.
  • 45. Разработайте и используйте руководства по стилю вашего API вручную.
  • 46. В конце концов, исользуйте OpenAPI или gRPC.