Protobuf не очень-то дружественный, да и приложению в любом случае надо кодировать/декодировать данные. Но да, компактность. Зато по накладным расходам может быть более выгодно собрать обычный Json, чем упаковывать данные в двоичный файл.
Не может. JSON по определению будет медленнее. Сравните для примера алгоритм кодирования varint у Protobuf и преобразование числа в строку у json. Причём, не могу на вскидку придумать алгоритм преобразования в строку без операции деления. А деление уже само по себе намного затратнее, чем битовые операции. А ведь ещё работа со строками, выделения памяти. И с декодированием не лучше у json будет. Одно только определение типа значения чего стоить будет (автомат состояний, проверка на \s, [, {, ", -, [0-9], etc).
Читал оригинальную серию статьей. Один из лучших примеров целого цикла статей, который покрывает все аспекты разработки production-grade cloud-based приложения со всеми выходящими. Надеюсь оригинал будет обновляться, чтобы оставаться актуальным.
Построение микросервисной архитектуры на Golang и gRPC, часть 1