Потрясающие распределенные системы
Этот репозиторий содержит список проектов распределенных систем с открытым исходным кодом на различных языках программирования, которые могут быть полезны для лучшего понимания того, как создавать распределенные сервисы.
Базы данных
- (Golang) Jocko — служба Kafka/распределенного журнала коммитов в Go. [ Крепостной + Плот]
- (Golang) oklog — распределенная и не требующая координации система управления журналами для старых больших кластеров [Архив]
- (Golang) elasticell — распределенная HA Redis-совместимая база данных NoSQL с высокой согласованностью и надежностью.
- (Erlang) CouchDB — высокодоступная, устойчивая к разделам и в конечном итоге согласованная база данных документов. Поддерживает настройки «главный-главный» с автоматическим обнаружением конфликтов.
- (Java) Apache HBase — база данных Hadoop, распределенное масштабируемое хранилище больших данных. Полезно, когда необходим произвольный доступ для чтения/записи в реальном времени к большим данным.
- (Golang) Tair - высокопроизводительная и доступная служба распределенной памяти быстрого доступа (MDB)/постоянного (LDB) хранилища.
- (Golang) immudb — неизменяемая база данных, основанная на нулевом доверии, ключе/значении и SQL, защищенная от несанкционированного доступа, история изменения данных
- (Rust) toydb — распределенная база данных SQL на Rust, написанная как учебный проект.
- (Rust) DB3 Network — децентрализованная альтернатива Firebase Firestore
- (Python) ZODB — транзакционная объектно-ориентированная база данных ACID.
- (Golang) requiemdb — постоянное хранилище данных OTEL
Базы данных «ключ-значение»
- (C) memcached — высокопроизводительное многопоточное хранилище кэша ключей/значений на основе событий, предназначенное для использования в распределенной системе.
- (C) redis — база данных в памяти с различными типами значений, сохраняющаяся на диске.
- (Rust) TiKV — распределенная транзакционная база данных «ключ-значение», изначально созданная в дополнение к TiDB.
- (C++) leveldb — быстрая библиотека хранения значений ключей, написанная в Google, которая обеспечивает упорядоченное сопоставление строковых ключей со строковыми значениями.
- (Golang) goleveldb — база данных LevelDB, реализованная в Golang.
- (Golang) Summitdb — база данных ключей и значений NoSQL, хранящаяся в памяти. Он сохраняется на диске, использует алгоритм консенсуса Raft, совместим с ACID и построен на транзакционной и строго согласованной модели. Он поддерживает пользовательские индексы, геопространственные данные, документы JSON и определяемые пользователем сценарии JS.
- (Python) pupdb — простая файловая база данных «ключ-значение».
- (Python) Pickledb — хранилище значений ключей с открытым исходным кодом, использующее модуль Python json.
- (C++) KeyDB — более быстрая многопоточная альтернатива Redis.
- (C++) Dragonfly — хранилище данных в памяти, полностью совместимое с Redis и Memcache и разработанное с использованием современных алгоритмов.
- (Golang) BadgerDB — встраиваемая, постоянная и быстрая база данных «ключ-значение» (KV), написанная на чистом Go.
- (Golang) BuntDB — низкоуровневое хранилище ключей/значений в памяти на чистом Go. Он сохраняется на диске, совместим с ACID и использует блокировку для нескольких устройств чтения и одного устройства записи. Он поддерживает пользовательские индексы и геопространственные данные.
- (Rust) ConstDB — Redis-подобное хранилище кэша, реализующее CRDT и активно-активную репликацию.
- (Golang) GhostDB — распределенное хранилище данных общего назначения в памяти, обеспечивающее микросекундную производительность в любом масштабе.
- (Dart) Hive — легкая и невероятно быстрая база данных «ключ-значение», написанная на чистом Dart. Вдохновлено Bitcask
- (Golang) rosedb — быстрая, стабильная и встроенная база данных NoSQL на основе биткаска, поддерживающая различные структуры данных, такие как строка, список, хэш, набор и отсортированный набор.
- (Rust) PumpkinDB — неизменяемый движок базы данных с упорядоченными ключами и значениями
- (Golang) FlashDB — простое хранилище ключей/значений в памяти на чистом Go. Он сохраняется на диске, совместим с ACID и использует блокировку для нескольких устройств чтения и одного устройства записи. Он поддерживает операции типа Redis для таких структур данных, как SET, SORTED SET, HASH и STRING.
- (PHP) Lazer — база данных плоских файлов PHP на основе файлов JSON.
- (Golang) Scribble — крошечная база данных JSON на Golang.
- (Golang) FlyDB — высокопроизводительный механизм хранения KV на основе биткаска, поддерживающий протокол Redis и соответствующую структуру данных.
- (Rust) Engula — распределенное хранилище значений ключей, используемое в качестве кэша, базы данных и механизма хранения.
- (Golang) Dice — чрезвычайно простое хранилище KV в памяти на базе Golang, говорящее на диалекте Redis.
Реляционные, SQL, базы данных NewSQL
- (Golang) CockroachDB — распределенная отказоустойчивая база данных SQL, построенная на транзакционном и строго согласованном хранилище значений ключей.
- (Golang) YugabyteDB — облачная распределенная база данных SQL для критически важных приложений.
- (Golang) RQLite — легкая распределенная реляционная база данных, использующая SQLite в качестве механизма хранения.
- (Golang) Kingbus — распределенное хранилище бинлогов MySQL на базе raft [Raft]
- (C++) YDB — это распределенная база данных SQL с открытым исходным кодом, которая сочетает в себе высокую доступность и масштабируемость со строгой согласованностью и транзакциями ACID.
- (Golang) RadonDB — облачная база данных MySQL с открытым исходным кодом, обеспечивающая неограниченную масштабируемость и производительность.
NoSQL, Базы данных документов
- (C++) MongoDB — база данных документов, предназначенная для простоты разработки и масштабирования.
- (Golang) FerretDB — прокси-сервер, преобразующий запросы проводного протокола MongoDB 6.0+ в SQL — с использованием PostgreSQL в качестве ядра базы данных
- (C#) LiteDB — хранилище документов NoSQL в одном файле данных
- (Python) tinydb — легкая документо-ориентированная база данных, написанная на чистом Python.
- (PHP) SleekDB — простая NoSQL-подобная база данных с плоским файлом, реализованная на PHP без каких-либо сторонних зависимостей, которая хранит данные в простых файлах JSON.
- (Rust) BonsaiDB — ACID, транзакционная KV или база данных, удобная для разработчиков документов, с настраиваемым хранением данных на диске с задержкой.
- (Golang) CloverDB — легкая документо-ориентированная база данных NoSQL, написанная на чистом Golang.
Графовые базы данных
- (Java) neo4j — база данных графов
- (Python) Edgedb — графово-реляционная база данных
- (C++) nebula — распределенная, быстрая графовая база данных с открытым исходным кодом, отличающаяся горизонтальной масштабируемостью и высокой доступностью.
- (Golang) EliasDB — облегченная база данных на основе графов.
Временной ряд
- (Golang) VictoriaMetrics — быстрое и экономичное решение для мониторинга и база данных временных рядов
- (Golang) influxdb — масштабируемое хранилище данных для метрик, событий и аналитики в реальном времени.
- (Java) trino — быстрый механизм распределенных SQL-запросов для анализа больших данных.
- (Java) Apache Doris — простая в использовании, высокопроизводительная и унифицированная база данных аналитики.
- (Scala) FiloDB — распределенная, совместимая с Prometheus, работающая в реальном времени, в памяти, масштабируемая, многосхемная база данных временных рядов/событий/оперативной базы данных.
- (Rust) ceresdb — высокопроизводительная, распределенная, бессхемная, облачная база данных временных рядов, которая может обрабатывать как временные ряды, так и аналитические рабочие нагрузки.
- (Golang) tstorage — это легкий локальный механизм хранения на диске для данных временных рядов с простым API.
- (Rust) CnosDB — это высокопроизводительная, с высокой степенью сжатия и простая в использовании распределенная база данных временных рядов с открытым исходным кодом. Используется в таких областях, как Интернет вещей, промышленный Интернет, подключенные автомобили и ИТ-операции.
- (Golang) LinDB — масштабируемая, высокопроизводительная и доступная распределенная база данных временных рядов.
- (Scala) FiloDB — распределенная, совместимая с Prometheus, работающая в реальном времени, в памяти, масштабируемая, многосхемная база данных временных рядов/событий/оперативной базы данных.
- (Rust) CeresDB — высокопроизводительная распределенная облачная база данных временных рядов.
Столбцы баз данных
- (Java) Apache Cassandra — масштабируемое хранилище секционированных строк. Строки организованы в таблицы с обязательным первичным ключом.
- (C++) scylladb — база данных больших данных, работающая в реальном времени и совместимая по API с Apache Cassandra и Amazon DynamoDB.
- (Golang) FrostDB — встраиваемая столбчатая база данных с широкими столбцами, написанная на Go.
Базы данных разрешений
- (Golang) SpiceDB — система баз данных, вдохновленная Google Zanzibar, для создания и управления разрешениями критически важных для безопасности приложений.
- (Golang) Keto — база данных с открытым исходным кодом, вдохновленная Google Zanzibar, gRPC, REST API, newSQL и простой и детализированный язык разрешений. Поддерживает ACL, RBAC
Аналитические базы данных
- (C++) BaikalDB — это распределенная HTAP MySQL-совместимая база данных, рассчитанная на петабайтные масштабы.
- (Golang) AresDB — механизм хранения и обработки запросов для анализа данных в реальном времени на базе графического процессора.
Векторы
- (Rust) Qdrant - система поиска по сходству векторов и база данных векторов
- (Golang) milvus — векторная база данных с открытым исходным кодом, созданная для внедрения приложений поиска по сходству и искусственного интеллекта.
- (Golang) Weaviate — векторная база данных с открытым исходным кодом, в которой хранятся как объекты, так и векторы.
- (Golang) tobias-mayer/vector-db — простая база данных векторов, которую можно использовать для поиска подобных векторов за логарифмическое время.
- (Rust) DANNY — децентрализованная база данных векторов для создания приложений векторного поиска.
Шлюзы
- (Golang) Glide — открытый, надежный и быстрый шлюз LLM/моделирования для быстрой разработки приложений GenAI.
- (Golang) Traefik — прокси-сервер для облачных приложений
- (Lua) Kong — облачный многофункциональный шлюз API
- (Golang) Skipper — HTTP-маршрутизатор и обратный прокси-сервер для составления сервисов.
- (Golang) janus — легкий API-шлюз и платформа управления.
- (Golang) Lura — сверхпроизводительный API-шлюз с промежуточным программным обеспечением
- (Python) MFLlow Gateway — прокси-сервер LLM
Блокировка
- (Golang)etcd — распределенное надежное хранилище ключей-значений для наиболее критичных данных распределенной системы [Raft + gRPC]
- (Java) Apache Zookeeper — высоконадежная распределенная координация
- (Golang) chubby — (очень упрощенная) реализация Chubby, службы распределенной блокировки Google.
Потоковое вещание
- (Java) Kafka — распределенная, масштабируемая, эластичная, отказоустойчивая и безопасная платформа потоковой передачи событий.
- (Python) faust — библиотека распределенной обработки потоков, переносящая идеи из Kafka Streams в Python.
- (Golang) Liftbridge — легкий, отказоустойчивый поток сообщений за счет реализации надежного расширения потока для системы обмена сообщениями NATS.
- (Rust) RisingWave — распределенная база данных SQL для потоковой обработки, предназначенная для снижения сложности и стоимости создания приложений реального времени.
Планировщики
- (Golang) dkron — распределенная отказоустойчивая система планирования заданий для облачных сред.
- (Python) Celery — распределенная очередь задач
- (Python) Apache Airflow — платформа для программного создания, планирования и мониторинга рабочих процессов.
Очереди
- (Golang) nsq — отказоустойчивая распределенная платформа обмена сообщениями в реальном времени, предназначенная для работы в больших масштабах и обрабатывающая миллиарды сообщений в день [Raft + gRPC]
- (Golang) Sandglass — распределенная, горизонтально масштабируемая, постоянная, упорядоченная по времени очередь сообщений.
- (Golang) dnpipes — распределенная версия именованных каналов Unix, сравнимая с AWS SQS.
- (PHP) GatewayWorker — распределенная среда обмена сообщениями в реальном времени на основе Workerman
- (C++) ZeroMQ — абстракция асинхронных очередей сообщений, несколько шаблонов обмена сообщениями, фильтрация сообщений (подписки), плавный доступ к множеству транспортных протоколов и многое другое.
- (Java) Apache Pulsar — распределенная платформа обмена сообщениями «pub-sub» с очень гибкой моделью обмена сообщениями и интуитивно понятным клиентским API.
- (Java) Apache ActiveMQ — высокопроизводительный брокер сообщений с лицензией Apache 2.0.
Поисковые системы
- (Java) ElasticSearch — распределенная система поиска и аналитики RESTful.
- (Java) Apache Lucene — высокопроизводительная полнофункциональная библиотека системы текстового поиска.
- (Rust) MeiliSearch — молниеносная, сверхрелевантная и устойчивая к опечаткам поисковая система
- (JS) FlexSearch - библиотека полнотекстового поиска с гибкой памятью
- (Golang) RiotSearch - распределенная, простая и эффективная полнотекстовая поисковая система.
- (C++) Typesense — быстрая, устойчивая к опечаткам и нечеткая поисковая система.
- (Rust) Sonic — быстрый, легкий и бессхемный механизм поиска. Альтернатива Elasticsearch, работающая на нескольких МБ ОЗУ.
Файловые системы
- (Golang) JuiceFS — высокопроизводительная файловая система POSIX, совместимая с Hadoop и AWS S3.
- (Golang) SeaweedFS — простая Hadoop-совместимая распределенная файловая система, совместимая с AWS S3 и обладающая широкими масштабируемыми возможностями.
- (C) GlusterFS — распределенное хранилище, масштабируемое до нескольких петабайт.
- (C++) GlusterFS — высоконадежная, масштабируемая и эффективная распределенная файловая система. Он распределяет данные по нескольким физическим серверам, делая их видимыми для конечного пользователя как единую файловую систему.
Обнаружение услуг
- (Golang) sleuth — одноранговое автоматическое обнаружение без мастера и RPC между службами HTTP, расположенными в одной сети.
Обработка данных
- (Scala) Apache Spark — унифицированная аналитическая система для крупномасштабной обработки данных
ТерминусБД
- (Пролог) terminusdb — распределенная база данных с моделью сотрудничества
ОС
- (C) HarveyOS — распределенная операционная система
Рамки
- (Golang)etcd — фреймворк для разработки распределенных систем. Предоставляет основные требования для разработки распределенных систем, включая RPC и связь, управляемую событиями.
- (Golang) ergo - подходы к порту Эрланга/OTP в Голанге
- (Golang) gosiris — фреймворк актеров для Golang
- (Python) семядоля — платформа для определения долговыполняющихся сервисов. Он обеспечивает обработку сигналов Unix, создание рабочих процессов, контроль дочерних процессов, перезагрузку демона, sd-notify, ограничение скорости создания рабочих процессов и многое другое.
- (Java)atomix — полнофункциональный фреймворк для построения отказоустойчивых распределенных систем [REST + Raft]
- (Kotlin) орбита — виртуальный фреймворк для построения распределенных систем
- (JS) hemera — набор инструментов микросервисов Node.js для системы обмена сообщениями NATS [RPC]
- (Python) Tooz — централизация наиболее распространенных распределенных примитивов, таких как протокол членства в группах, служба блокировки и выборы лидера, путем предоставления API координации, помогающего разработчикам создавать распределенные приложения.
- (C++) Nebula — мощная платформа для создания высококонкурентных, распределенных и отказоустойчивых приложений, управляемых сообщениями.
- (GoLang) Service Weaver — платформа, позволяющая писать приложения в виде модульных двоичных файлов и развертывать их как набор микросервисов.
- (GoLang) Dapr — портативная, бессерверная, управляемая событиями среда выполнения, которая работает как вспомогательная программа и позволяет разработчикам легко создавать отказоустойчивые микросервисы без сохранения и сохранения состояния.
Компоненты
- (Golang) Dragonboat — высокопроизводительная многогрупповая консенсусная библиотека Raft на чистом Go.
- (Golang) Golimit — распределенный и децентрализованный ограничитель скорости на основе Uber Ringpop
- (Python) Tenacity — библиотека повторных попыток общего назначения
- (Elixir) ex_hash_ring — реализация согласованного хэш-кольца на чистом Elixir, основанная на превосходной библиотеке C hash-ring.
- (Эликсир) raft - реализация консенсуса Raft
- (C++) NuRaft — реализация Raft, созданная на основе краеугольного проекта.
- (Python) Hyx — легкие примитивы отказоустойчивости для ваших отказоустойчивых и современных микросервисов Python.
- (Python) Migdalor — встроенное средство обнаружения одноранговых узлов Kubernetes для асинхронных узлов Python.
- (Golang) Skiplist — реализация Golang структуры данных Skiplist.
- (Java) Waltz — распределенный журнал с упреждающей записью на основе кворума для репликации транзакций.
Другие ресурсы
- Awesome-scalability — список литературы для иллюстрации моделей масштабируемых, надежных и производительных крупномасштабных систем.
- Awesome-distributed-systems — тщательно подобранный список потрясающих материалов о распределенных системах.
- Awesome-database-learning — список учебных материалов для понимания внутреннего устройства баз данных.
- (C/C++)(Книга) Создайте свой собственный Redis с помощью C/C++
- (C) (Статья) Написание клона sqlite с нуля на C
- Berkley CS186: Введение в системы баз данных
- MIT 6.830: Системы баз данных