Что такое RPC
Что проверяют
Понимаете ли вы, что за удобным синтаксисом вызова прячется сеть, и знаете ли конкретику экосистемы Go: чем стандартный net/rpc отличается от gRPC и когда такой стиль уместнее REST.
Как отвечать
RPC это стиль взаимодействия, при котором клиент вызывает метод удалённого сервиса так, будто метод локальный. Вместо ресурса и глагола протокола вы называете операцию: CreateOrder, GetUser. Каркас берёт на себя сериализацию аргументов, передачу и разбор ответа.
Что назвать применительно к Go:
net/rpcиз стандартной библиотеки с кодировкой gob и жёсткой сигнатурой метода: экспортируемый метод с двумя аргументами, второй указатель, возвратerror. Пакет заморожен, для нового кода его не берут;- gRPC поверх HTTP/2 с контрактом в protobuf и генерацией кода. Отсюда строгая схема, компактный бинарный формат, потоковые вызовы в обе стороны и мультиплексирование в одном соединении;
- JSON-RPC там, где нужен читаемый обмен без генерации кода.
Инженерная часть ответа: context.Context с дедлайном пробрасывается в каждый вызов, ошибки передаются кодами статуса, а не строкой, повтор допустим только для идемпотентных методов, схема развивается добавлением полей, а не переиспользованием номеров.
Где спотыкаются
Называют RPC протоколом. Это подход, а протоколы конкретные: gRPC, JSON-RPC, Thrift. Из-за путаницы кандидат не может объяснить, чем именно пользовался.
Верят в прозрачность вызова. Удалённый метод падает по таймауту, обрывается на середине и может выполниться дважды, поэтому обработка ошибок и повторов часть контракта, а не украшение.
Забывают про балансировку. Постоянное соединение HTTP/2 прилипает к одному экземпляру, а обычный сетевой балансировщик распределяет соединения, не запросы. Нужен клиентский балансировщик с обновляемым списком адресов или прокси, разбирающий прикладной уровень.