Protobuf it!

May. 22, 2017
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
Protobuf it!
1 of 35

More Related Content

Similar to Protobuf it!

Schemas and soap_prtSchemas and soap_prt
Schemas and soap_prtAravindharamanan S
Os PruettOs Pruett
Os Pruettoscon2007
Sec.1 กล  ม 1 เร__องการสร_างแบบฟอร_มและการส_งค_าต_วแปรSec.1 กล  ม 1 เร__องการสร_างแบบฟอร_มและการส_งค_าต_วแปร
Sec.1 กล ม 1 เร__องการสร_างแบบฟอร_มและการส_งค_าต_วแปรBongza Naruk
Semantic web support for POSHSemantic web support for POSH
Semantic web support for POSHDinu Suman
HTML5HTML5
HTML5Brandon Byars
RCEC Email 3.5.03RCEC Email 3.5.03
RCEC Email 3.5.03Obama White House

Recently uploaded

Dido_Grigorov_Zurich_2020.pdfDido_Grigorov_Zurich_2020.pdf
Dido_Grigorov_Zurich_2020.pdfPlamenaDzharadat
Our Story, Orange NileOur Story, Orange Nile
Our Story, Orange NileManolodelaFuente1
Fuzzing for CPS Mutation TestingFuzzing for CPS Mutation Testing
Fuzzing for CPS Mutation TestingLionel Briand
ROAD TO NODES - Intro to Neo4j + NeoDash.pdfROAD TO NODES - Intro to Neo4j + NeoDash.pdf
ROAD TO NODES - Intro to Neo4j + NeoDash.pdfNeo4j
Salesforce @AXA.pdfSalesforce @AXA.pdf
Salesforce @AXA.pdfPatrickYANG48
 Database storage engine internals.pptx Database storage engine internals.pptx
Database storage engine internals.pptxAdewumiSunkanmi

Protobuf it!

Editor's Notes

  1. Вопрос сериализации и десериализации возникает практически в любом проекте. Зачастую можно обойтись и самописными инструментами. Но особо остро он встает при разработке систем состоящих из множества компонентов, написанных еще и на разных языках и разнесенных физически.
  2. Здесь можно увидеть такой пример. Отдельные части системы как-то обмениваются данными, и эти данные должны быть хорошо понимаемы всеми. Также сериализация важна для хранения данных.
  3. Решением проблем сериализации в ключе межъязыкового, межплатформенного и кроссплатформенного общения занимался и W3C. Консорциум всемирной паутины - этот консорциум был создан в 1994 году. Как консультативный орган для лидеров мировой компьютерной индустрии с целью обеспечения совместимости своих продуктов и разработки новых технологический стандартов. Стандартизация HTML - их первый крупный успех (в 1996 году).
  4. Здесь можно видеть список стандартов, утвержденных консорциумом. Здесь очень много важных стандартов.
  5. И конечно же всеми любимый XML. Здесь даже присутствует как минимум один человек, который его любит настолько, что даже ездил на XML конференцию!
  6. Вот пример этого удивительного языка, а вернее пример XSD (XML Schema Definition) - языка описания структуры XML-документов. Правда он прекрасен?
  7. Вообще экосистема XML внушительна. Это целый огромный мир. Он решал множество вопросов, в том числе и проблему сериализации и десериализации данных. Кто из вас знаком с XML и приходилось использовать или активно использует сейчас? Кому он нравится? А кому нет?
  8. Но видимо не все были от него в восторге. В их числе ребята из компании ныне уже несуществующей… под прежним названием. И что же они сделали? Независимый от языка и платформы, масштабируемый язык для сериализации структурированных данных, как, и, собственно,
  9. XML, только как они сами заявляют, он компактнее, быстрее и проще. Еще они его описывают как гибкий, эффективны, автоматизированный механизм сериализации.
  10. И имя ему - Protocol Buffers, или просто Protobuf. По замыслу разработчиков вы описываете свою структуру данных, компилируете в классы нужного вам языка и используете высокоуровневое представление. При этом закладывается, что новые версии ваших структур не будут ломать код, работающий со старыми версиями.
  11. Protobuf поддерживает множество языков программирования. Для каждого можно найти инструкцию по установке и использованию под различные платформы. Здесь языки, которые они заявляют у себя на гите, там же есть отдельная страничка с огромным количеством третьесторонних реализаций под эти и другие различные языки. Он был создан в 2008 году.
  12. И уже в 2010 году компания Twitter перешла на protobuf для хранения данных, отбросив XML, JSON и CSV. Под XML триллион петабайт твитов у них превращался в 10 триллионов петабайт. JSON тоже не был достаточно компактным, поскольку хранит заголовки. CSV отбросили из-за проблем обратной совместимости со старыми версиями данных, после изменения структуры.
  13. По заявлениям самих же разработчиков google protobuf от 3 до 10 раз меньше XML и от 20 до 100 раз быстрее.
  14. Как это работает? Вы описываете структуру в .proto-файле, пример которого вы можете видеть на экране. Это пример описания некой личности (взятый с сайта разработчика). Здесь message - некая базовая логическая сущность, содержащая пары ключ-значение. Т.е. мы описываем базовые параметры, указывая обязательное оно, опциональное или может быть несколько. Указываем тип и имя поля + последовательность. Это важно для сериализации в бинарный формат и последующей десериализации. Можно создавать свои внутренние типы через message, как тут показано на примере с PhoneNumber. Можно создавать перечисления для задания множества возможных значений у атрибутов. Указывать возможные значения по умолчанию. Но это вторая версия protobuf, сейчас актуальна третья и она стала еще лаконичнее.
  15. Теперь все поля опциональны. Значения по умолчанию строго регламентированы и для перечислений это значение с нулевым идентификатором.
  16. Для компиляции используется специальная программа protoc. Выполняем её в командной строке с указанием путей и получаем python модуль со статическим дескриптором для каждого типа сообщения в .proto файле, каждый из которых потом в рантайме через метаклассы генерится в python классы. Вообще если в .proto файле будет только та информация , то приведена на предыдущем слайде, то этого уже достаточно,чтобы скомпилировать рабочий код. Но будет выведено предупреждение, что не указана версия протокола в самом proto файле, и по умолчанию будет использоваться proto2. Поэтому в начале файла указываем syntax=”proto3”;
  17. Здесь можно видеть часть того, что в итоге генерится. С помощью метакласса GeneratedProtocolMessageType на основе дескрипторов создаются нужные классы.
  18. Собственно сам дескриптор, не полностью. Здесь name и full_name, но если задать namespace .proto файле, что, собственно делать нужно, то full_name дополнится на этот namespace. Там много еще чего есть, файл на почти 170 строк. Но не будем вдаваться в детали, я привел лишь для общего представления, c чем придется иметь дело.
  19. Ну и поехали. Импортируем класс, создаем экземпляр и заполняем. Множественные элементы добавляем через add. Значения заданные в перечисления попадают непосредственно в атрибуты класса, в котором задано перечисление. Если хотим задавать через Person.PhoneType.HOME, то придется обернуть перечисление в одноименное сообщение.
  20. Можно посмотреть что получилось - очень читаемый вывод.
  21. Механизм сериализации/десериализации достаточно прост и быстр.
  22. Что еще позволяет делать protobuf, помимо того. что есть в примере. Есть возможность указать для поля, что оно может быть произвольного типа
  23. Ограничение на использование только одного поля из нескольких возможных. Можно использовать поля разных типов, но не множественные
  24. Есть так же набор составных типов в стандартной библиотеки. Импорты
  25. Новая версия данных. Расширение. Совместимость у старых версий. Игнорирование старых полей