Найти в Дзене
102 тыс подписчиков

Как засунуть Protobuf в CEL и выиграть (или проиграть): опыт MWS Cloud Platform


Представьте поток событий k8s, которые сыплются в микросервис без остановки, и каждое надо прогнать через валидацию на CEL. И тут же выясняется неприятное. Чтобы движок проверил жалкие два-три поля, компактный Protobuf распаковывается целиком, память улетает под всё дерево объектов ради пары значений. Большая часть распакованных данных интерпретатору просто не нужна.

Раз так, почему бы не отдать CEL сырые байты и не научить его выдёргивать поля лениво, ровно в момент обращения. Команда MWS Cloud Platform залезла во внутренности обоих форматов, собрала ленивый парсер и запустила бенчмарки. На тяжёлых манифестах аллокации памяти рухнули в 15-20 раз. Мечта. А потом этот код взяли и выкинули...

Как засунуть Protobuf в CEL и выиграть (или проиграть): опыт MWS Cloud Platform  Представьте поток событий k8s, которые сыплются в микросервис без остановки, и каждое надо прогнать через валидацию на
Около минуты