Differential: RPC com segurança de tipos que parece funções locais
Semântica de Idempotência e Entrega
- Grande parte da discussão debate o recurso de “idempotência”.
- Críticos argumentam que a estrutura não pode tornar funções arbitrárias com efeitos verdadeiramente idempotentes; no máximo, ela pode oferecer semântica de no máximo uma vez ou no mínimo uma vez, não exatamente uma vez.
- Segundo relatos, o sistema usa chaves de idempotência mais um lock/lease; para funções marcadas como idempotentes, ele visa no máximo uma vez, emitindo a chamada apenas uma vez para um worker. Se não estiver marcado, chamadas com falha podem ser repetidas em outra máquina (no mínimo uma vez).
- Vários comentaristas dizem que a documentação e o marketing misturam essas distinções e correm o risco de enganar os usuários, especialmente quando os exemplos envolvem pagamentos.
- Alguns sugerem renomear o recurso para algo como “tryOnce” ou “retry policy” em vez de “idempotency”.
Tratamento de Erros, Repetições e IA
- Erros são expostos como exceções em funções assíncronas; timeouts causados por respostas perdidas são tratados de forma semelhante.
- Há um recurso de IA chamado “predictive retries” que classifica erros (por exemplo, resets de conexão, deadlocks) como transitórios e tenta novamente automaticamente.
- Isso é opcional e atualmente é um switch global (por cluster); alguns argumentam que deveria ser por função e questionam o valor da IA aqui em comparação com anotações explícitas.
- Preocupação: se a IA classificar incorretamente uma operação não idempotente como passível de repetição, efeitos colaterais podem ser aplicados duas vezes.
Abstração de RPC e Preocupações com Sistemas Distribuídos
- Muitos criticam o slogan “parece funções locais”, alertando que esconder realidades de rede (latência, falha parcial, partições) historicamente leva a monólitos distribuídos frágeis.
- Outros dizem que ergonomia de RPC é aceitável desde que os desenvolvedores continuem cientes de que estão em “território de sistemas distribuídos”.
- Há um debate mais amplo sobre se tornar chamadas remotas fáceis incentiva arquiteturas ruins ou se capacita equipes que já escolheram microserviços.
Arquitetura, Escopo e Serialização
- O produto é descrito como RPC com segurança de tipos para backend/microservices, com um plano de controle centralizado orquestrando chamadas, retries e verificações de saúde (em cluster para disponibilidade).
- Alguns o veem como “trpc/rspc + service mesh”; outros o chamam de “service mesh com firulas e recursos extras”.
- Ele é priorizando TypeScript, o que levanta preocupações para ambientes poliglotas versus sistemas baseados em IDL como gRPC.
- Os argumentos atualmente precisam ser JSON-serializáveis; funções/promises ainda não são suportadas. Críticos dizem que isso omite as partes mais difíceis de construir um verdadeiro runtime de linguagem distribuída (closures, aliasing, semântica de mutação).
Recepção e Maturidade
- Vários comentaristas acham a ideia interessante e observam sistemas internos semelhantes em grandes empresas.
- Muitos criticam a documentação/marketing pouco claros ou exagerados, especialmente em torno de idempotência e garantias de confiabilidade, mas reconhecem que o projeto é inicial e ainda está evoluindo.