Upload
eleksdev
View
1.665
Download
0
Embed Size (px)
Citation preview
eleks.com eleks.com
Google RPC.
Ще раз про концепцію RPC• RPC – Remote Procedure Call• Ідея полягає в передачі керування і
даних з однієї програми в іншу, яка може(і здебільшого) знаходитись на іншому фізичному компютері через мережу.
Які технології з забезпеченням RPC є на даний момент ?Ось тільки вершина айсберга: (з Вікі)• Sun RPC (бінарний протокол на базі TCP та UDP)• Net Remoting (бінарний протокол на базі TCP, UDP,
HTTP)• XML-RPC (текстовий протокол на базі HTTP)• SOAP — Simple Object Access Protocol (текстовий
протокол на базі HTTP)• Java RMI — Java Remote Method Invocation• JSON-RPC JavaScript Object Remote Procedure Calls
(текстовий, на базі HTTP)
Нічого не нагадує?
В чому недоліки існуючих стандартів?
• Близько ¾ клієнт-серверних стандартів базуються на REST + HTTP/1.1.
• Основний їх недолік – неефективність протоколу HTTP/1.1– нестиснені заголовки, відсутність повноцінного двостороннього звязку, неефективний підхід до викоричтання ресурсів ОС– Надлишковий трафік, затримки.– Необхідність «натягувати» свою модель даних на REST, що часто є надлишковим
And Here’s Johnny ! (gRPC)
Protobuf• Protobuf – це гнучкий, ефективний автоматизований
механізм для серіалізації структурованих даних. (Уявіть собі ХМЛ, але менший, швидший і простіший)
• Ви визначаєте, як хочете, щоб ваші дані були структуровані один раз, а потім можете використовувати згенерований код для легкого зчитування/запису даних, з використанням різних мов
• На даний момент останя версія Protobuf - proto3, в якій є спрощений синтаксис, деякі корисні нові функції, підтримує багато мов
• Google каже, що protobuf до 10 разів ефективніший, ніж XML-based протоколи, not bad, а? :))
• Детально про protobuf можна дізнатися тут.
Як працює Protobuf• Програміст визначає, як він хоче серіалізувати інформацію
за допомогою визначення цього в .proto файлі• Кожне повідомлення в protocol buffer є логічним записом,
який містить серію пар «ключ-значення»• Детальний опис синтаксису protobuf – тут• Після визначення повідомлень, потрібно викликати
компілятор protobuf для .proto файла, який згенерує код на відповідній мові (C#, C++, Java напр.)
• (!) Можна додавати до повідомлень нові поля без втрати сумісності з попередніми версіями
І ще раз: XML vs Protobuf• Простіші (ага )• Від 3 до 10 разів менший обєм• Від 20 до 100 разів швидші• Є менш неоднозначні (мається на увазі чітке визначення
типів в protobuf)• Згенеровані класи легше використовувати програмно
Приклад
Визначення інтерфейсу сервіса
Що під капотом?
HTTP/2• HTTP/2 – лежить в основі транспортування даних gRPC.• Збільшення ефективності використання мережевих
ресурсів за рахунок використання пріоритетів запитів, стиснення заголовків HTTP та ін.
• Серйозне збільшення продуктивності для сучасних браузерів і мобільних пристроїв.
• Забезпечення сучасних вимог до безпеки
Конкуренти!• Так, вони є.• Головний конкурент – це Apach Thrift
Порівняння:
Корисні посилання:• Офіційний github gRPC:
https://github.com/grpc/grpc• Документація, інструкції, туторіали, ВСЕ
http://www.grpc.io/docs/