Important
A aplicação adere ao protocolo OCPP. Ela consistirá num esquema cliente-servidor com dois componentes principais:
- Serviço de Ponto de Recarga (ER)
- Ponto inicial de interação com estações de carregamento físicas (o carregador)
- Sistema de Gerenciamento (SG)
- Servidor responsável por permissões, pagamentos, lógica de funcionamento, etc. O SG consiste em um modelo cliente-servidor com o Servidor se comunicando via protocolo AMQP com a ER (clientes)
- A arquitetura permite fácil escalabilidade adicionando ER adicionais, tornando-a adequada para gerenciar um grande número de estações de carregamento físicas sem depender de um único Servidor.
- A separação de funções entre o ER e o SG permite a fácil adição de novos recursos sem alterações significativas na arquitetura geral do sistema.
- O sistema baseado em fila de mensagens, aliado ao backend escrito em Rust, permite multi-processamento, controle e prioridade de processamento, garantindo uma resposta rápida às solicitações dos clientes.
- Utilizando padrões abertos e tecnologias open-source populares, nos permite fácil integração com outros sistemas e serviços, como sistemas de pagamento, plataformas de controle e aplicações de terceiros.
- Não toma decisões nem contém qualquer lógica, apenas executa tarefas fornecidas pelo Servidor.
- Responsável pela interação direta com as estações de carregamento físicas.
- Estabelece conexões Websocket.
- Recebe e envia dados de/para as estações de carregamento.
- Gerencia a lógica de negócios, incluindo permissões, controle do processo de carregamento e pagamentos.
- Não tem conhecimento sobre o funcionamento interno da ER.
- Aceita dados requisitados pela ER, toma decisões e envia tarefas de volta para execução baseda no tipo de mensagem solicitada (mensagens da API do OCPP).
- Utiliza o protocolo AMQP para comunicação com a ER.
- Alta performance e vasto ecossistema Web
- Uso eficiente de recursos do sistema
- Segurança verificável e garantida
use axum::routing::{get, post};
use serde::{Deserialize, Serialize};
use tokio::net::TcpListener;
#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(root));
let sock = TcpListener::bind("0.0.0.0:3000")
.await.unwrap(); // run async with `hyper`
axum::serve(sock, app).await.unwrap();
}
// responds with a static string
async fn root() -> &'static str {
"Hello, World!"
}
- OpenAPI é compatível com diversos ferramentas de desenvolvimento oferecendo flexibilidade na seleção de fornecedores.
- O conhecimento comum do OpenAPI entre desenvolvedores e engenheiros proporciona flexibilidade na contratação de pessoal.
- A abstração multi-linguagem facilita a adoção de inovações nos comportamentos da API, evitando a necessidade de reescritas totais.
- O RabbitMQ suporta vários protocolos padrão abertos, incluindo AMQP e MQTT. Existem várias bibliotecas de cliente disponíveis, que podem ser usadas com a linguagem de programação de sua escolha. Sem bloqueio de fornecedor!
- Oferece muitas opções para definir como suas mensagens vão do publicador (aplicação) para um ou muitos consumidores (roteamento, filtragem, streaming, etc).
- Garantia que a troca de mensagens não será interceptada, fornecendo segurança ao consumidores da aplicação.
- Conformidade com SQL
- Variedade rica de tipos de dados proporcionando flexibilidade na criação de diversas estruturas de dados
- Multi Processamento: recursos de indexação, transações e particionamento de tabelas favorecem operações concorrentes e processamento de alta performance.
- Segurança: possui um framework de segurança robusto com suporte para vários métodos de autenticação garantindo integridade e confidencialidade dos dados.
- Oferece ambientes isolados (Máquinas Virtuais Linux) para aplicativos, garantindo que cada aplicativo execute sem interferência de outros.
- Os contêineres compartilham o mesmo kernel do sistema operacional em uso, resultando em uma utilização mais eficiente de recursos em comparação com máquinas virtuais tradicionais.
- Portabilidade garantida: os contêineres podem ser executados em qualquer lugar (
localhost
ou nuvem) mantendo o mesmo comportamento.
- Integração com JavaScript: sendo apenas um superconjunto do JavaScript, oferece compatibilidade total com o vasto ecossistema JavaScript.
- Adição de Tipos: com tipagem forte e um conceito de interfaces, o TypeScript torna mais fácil trabalhar em projetos grandes e complexos, fornecendo maior clareza e segurança.
- Tipagem Estática: oferece verificação de tipos estáticos durante o desenvolvimento, detectando erros antes mesmo da execução do código.
- Componentização: permite dividir a interface do usuário em componentes reutilizáveis, facilitando o desenvolvimento e manutenção de aplicações.
- Fluxo unidirecional: simplifica o gerenciamento de estado, tornando-o mais previsível e fácil de depurar. Extensível através do Redux.
- Virtual DOM: oferece uma atualização de página apenas nas partes necessárias da interface, resultando em um melhor desempenho e experiência do usuário.
- Produtividade: oferece classes pré-definidas para estilos comuns, acelerando o processo de desenvolvimento e permitindo prototipagem rápida.
- Customização Flexível: com base em classes utilitárias, facilita a personalização de estilos sem a obrigatoriedade de escrever CSS personalizado, proporcionando flexibilidade total.
- Manutenção Simplificada: A abordagem baseada em utilitários torna a manutenção do código mais simples, pois as alterações de estilo são centralizadas e facilmente identificáveis.