Executando verificação de segurança...
1

[DÚVIDA] Buscando Soluções Escaláveis para Gerenciamento de Saldo em Ambiente de Microserviços

Oi,

Estou enfrentando um desafio em um ambiente de microserviços e gostaria de obter suas opiniões e sugestões. Estou trabalhando onde nossa arquitetura, temos um serviço centralizado de saldo que é intensamente consultado e atualizado por outros dez microserviços para operações como verificar o saldo de um usuário/tenant, adicionar e remover saldo. Atualmente, utilizamos requisições HTTP para a maioria dessas interações(buscar saldo atual e retirar saldo) e RabbitMQ para processar incrementos de saldo em segundo plano.

Apesar desta configuração, ainda enfrentamos uma alta carga de requisições HTTP, o que está impactando a escalabilidade e a performance do sistema. Além disso, é fundamental manter uma alta consistência do saldo, independentemente do serviço que esteja realizando a operação.

Quais estratégias ou tecnologias vocês recomendariam para melhorar a escalabilidade e a consistência deste sistema de microserviços? Estou particularmente interessado em saber como grandes empresas lidam com cenários semelhantes e quais práticas são consideradas as melhores para garantir a confiabilidade, consistência dos dados e que seja performática, em um ambiente distribuído.

Pensei em usar um sistema de cache centralizado, usando o redis ou memcached. E todos os serviços consultaria esse cache.

Por favor, se já houver um padrão consolidado para esse problema, me indiquem vídeos, artigos e escrevam suas experiências.

Estou usando PHP/Laravel.

Considerações Adicionais

  • Desafio: Alta carga de requisições HTTP para esse serviço onde está o saldo, e necessidade de manter a consistência do saldo em todas as operações, e que seja performático.

Agradeço antecipadamente por qualquer insight ou experiência que vocês possam compartilhar! Estou procurando por abordagens validadas que possam ajudar a superar esse desafio.

Carregando publicação patrocinada...
3

Não use microsserviços, é fácil e escalável quando a pessoa sabe o que está fazendo. Microsserviços traz enormes problemas e quase ninguém precisa disto.

O Stack Overflow costumava estar ntre os 30 sites mais acessados do mundo e rodava sem isso e até conseguiam rodar com 1 servidor (nem tão caro assim). O Instagram não usa, a Wikipedia, a lista é enorme.

Não é coincidência que muitos que adotaram estão voltando atrás e obtendo melhores resultados. Mostraram que eram inexperientes (mesmo os doutores das grandes big techs), mas pelo menos não mostraram teimosia quando os fatos prevaleceram.

Microsserviços é modinha, é extremamente difícil a não ser que a necessidade seja boba demais, o que elimina por completo a necessidade dele, e especialmente com PHP faz menos sentido ainda. Fazer consistência em microsserviços costuma tirar o benefício que ele traz. Quase ninguém precisa dele e em raríssimas situações ele se paga pela complexidade gerada. Já dei consultoria onde o problema de escala foi sanado justamente tirando essa arquitetura e fazendo o simples certo. Fora que ele custa muito caro (se não custar, novamente, é porque está adotando por zero necessidade).

As pessoas adotam só porque querem parecer que são excelentes profissioansi que manjam de tudo, o que acaba acontecendo o contrário. Dizem que "você não a Netflix para adotar isso". Não sei nem se eles precisam de fato, pelo menos não de forma completa (alguns microsserviços pontuais, mas não a arquitetura toda pode ser útil em alguns casos). O Spotify que deu origem à modinha (não que tenha inventado) é cheio de problemas, mas eles podem, eles não precisam de consistência. E depois de um tempo a produtividade deles caiu brutalmente.

Aliás se mudar de PHP e principalmente de Laravel, já escala brutalmente melhor de forma simples. Mas nem estou sugerindo isso porque pode escalar melhor até de outras formas.

Mesmo que tenha a necessidade, microsserviços só deveria ser adotado por uma equipe (grande, até porque faz zero sentido fazer em equipe pequena) extremamente experiente e especializada no assunto.

Para alguma pessoas tanto faz:

Monte de merda grande e monte de merda pequena representando as duas arquiteturas

Sei que desagrada alguns, mas faço minha parte, cada um decide o que achar melhor e araca com as consequências.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).

2

quando fala que esta impactando a performance do sistema, estamos falando de quantos segundos exatamente? quais os endpoints? consultar saldo e alterar saldo?

como se da a divisão entre as chamadas de consulta e alteração? imagino que tenham muitas chamadas somente para a consulta do saldo, essa informação talvez faça sentido cachear, e quando seu serviço alterar o saldo vc destroi o cache e popula novamente.

ter um cache compartilhado nao faz sentido, uma vez que somente o seu serviço deveria poder mudar as informações no cache.

1

Nunca trabalhei com micro serviços, mas avaliando o seu caso eu colocaria as operações de adicionar e retirar em uma fila garantindo uma unica operação por vez(muitas aspas qui/ depende da arquitetura sua hoje) tanto para adicionar e retirar.

No caso da leitura eu colocaria a consulta do saldo em cache e quando houvesse as ações de adicionar e remover salvo esse cache seria atualizado.

Lebrando que não sei como está hoje sua arquitetura tem que filtrar as recomendações, também precisa ver se o problema de porformance não em consulta de banco, código, infra. Você precisa fazer testes reais de carga.

Sabemos que nosso querido PHP/Laravel dependendo do caso de uso é matar formiga com bazuca então talvez faça sentido utilizar um php puro, outra linguagem, configurar sua infra do micro serviço para ser elastico(auto scaling).

Mais um vez leve em consideração seu caso de uso, dados obtidos dos teste, outras fontes.