> For the complete documentation index, see [llms.txt](https://weekly-essay.mikey.wang/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://weekly-essay.mikey.wang/pt-br/2021/w05-risk-exposure-of-the-payment-sdk.md).

# W05-A exposição ao risco do SDK de pagamentos

Na iniciativa de melhoria da experiência dos pagamentos B2B no Kuailü, redefinimos métricas no nível da sessão do usuário para comparar melhor o antes e o depois e descrever experiência e desempenho com mais objetividade. Parte do trabalho foi complementar os dados enviados pelo JS SDK conforme a nova estrutura.

O JS SDK é essencial ao checkout: a grande maioria do tráfego usa o serviço de pagamento por ele, com cerca de 500 mil chamadas diárias. Pelo alcance, sempre estabeleci uma barreira alta para mudanças. Sua lógica também é bastante estável. Em um ano trabalhando com B2B, não fizemos nenhuma iteração.

Acrescentar instrumentação exigia pouco desenvolvimento e poucas alterações. Mas, quando chegou a hora de publicar, adiei por uma semana. Não por procrastinação, mas por receio. Havia exposição ao risco durante todo o processo, e precisei de tempo para me preparar psicologicamente.

Publicar o SDK parece um processo fora de controle: pouca visibilidade e poucos meios de agir nos pontos centrais. Ele fica no Burst. Depois de olhar o painel e o planejamento da plataforma, tive a impressão de algo há muito sem manutenção. Após enviar o código, a publicação depende apenas de um comando do Burst, executado como uma caixa-preta. Ao terminar, os servidores de origem já atualizaram os recursos. Depois é preciso invalidar o CDN manualmente. É como soprar um dente-de-leão sem saber para onde as sementes vão nem onde pousam. O progresso de atualização em cada nó, a conclusão da distribuição e o momento em que os usuários recebem a versão nova apesar do cache local são apenas estimativas pela experiência. Não há liberação gradual nem rollback rápido. Mais importante: tudo acontece em silêncio, sem aprovação ou notificação das pessoas envolvidas.

Depois da publicação, só monitoramos exceções internas do SDK. Volume de chamadas, estabilidade e outras métricas dependem dos dados do Burst e do fornecedor de CDN, cuja completude e precisão são incertas.

Consultei owl e lx sobre isso. Ninguém tem uma solução perfeita, mas as conversas trouxeram ideias para a governança de publicação. Uma grande diferença entre JS SDK e Native SDK é o desafio de versões criado pela atualização inteiramente dinâmica. Se a URL usada pela área de negócio não pode mudar, a versão fica, na prática, escondida dela.

O SDK também tem problemas internos, como poluir o objeto global window. Sua melhoria entrará no planejamento de frontend B2B deste ano. Com algumas centenas de milhares de pedidos por dia, ainda parece pequeno; com milhões, será um risco grande.
