Skip to content

Latest commit

 

History

History

navarro-espora-embedded

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

Rinha de Backend 2024 - Rust artesanal

Stack: Rust, Rust e Rust

Da app, ao load balancer, ao banco de dados, tudo foi implementado artesanalmente em Rust em lives no Youtube.

Pontos importantes:

  • Blazing fast(tm)
  • O nome do banco de dados é espora-db, tem como ser mais maneiro?
  • Consistência máxima! Se a API responder que a transação foi inserida, ela está 100% persistida em disco. Não há cache que gere consistência eventual.

Arquitetura

Essa submissão utiliza o banco de dados espora-db embedado em cada uma das instâncias das apps. Um volume é compartilhado entre as duas instâncuias e a sincronia de dados é feita utilizando locks no arquivo compartilhado. Cada uma das 5 contas tem seu próprio arquivo, então cada lock é individual por conta.

flowchart TD
    LB[Load balancer\nrinha-load-balancer-tcp]
    LB -.-> API1(API - instância 01\nrinha-espora-embedded)
    LB -.-> API2(API - instância 02\nrinha-espora-embedded)
    subgraph espora-db[volume compartilhado]
        direction TB
        account-1.espora
        account-2.espora
        account-3.espora
        account-4.espora
        account-5.espora
    end
    API1 -.-> espora-db
    API2 -.-> espora-db
Loading

Os componentes estão com os nomes que poderá ser encontrado nos diretórios do repositório no Github

  • rinha-load-balancer-tcp: um load balancer na camada 4 que implementa round robin por conexão
  • rinha-espora-embedded: implementa consistência e persistência dos dados
  • espora-db: banco de dados embedado no em cada um dos processos do rinha-espora-embedded

Lives do Youtube

A implementação de cada um dos serviços foi feita em diversas lives (recheadas de vergonha alheia) disponíveis no Youtube:

Dia 01 - Implementação da API

Autor