Быстрое декодирование AVRO -> Go struct в event-based системах GolangConf: Go для высоконагруженных систем

Программный комитет ещё не принял решения по этому докладу
Николай Миколайчук
PropellerAds

Разработчик Go сервисов в команде Core.
Участвую в разработке системы ротации и оценки рекламных материалов.

n.mikolaichuk@propellerads.net
Тезисы

Компания PropellerAds - рекламная сеть. У нас реализована сервисно-микросервисная event-base архитектура на базе Go сервисов, которые общаются по GRPC, в качестве шины данных используют Apache Kafka, события из которой попадают в колоночную БД Vertica и другие Go сервисы, необходимые для быстрого подбора и показа рекламы.

Многие Highload проекты имеют событийную архитектуру: события летят по шине данных, а затем попадают на обработку в зависимые сервисы или хранилища. На разных этапах этого флоу могут возникать проблемы производительности.

В этом докладе я расскажу о том, как мы переходили с гибкой структуры schema less событий в формате JSON на формат AVRO с использованием Schema Registry. Во время перехода мы столкнулись с проблемой медленного декодирования AVRO существующими средствами Go (linkedin/goavro, actgardner/gogen-avro, mitchellh/mapstructure). Скомбинировав указанные решения, избавившись от лишних reflection удалось реализовать быстрое декодирование AVRO в существующие Go структуры в сервисах, которые читают Кафку.
Мы разработали подход, который позволяет быстро создавать и модифицировать типы событий, которые между сервисами передаются через GRPC (Protobuf), сериализуются в AVRO с использованием Schema Registry и быстро декодируются конечными сервисами в Go structs.

Другие доклады секции GolangConf: Go для высоконагруженных систем