Giter Site home page Giter Site logo

Teste de carga não está cobrindo o caso de multiplas requisições paralelas para o mesmo cliente about rinha-de-backend-2024-q1 HOT 13 CLOSED

zanfranceschi avatar zanfranceschi commented on July 28, 2024 1
Teste de carga não está cobrindo o caso de multiplas requisições paralelas para o mesmo cliente

from rinha-de-backend-2024-q1.

Comments (13)

DiegoCoronel avatar DiegoCoronel commented on July 28, 2024 2

Eu testei com o código desse PR e o meu começou a falhar e quando analisei era realmente uma falha do meu lado que o teste atual não tava computando corretamente em relação ao saldo. Isso pq minha constraint de banco não permitia -10 quando por exemplo o limite era 10

from rinha-de-backend-2024-q1.

zanfranceschi avatar zanfranceschi commented on July 28, 2024 1

me envia por favor

from rinha-de-backend-2024-q1.

filipemacedo avatar filipemacedo commented on July 28, 2024 1

Esses são alguns que eu vi:

https://github.com/arrudaricardo/rinha-de-backend-2024-q1-bun
https://github.com/carls-rodrigues/rinha-backend-rust
https://github.com/aysion/rinha_de_backend_2024_q1-nodejs
https://github.com/aysion/rinha_de_backend_2024_q1-bun

from rinha-de-backend-2024-q1.

zanfranceschi avatar zanfranceschi commented on July 28, 2024

Não sei se entendi corretamente, mas o principal do teste é justamente fazer várias requisições concorrentes para os mesmo clientes. Uma das validações no teste é justamente comparar o saldo atual com o limite do cliente e, se for ultrapassado, o Gatling acusa o erro.

Qual seria essa API problemática que mencionou, por favor?

from rinha-de-backend-2024-q1.

filipemacedo avatar filipemacedo commented on July 28, 2024

Opa zan.

Eu testei o cenário onde estamos saindo com 10 requisições paralelas debitando 10000 do cliente id 1, esperamos que ele fique com -100000; como você pode ver o log das respostas disponibilizado na issue, o saldo não segue o que deveria seguir.

Uma das validações no teste é justamente comparar o saldo atual com o limite do cliente e, se for ultrapassado, o Gatling acusa o erro.

A minha suspeita é que não estamos saindo com requisições paralelas para o mesmo cliente id em um curto espaço de tempo e isso está camuflando o problema.

Qual seria essa API problemática que mencionou, por favor?

Eu testei algumas outras (todas que suspeitei travaram com a versão do meu PR), mas essa aqui foi a que originou o teste:

https://github.com/aysion/rinha_de_backend_2024_q1-nodejs

from rinha-de-backend-2024-q1.

filipemacedo avatar filipemacedo commented on July 28, 2024

Para reproduzir o problema você pode rodar a aplicação dele no seu local e executar o teste de carga, provavelmente vai passar todos os testes. Depois você reseta o banco de dados e executa o teste de carga usando a versão que eu disponibilizei no meu PR, ai você checa o extrato do cliente 1, ele terá 10 transações de débito de 10000, porém o saldo não estará -100000

Após a execução da versão do meu PR, veja a resposta no /extratos:

Clique para expandir
{
    "saldo": {
        "total": -10000,
        "data_extrato": "2024-02-11T15:58:21.000Z",
        "limite": 100000
    },
    "ultimas_transacoes": [
        {
            "id": 12,
            "cliente_id": 1,
            "valor": 10000,
            "tipo": "d",
            "descricao": "um0XAaYXkE",
            "realizada_em": "2024-02-11T15:58:16.000Z"
        },
        {
            "id": 11,
            "cliente_id": 1,
            "valor": 10000,
            "tipo": "d",
            "descricao": "9BWwcApIhj",
            "realizada_em": "2024-02-11T15:58:16.000Z"
        },
        {
            "id": 10,
            "cliente_id": 1,
            "valor": 10000,
            "tipo": "d",
            "descricao": "5AsH2CJvIU",
            "realizada_em": "2024-02-11T15:58:16.000Z"
        },
        {
            "id": 9,
            "cliente_id": 1,
            "valor": 10000,
            "tipo": "d",
            "descricao": "rQiKUy1vkD",
            "realizada_em": "2024-02-11T15:58:16.000Z"
        },
        {
            "id": 8,
            "cliente_id": 1,
            "valor": 10000,
            "tipo": "d",
            "descricao": "oYu05cwPYt",
            "realizada_em": "2024-02-11T15:58:16.000Z"
        },
        {
            "id": 7,
            "cliente_id": 1,
            "valor": 10000,
            "tipo": "d",
            "descricao": "RCNoNug0Yr",
            "realizada_em": "2024-02-11T15:58:16.000Z"
        },
        {
            "id": 6,
            "cliente_id": 1,
            "valor": 10000,
            "tipo": "d",
            "descricao": "VflZclcgjC",
            "realizada_em": "2024-02-11T15:58:16.000Z"
        },
        {
            "id": 5,
            "cliente_id": 1,
            "valor": 10000,
            "tipo": "d",
            "descricao": "zjAdxeJQXC",
            "realizada_em": "2024-02-11T15:58:16.000Z"
        },
        {
            "id": 4,
            "cliente_id": 1,
            "valor": 10000,
            "tipo": "d",
            "descricao": "o5HPkfTtOi",
            "realizada_em": "2024-02-11T15:58:16.000Z"
        },
        {
            "id": 3,
            "cliente_id": 1,
            "valor": 10000,
            "tipo": "d",
            "descricao": "MJvdEhRwhE",
            "realizada_em": "2024-02-11T15:58:16.000Z"
        }
    ]
}

Repare que temos 10 transações registradas, cada uma debitando 10000, mas o saldo ficou inconsistente.

from rinha-de-backend-2024-q1.

zanfranceschi avatar zanfranceschi commented on July 28, 2024

Só pra eu ter certeza de que entendi o que está dizendo: o que você está reportando é que tem API em que o saldo mostrado no extrato não corresponde com as transações feitas. É isso?

from rinha-de-backend-2024-q1.

filipemacedo avatar filipemacedo commented on July 28, 2024

Sim. O que eu estou dizendo é que o teste está deixando passar API com problema de Race Condition. Se quiser posso te explicar via call

from rinha-de-backend-2024-q1.

zanfranceschi avatar zanfranceschi commented on July 28, 2024

Obrigado. Vou pensar num teste pra esse cenário.

from rinha-de-backend-2024-q1.

filipemacedo avatar filipemacedo commented on July 28, 2024

Obrigado. Vou pensar num teste pra esse cenário.

O PR que eu disponibilizei está cobrindo esse cenário e está dando o fail fast para evitar que o dev precise aguardar toda a bateria de teste (e gerar possíveis side effects)

#143

from rinha-de-backend-2024-q1.

filipemacedo avatar filipemacedo commented on July 28, 2024

Posso te mandar alguns repositórios que eu vi que estão com esse mesmo problema e que passaram a ser reprovados pela versão disponível no PR

from rinha-de-backend-2024-q1.

filipemacedo avatar filipemacedo commented on July 28, 2024

Todos esses que mencionei eu testei rodando com a versão atual do teste de carga e posteriormente rodei com a versão disponibilizada no PR. Qualquer coisa só falar.

from rinha-de-backend-2024-q1.

zanfranceschi avatar zanfranceschi commented on July 28, 2024

Melhoria no teste implementada. Muito obrigado pela ajuda, @filipemacedo!

from rinha-de-backend-2024-q1.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.