https://github.com/fernandoareias/erlda
Staged event-driven implementation with Erlang
https://github.com/fernandoareias/erlda
erlang event-driven seda staged-event-driven-architecture
Last synced: 11 months ago
JSON representation
Staged event-driven implementation with Erlang
- Host: GitHub
- URL: https://github.com/fernandoareias/erlda
- Owner: fernandoareias
- Created: 2025-06-19T12:28:53.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-07-09T17:39:46.000Z (12 months ago)
- Last Synced: 2025-07-10T00:50:36.409Z (12 months ago)
- Topics: erlang, event-driven, seda, staged-event-driven-architecture
- Language: Erlang
- Homepage:
- Size: 38.1 KB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# ERLDA
Este projeto é uma implementação do padrão SEDA (Staged Event-Driven Architecture) em Erlang.
---
## Requisitos
- Erlang/OTP 24 ou superior
- [rebar3](https://www.rebar3.org/)
## Instalação e Execução
1. **Clone o repositório:**
```sh
git clone
cd erlda
```
2. **Compile o projeto:**
```sh
rebar3 compile
```
3. **Inicie o shell Erlang:**
```sh
rebar3 shell
```
4. O servidor estará ouvindo em: `localhost:8080`
## Estrutura da pasta src/lib
A pasta `src/lib` contém módulos fundamentais para a implementação do padrão SEDA neste projeto:
- **stage_behaviour.erl**: Define o behaviour (contrato) para os estágios do SEDA, padronizando a interface e o ciclo de vida dos estágios. Permite que diferentes estágios implementem suas próprias lógicas seguindo uma estrutura comum.
- **stage_controller.erl**: Responsável por gerenciar o pool de workers de cada estágio, incluindo a criação, remoção e balanceamento dinâmico dos processos conforme a demanda do sistema.
- **worker.erl**: Implementa a lógica básica de um worker, que executa as tarefas atribuídas pelo estágio. Os workers são os responsáveis pelo processamento concorrente das requisições em cada estágio.
Esses módulos são reutilizáveis e servem como base para a construção dos estágios específicos do pipeline de processamento.
## Exemplos de uso
### Servidor Web (Web Server)
Como exemplo prático de aplicação do padrão SEDA, este projeto inclui um servidor web simples, implementado inteiramente em Erlang. O servidor recebe solicitações HTTP e as processa por meio de uma pipeline de estágios, cada um responsável por uma etapa específica do processamento. Essa arquitetura demonstra como os módulos genéricos da pasta `src/lib` podem ser reutilizados para construir sistemas concorrentes, escaláveis e de fácil manutenção.
O servidor web é dividido em estágios independentes, cada um com múltiplos workers, promovendo concorrência, isolamento e escalabilidade. O fluxo de processamento de uma requisição HTTP é o seguinte:
1. **http_server**: Aceita conexões TCP e repassa os dados recebidos para o próximo estágio.
2. **http_parser_stage**: Realiza o parsing da requisição HTTP e encaminha para o estágio responsável pelo recurso solicitado.
3. **get_stage**: Lê arquivos do diretório `www/` e responde ao cliente com o conteúdo solicitado ou retorna um erro 404 caso o arquivo não exista.
Cada estágio utiliza o behaviour definido em `stage_behaviour.erl` e é gerenciado pelo `stage_controller.erl`, que controla o pool de workers responsáveis pelo processamento concorrente das requisições.

## Exemplo de Requisição HTTP
```sh
curl http://localhost:8080/index.html
```
A resposta será o conteúdo do arquivo `www/index.html` ou um erro 404 caso não exista.
## Teste de carga
Use o script em `load-tests/test-script.js` com o [k6](https://k6.io/):
```sh
k6 run load-tests/test-script.js
```
## Observações
- Cada estágio possui múltiplos workers, escolhidos aleatoriamente para balancear a carga.
- O projeto segue o padrão SEDA, facilitando a escalabilidade e a manutenção.
- Sinta-se à vontade para contribuir!