Sistemas Distribuídos Impressionantes
Este repositório contém uma lista de projetos de sistemas distribuídos com código-fonte aberto em diversas linguagens de programação que podem ser úteis para entender melhor como construir serviços distribuídos.
Bancos de dados
- (Golang) Jocko - um serviço de log de commit distribuído/Kafka em Go. [Servo + Jangada]
- (Golang) oklog - um sistema de gerenciamento de log distribuído e sem coordenação para grandes e velhos clusters [Arquivado]
- (Golang) elasticell - um banco de dados NoSQL distribuído compatível com HA Redis com forte consistência e confiabilidade
- (Erlang) CouchDB - um banco de dados de documentos altamente disponível, tolerante a partições e eventualmente consistente. Suporta configurações mestre-mestre com detecção automática de conflitos.
- (Java) Apache HBase - um banco de dados Hadoop, um armazenamento de big data distribuído e escalável. Útil quando é necessário acesso aleatório de leitura/gravação em tempo real a big data
- (Golang) Tair - um serviço de armazenamento distribuído de memória de acesso rápido (MDB)/persistente (LDB) de alto desempenho e alta disponibilidade
- (Golang) immudb - um banco de dados imutável baseado em confiança zero, chave/valor e SQL, inviolável, histórico de alterações de dados
- (Rust) toydb - banco de dados SQL distribuído em Rust, escrito como um projeto de aprendizagem
- (Rust) DB3 Network - uma alternativa descentralizada de firebase firestore
- (Python) ZODB - um banco de dados transacional orientado a objetos ACID
- (Golang) requiemdb - um armazenamento permanente para dados OTEL
Bancos de dados de valores-chave
- (C) memcached - um armazenamento de cache de chave/valor baseado em eventos multithread de alto desempenho destinado a ser usado em um sistema distribuído
- (C) redis - um banco de dados na memória com vários tipos de valores que persistem no disco
- (Rust) TiKV - um banco de dados transacional de chave-valor distribuído, originalmente criado para complementar o TiDB
- (C++) leveldb - uma biblioteca rápida de armazenamento de valores-chave escrita no Google que fornece um mapeamento ordenado de chaves de string para valores de string
- (Golang) goleveldb - um LevelDB implementado em Golang
- (Golang) summitdb - um banco de dados de chave/valor NoSQL na memória. Ele persiste no disco, usa o algoritmo de consenso Raft, é compatível com ACID e é construído em um modelo transacional e fortemente consistente. Ele suporta índices personalizados, dados geoespaciais, documentos JSON e scripts JS definidos pelo usuário
- (Python) pupdb - um banco de dados de valores-chave simples baseado em arquivo
- (Python) pickledb - um armazenamento de valor-chave de código aberto usando o módulo json do Python
- (C++) KeyDB - uma alternativa multithread mais rápida ao Redis
- (C++) Dragonfly - um armazenamento de dados na memória totalmente compatível com Redis e Memcache e projetado usando algoritmos modernos
- (Golang) BadgerDB - um banco de dados de valor-chave (KV) incorporável, persistente e rápido escrito em Go puro
- (Golang) BuntDB - um armazenamento de chave/valor de baixo nível, na memória, em Go puro. Ele persiste no disco, é compatível com ACID e usa bloqueio para vários leitores e um único gravador. Suporta índices personalizados e dados geoespaciais.
- (Rust) ConstDB - um armazenamento de cache semelhante a redis que implementa CRDTs e replicações ativas-ativas.
- (Golang) GhostDB - um armazenamento de dados de valor-chave distribuído, na memória e de uso geral que oferece desempenho de microssegundos em qualquer escala
- (Dart) Hive - um banco de dados de valores-chave leve e extremamente rápido escrito em Dart puro. Inspirado no Bitcask
- (Golang) rosedb - um banco de dados NoSQL rápido, estável e incorporado baseado em bitcask, suporta uma variedade de estruturas de dados, como string, lista, hash, conjunto e conjunto classificado
- (Rust) PumpkinDB - um mecanismo de banco de dados de valores-chave ordenados imutável
- (Golang) FlashDB - um armazenamento de chave/valor simples, na memória, em Go puro. Ele persiste no disco, é compatível com ACID e usa bloqueio para vários leitores e um único gravador. Ele suporta operações semelhantes a redis para estruturas de dados como SET, SORTED SET, HASH e STRING
- (PHP) Lazer - um banco de dados de arquivos simples PHP baseado em arquivos JSON
- (Golang) Scribble - um pequeno banco de dados JSON em Golang
- (Golang) FlyDB - um mecanismo de armazenamento KV de alto desempenho baseado em papel bitcask que suporta o protocolo redis e a estrutura de dados correspondente
- (Rust) Engula - um armazenamento de chave-valor distribuído, usado como cache, banco de dados e mecanismo de armazenamento
- (Golang) Dice - um armazenamento KV na memória extremamente simples baseado em Golang que fala o dialeto Redis
Bancos de dados relacionais, SQL e NewSQL
- (Golang) CockroachDB - um banco de dados SQL distribuído e tolerante a falhas construído em um armazenamento de valores-chave transacional e fortemente consistente
- (Golang) YugabyteDB - um banco de dados SQL distribuído nativo da nuvem para aplicativos de missão crítica
- (Golang) RQLite - um banco de dados relacional distribuído e leve, que usa SQLite como mecanismo de armazenamento
- (Golang) Kingbus - uma loja binlog MySQL distribuída baseada em raft [Raft]
- (C++) YDB é um banco de dados SQL distribuído de código aberto que combina alta disponibilidade e escalabilidade com consistência estrita e transações ACID
- (Golang) RadonDB - um banco de dados MySQL nativo da nuvem e de código aberto para escalabilidade e desempenho ilimitados
NoSQL, bancos de dados de documentos
- (C++) MongoDB - banco de dados de documentos projetado para facilidade de desenvolvimento e escalonamento
- (Golang) FerretDB - um proxy, convertendo as consultas do protocolo wire do MongoDB 6.0+ para SQL - usando PostgreSQL como mecanismo de banco de dados
- (C#) LiteDB - NoSQL Document Store em um único arquivo de dados
- (Python) tinydb - um banco de dados leve orientado a documentos escrito em Python puro
- (PHP) SleekDB - um banco de dados simples de arquivo simples NoSQL implementado em PHP sem quaisquer dependências de terceiros que armazenam dados em arquivos JSON simples
- (Rust) BonsaiDB - um banco de dados ACID, KV transacional ou documento amigável para desenvolvimento com armazenamento de dados em disco com atraso configurável
- (Golang) CloverDB - um banco de dados NoSQL leve e orientado a documentos escrito em Golang puro
Bancos de dados gráficos
- (Java) neo4j - Banco de dados gráfico
- (Python) edgedb - um banco de dados relacional gráfico
- Nebulosa (C++) - um banco de dados gráfico distribuído e rápido de código aberto com escalabilidade horizontal e alta disponibilidade
- (Golang) EliasDB - um banco de dados leve baseado em gráfico
Série temporal
- (Golang) VictoriaMetrics - solução de monitoramento rápida e econômica e banco de dados de séries temporais
- (Golang) influxdb – armazenamento de dados escalável para métricas, eventos e análises em tempo real
- (Java) trino - mecanismo de consulta SQL distribuído rápido para análise de big data
- (Java) Apache Doris - um banco de dados analítico unificado, fácil de usar e de alto desempenho
- (Scala) FiloDB - Distribuído, compatível com Prometheus, em tempo real, na memória, massivamente escalável, série temporal/evento/banco de dados operacional com vários esquemas
- (Rust) ceresdb - banco de dados de série temporal nativo da nuvem, de alto desempenho, distribuído, sem esquema, que pode lidar com cargas de trabalho de análise e série temporal
- (Golang) tstorage é um mecanismo leve de armazenamento local em disco para dados de série temporal com uma API simples
- (Rust) CnosDB é um banco de dados de série temporal distribuído de código aberto de alto desempenho, alta compactação e fácil de usar. Usado em áreas como IoT, Internet industrial, carros conectados e operações de TI
- (Golang) LinDB - um banco de dados de série temporal distribuído escalável, de alto desempenho e alta disponibilidade
- (Scala) FiloDB - um banco de dados de séries temporais / eventos / operacionais distribuído, compatível com prometheus, em tempo real, na memória, massivamente escalável e com vários esquemas
- (Rust) CeresDB - um banco de dados de série temporal nativo da nuvem, de alto desempenho e distribuído
Bancos de dados de colunas
- (Java) Apache Cassandra - um armazenamento de linhas particionadas altamente escalonável. As linhas são organizadas em tabelas com uma chave primária obrigatória
- (C++) scylladb – um banco de dados de big data em tempo real compatível com API com Apache Cassandra e Amazon DynamoDB
- (Golang) FrostDB - um banco de dados colunar de colunas largas incorporável escrito em Go
Bancos de dados de permissão
- (Golang) SpiceDB - um sistema de banco de dados inspirado no Google Zanzibar para criar e gerenciar permissões de aplicativos críticos para a segurança
- (Golang) Keto - um banco de dados de código aberto inspirado no Google Zanzibar, gRPC, APIs REST, newSQL e uma linguagem de permissão fácil e granular. Suporta ACL, RBAC
Bancos de dados analíticos
- (C++) BaikalDB é um banco de dados distribuído compatível com HTAP MySQL projetado para escala de petabytes
- (Golang) AresDB - um mecanismo de consulta e armazenamento analítico em tempo real alimentado por GPU
Vetores
- (Rust) Qdrant - um mecanismo de busca de similaridade vetorial e banco de dados vetorial
- (Golang) milvus - um banco de dados vetorial de código aberto criado para potencializar a incorporação de pesquisas por similaridade e aplicativos de IA
- (Golang) Weaviate - um banco de dados vetorial de código aberto que armazena objetos e vetores
- (Golang) tobias-mayer/vector-db - um banco de dados vetorial simples que pode ser usado para procurar vetores semelhantes em tempo logarítmico
- (Rust) DANNY - um banco de dados vetorial descentralizado para a construção de aplicativos de pesquisa vetorial
Portais
- (Golang) Glide - um gateway LLM/modelo aberto e confiável para rápido desenvolvimento de aplicativos GenAI
- (Golang) Traefik – um proxy de aplicativo nativo da nuvem
- (Lua) Kong - um gateway de API rico em recursos, nativo da nuvem
- (Golang) Skipper - um roteador HTTP e proxy reverso para composição de serviço
- (Golang) janus - um gateway de API leve e plataforma de gerenciamento
- (Golang) Lura - gateway API de ultra desempenho com middlewares
- (Python) MFLow Gateway - um proxy LLM
Bloqueio
- (Golang) etcd - armazenamento distribuído confiável de valores-chave para os dados mais críticos de um sistema distribuído [Raft + gRPC]
- (Java) Apache Zookeeper - coordenação distribuída altamente confiável
- (Golang) chubby - Uma implementação (muito simplificada) do Chubby, o serviço de bloqueio distribuído do Google
Transmissão
- (Java) Kafka - uma plataforma de streaming de eventos distribuída, altamente escalável, elástica, tolerante a falhas e segura
- (Python) faust - uma biblioteca de processamento de fluxo distribuído que transporta as ideias de Kafka Streams para Python
- (Golang) Liftbridge - fluxos de mensagens leves e tolerantes a falhas, implementando um aumento de fluxo durável para o sistema de mensagens NATS
- (Rust) RisingWave - um banco de dados SQL distribuído para processamento de fluxo, projetado para reduzir a complexidade e o custo da construção de aplicativos em tempo real
Agendadores
- (Golang) dkron - um sistema de agendamento de tarefas distribuído e tolerante a falhas para ambientes nativos da nuvem
- (Python) Celery - uma fila de tarefas distribuída
- (Python) Apache Airflow - uma plataforma para criar, agendar e monitorar fluxos de trabalho programaticamente
Filas
- (Golang) nsq – plataforma de mensagens distribuídas tolerante a falhas em tempo real projetada para operar em escala, lidando com bilhões de mensagens por dia [Raft + gRPC]
- (Golang) Sandglass - fila de mensagens distribuídas, horizontalmente escaláveis, persistentes e ordenadas no tempo
- (Golang) dnpipes - versão distribuída de pipes nomeados Unix comparável ao AWS SQS
- (PHP) GatewayWorker - estrutura de mensagens distribuídas em tempo real baseada em trabalhador
- (C++) ZeroMQ – abstração de filas de mensagens assíncronas, vários padrões de mensagens, filtragem de mensagens (assinaturas), acesso contínuo a vários protocolos de transporte e muito mais
- (Java) Apache Pulsar - plataforma de mensagens pub-sub distribuída com um modelo de mensagens muito flexível e uma API de cliente intuitiva
- (Java) Apache ActiveMQ - Message Broker licenciado pelo Apache 2.0 de alto desempenho
Mecanismos de busca
- (Java) ElasticSearch - mecanismo de pesquisa e análise RESTful distribuído
- (Java) Apache Lucene - uma biblioteca de mecanismo de pesquisa de texto completo e de alto desempenho
- (Rust) MeiliSearch - mecanismo de pesquisa extremamente rápido, ultra relevante e tolerante a erros de digitação
- (JS) FlexSearch - biblioteca de pesquisa de texto completo com memória flexível
- (Golang) RiotSearch - mecanismo de pesquisa de texto completo distribuído, simples e eficiente
- (C++) Typesense - mecanismo de pesquisa rápido, tolerante a erros de digitação e confuso
- (Rust) Sonic - back-end de pesquisa rápido, leve e sem esquema. Uma alternativa ao Elasticsearch que roda em alguns MBs de RAM
Sistemas de arquivos
- (Golang) JuiceFS - sistema de arquivos POSIX de alto desempenho compatível com Hadoop, compatível com AWS S3
- (Golang) SeaweedFS - um sistema de arquivos distribuído altamente escalável, simples, compatível com Hadoop, compatível com AWS S3
- (C) GlusterFS – armazenamento distribuído que pode escalar até vários petabytes
- (C++) GlusterFS - sistema de arquivos distribuído altamente confiável, escalável e eficiente. Ele espalha os dados por vários servidores físicos, tornando-os visíveis para o usuário final como um único sistema de arquivos.
Descoberta de serviço
- Detetive (Golang) - autodescoberta ponto a ponto sem mestre e RPC entre serviços HTTP que residem na mesma rede
Processamento de Dados
- (Scala) Apache Spark - mecanismo de análise unificado para processamento de dados em grande escala
TerminusDB
- (Prolog) terminusdb - banco de dados distribuído com modelo de colaboração
SO
- (C) HarveyOS – sistema operacional distribuído
Estruturas
- (Golang) etcd - framework para desenvolvimento de sistemas distribuídos. Fornece os principais requisitos para o desenvolvimento de sistemas distribuídos, incluindo RPC e comunicação orientada a eventos
- (Golang) ergo - porto de Erlang/OTP aproxima-se em Golang
- (Golang) gosiris - uma estrutura de ator para Golang
- (Python) cotilédone - uma estrutura para definir serviços de longa duração. Ele fornece manipulação de sinais Unix, geração de trabalhadores, supervisão de processos filhos, recarga de daemon, notificação SD, limitação de taxa para geração de trabalhadores e muito mais.
- (Java) atomix - estrutura completa para construção de sistemas distribuídos tolerantes a falhas [REST + Raft]
- Órbita (Kotlin) - estrutura de ator virtual para construção de sistemas distribuídos
- (JS) hemera - Um kit de ferramentas de microsserviços Node.js para o sistema de mensagens NATS [RPC]
- (Python) Tooz - centralizando as primitivas distribuídas mais comuns, como protocolo de associação de grupo, serviço de bloqueio e eleição de líder, fornecendo uma API de coordenação que ajuda os desenvolvedores a construir aplicativos distribuídos
- (C++) Nebula – estrutura poderosa para construir aplicativos orientados a mensagens altamente simultâneos, distribuídos e resilientes
- (GoLang) Service Weaver - Uma estrutura que permite escrever aplicativos como binários modulares e implantá-los como um conjunto de microsserviços
- (GoLang) Dapr - tempo de execução portátil, sem servidor e orientado a eventos que funciona como um arquivo secundário e facilita aos desenvolvedores a construção de microsserviços resilientes, sem estado e com estado
Componentes
- (Golang) Dragonboat - uma biblioteca de consenso Raft multigrupo de alto desempenho em Go puro
- (Golang) Golimit - Limitador de taxa distribuído e descentralizado baseado em ringpop Uber
- (Python) Tenacity - biblioteca de novas tentativas de uso geral
- (Elixir) ex_hash_ring - implementação de anel de hash consistente com Elixir puro baseada na excelente lib de anel de hash C
- Jangada (Elixir) - Implementação de consenso da Jangada
- (C++) NuRaft - implementação de Raft derivada do projeto fundamental
- (Python) Hyx – Primitivos leves de tolerância a falhas para seus microsserviços Python modernos e resilientes
- (Python) Migdalor - uma descoberta de pares nativa do Kubernetes para nós assíncios do Python
- (Golang) skiplist - uma implementação Golang da estrutura de dados skiplist
- (Java) Waltz - um log write-ahead distribuído baseado em quórum para replicação de transações
Outros recursos
- impressionante escalabilidade - Lista de leitura para ilustrar os padrões de sistemas de grande escala escaláveis, confiáveis e de alto desempenho
- impressionantes sistemas distribuídos - lista com curadoria de material incrível sobre sistemas distribuídos
- awesome-database-learning - uma lista de materiais de aprendizagem para entender o funcionamento interno dos bancos de dados
- (C/C++)(Livro) Crie seu próprio Redis com C/C++
- (C) (Artigo) Escrevendo um clone sqlite do zero em C
- Berkley CS186: Introdução aos sistemas de banco de dados
- MIT 6.830: Sistemas de Banco de Dados