{"id":23581073,"url":"https://github.com/andre-ols/priority-load-simulation-system","last_synced_at":"2025-06-17T04:03:07.781Z","repository":{"id":269051746,"uuid":"906279006","full_name":"andre-ols/Priority-load-simulation-system","owner":"andre-ols","description":null,"archived":false,"fork":false,"pushed_at":"2024-12-20T14:45:53.000Z","size":39,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-17T04:02:44.454Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andre-ols.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-20T14:44:51.000Z","updated_at":"2024-12-20T14:45:56.000Z","dependencies_parsed_at":"2024-12-20T15:45:34.219Z","dependency_job_id":"1c35ec14-f461-40b6-a28b-f5893a755622","html_url":"https://github.com/andre-ols/Priority-load-simulation-system","commit_stats":null,"previous_names":["andre-ols/priority-load-simulation-system"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/andre-ols/Priority-load-simulation-system","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andre-ols%2FPriority-load-simulation-system","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andre-ols%2FPriority-load-simulation-system/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andre-ols%2FPriority-load-simulation-system/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andre-ols%2FPriority-load-simulation-system/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andre-ols","download_url":"https://codeload.github.com/andre-ols/Priority-load-simulation-system/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andre-ols%2FPriority-load-simulation-system/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260288450,"owners_count":22986661,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-27T00:13:54.535Z","updated_at":"2025-06-17T04:03:07.761Z","avatar_url":"https://github.com/andre-ols.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sistema de Simulação de Carga e Processamento com Prioridade\n\nEste projeto simula uma aplicação com alto volume de mensagens, processadas de acordo com a sua prioridade. Desenvolvido com **Node.js** e **TypeScript**, o sistema é composto por dois componentes principais:\n\n- **Producer**: Simula o envio contínuo de mensagens ao **broker** (RabbitMQ), imitando um cenário de pico de carga na aplicação.\n- **Consumer**: Processa as mensagens recebidas, levando em consideração a **prioridade** das mensagens, e não a ordem de chegada.\n\n## Vantagens da Prioridade no Processamento\n\nProcessar as mensagens com base na prioridade oferece várias vantagens para sistemas que exigem alta performance e eficiência:\n\n- **Redução de Latência**: Mensagens de alta prioridade são processadas mais rapidamente, garantindo que as operações mais críticas sejam atendidas primeiro.\n- **Otimização de Recursos**: Ao processar as mensagens mais urgentes primeiro, o sistema pode minimizar a sobrecarga e evitar que mensagens menos importantes sobrecarreguem os recursos.\n- **Melhoria na Experiência do Usuário**: Processar e responder mais rapidamente às mensagens prioritárias melhora a eficiência geral do sistema e a experiência do usuário.\n- **Escalabilidade**: A priorização permite que o sistema seja mais escalável, já que as mensagens de alta prioridade podem ser tratadas primeiro, garantindo que a infraestrutura não fique sobrecarregada.\n\n## Tecnologias Utilizadas\n\n- **Node.js** com **TypeScript**\n- **RabbitMQ** como broker de mensagens\n- **faker.js** para gerar mensagens aleatórias\n- **winston** para logging\n- **amqplib** para comunicação com o RabbitMQ\n- **Docker Compose** para orquestração de containers\n\n## Arquitetura\n\nA arquitetura do sistema é composta por três principais componentes:\n\n1. **Producer**: Envia mensagens continuamente para o RabbitMQ. As mensagens são geradas aleatoriamente usando a biblioteca `faker.js` e publicadas no broker sem interrupções.\n2. **Consumer**: Consome as mensagens do RabbitMQ, processando-as em grupos de 10. A principal característica é que ele processa as mensagens **com base na prioridade** e não pela ordem de chegada.\n\n3. **RabbitMQ**: O broker de mensagens usado para gerenciar a fila de mensagens entre o Producer e o Consumer.\n\n4. **Prometheus e Grafana**: Usados para monitoramento e observabilidade. O Prometheus coleta métricas sobre a quantidade de mensagens publicadas e processadas, enquanto o Grafana fornece dashboards para visualização dessas métricas.\n\n## Docker Compose\n\nO projeto vem com um arquivo **docker-compose.yml** que configura o ambiente com os seguintes serviços:\n\n- **RabbitMQ**: Broker de mensagens\n- **Prometheus**: Sistema de monitoramento\n- **Grafana**: Plataforma de visualização de dados\n\nBasta executar o seguinte comando para levantar todos os containers:\n\n```bash\ndocker-compose up -d\n```\n\n## Executando o Projeto\n\nPara executar o projeto, siga as instruções abaixo:\n\n1. Entre na pasta `backend` e instale as dependências:\n\n```bash\ncd backend\nyarn install\n```\n\n2. Execute o Producer e o Consumer em terminais separados:\n\n```bash\nyarn start:producer\n```\n\n```bash\nyarn start:consumer\n```\n\n3. Acompanhe os logs para verificar o envio e processamento das mensagens.\n\n4. Acesse o Grafana em `http://localhost:3001` e faça login com as credenciais padrão (usuário: `admin`, senha: `admin`). Importe o dashboard localizado em `backend/grafana/dashboard.json` para visualizar as métricas.\n\n## Licença\n\nEste projeto está licenciado sob a Licença MIT - consulte o arquivo [LICENSE](LICENSE) para obter detalhes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandre-ols%2Fpriority-load-simulation-system","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandre-ols%2Fpriority-load-simulation-system","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandre-ols%2Fpriority-load-simulation-system/lists"}