멋진 분산 시스템
이 저장소에는 분산 서비스 구축 방법을 더 잘 이해하는 데 유용할 수 있는 다양한 프로그래밍 언어로 된 오픈 소스 코드가 포함된 분산 시스템 프로젝트 목록이 포함되어 있습니다.
데이터베이스
- (Golang) Jocko - Go의 Kafka/분산 커밋 로그 서비스입니다. [서프+뗏목]
- (Golang) oklog - 대규모 클러스터를 위한 분산되고 조정이 필요 없는 로그 관리 시스템 [보관됨]
- (Golang) elasticell - 강력한 일관성과 안정성을 갖춘 분산형 HA Redis 호환 NoSQL 데이터베이스
- (Erlang) CouchDB - 고가용성, 파티션 허용, 최종 일관성을 갖춘 문서 데이터베이스입니다. 자동 충돌 감지로 마스터-마스터 설정을 지원합니다.
- (Java) Apache HBase - Hadoop 데이터베이스, 확장 가능한 분산형 빅 데이터 저장소입니다. 빅 데이터에 대한 무작위, 실시간 읽기/쓰기 액세스가 필요할 때 유용합니다.
- (Golang) Tair - 고성능 및 고가용성 분산 고속 액세스 메모리(MDB)/영구(LDB) 스토리지 서비스
- (Golang) immudb - 제로 트러스트, 키/값 및 SQL, 변조 방지, 데이터 변경 기록을 기반으로 하는 불변 데이터베이스
- (Rust) toydb - 학습 프로젝트로 작성된 Rust의 분산 SQL 데이터베이스
- (Rust) DB3 네트워크 - 분산형 Firebase Firestore 대안
- (Python) ZODB - ACID 트랜잭션 객체 지향 데이터베이스
- (Golang) requiemdb - OTEL 데이터를 위한 영구 저장소
키-값 데이터베이스
- (C) memcached - 분산 시스템에서 사용하기 위한 고성능 멀티스레드 이벤트 기반 키/값 캐시 저장소
- (C) redis - 디스크에 지속되는 다양한 값 유형을 가진 메모리 내 데이터베이스
- (Rust) TiKV - 원래 TiDB를 보완하기 위해 만들어진 분산 트랜잭션 키-값 데이터베이스
- (C++) leveldb - 문자열 키에서 문자열 값으로 순서화된 매핑을 제공하는 Google에서 작성된 빠른 키-값 저장소 라이브러리
- (Golang) goleveldb - Golang에서 구현된 LevelDB
- (Golang) Summitdb - 메모리 내 NoSQL 키/값 데이터베이스입니다. 디스크에 유지되고 Raft 합의 알고리즘을 사용하며 ACID를 준수하고 트랜잭션 및 강력한 일관성 모델을 기반으로 구축되었습니다. 사용자 정의 인덱스, 지리 공간 데이터, JSON 문서 및 사용자 정의 JS 스크립팅을 지원합니다.
- (Python) pupdb - 간단한 파일 기반 키-값 데이터베이스
- (Python) pickledb - Python의 json 모듈을 사용하는 오픈 소스 키-값 저장소
- (C++) KeyDB - Redis보다 더 빠른 드롭인 멀티스레드 대안
- (C++) Dragonfly - Redis 및 Memcache와 완벽하게 호환되고 최신 알고리즘을 사용하여 설계된 메모리 내 데이터 저장소
- (Golang) BadgerDB - 순수 Go로 작성된 내장 가능하고 지속적이고 빠른 키-값(KV) 데이터베이스
- (Golang) BuntDB - 순수 Go의 저수준 메모리 내 키/값 저장소입니다. 디스크에 유지되고 ACID를 준수하며 여러 판독기와 단일 기록기에 대해 잠금을 사용합니다. 사용자 정의 색인 및 지리공간 데이터를 지원합니다.
- (Rust) ConstDB - CRDT 및 활성-활성 복제를 구현하는 Redis와 유사한 캐시 저장소입니다.
- (Golang) GhostDB - 모든 규모에서 마이크로초 성능을 제공하는 분산형, 메모리 내, 범용 키-값 데이터 저장소입니다.
- (Dart) Hive - 순수한 Dart로 작성된 가볍고 매우 빠른 키-값 데이터베이스입니다. Bitcask에서 영감을 받음
- (Golang) rosedb - bitcask 기반의 빠르고 안정적이며 내장된 NoSQL 데이터베이스로 문자열, 목록, 해시, 집합 및 정렬된 집합과 같은 다양한 데이터 구조를 지원합니다.
- (Rust) PumpkinDB - 불변의 순서화된 키-값 데이터베이스 엔진
- (Golang) FlashDB - 순수 Go의 간단한 메모리 내 키/값 저장소입니다. 디스크에 유지되고 ACID를 준수하며 여러 판독기와 단일 기록기에 대해 잠금을 사용합니다. SET, SORTED SET, HASH 및 STRING과 같은 데이터 구조에 대한 작업과 같은 Redis를 지원합니다.
- (PHP) Lazer - JSON 파일을 기반으로 하는 PHP 플랫 파일 데이터베이스
- (Golang) Scribble - Golang의 작은 JSON 데이터베이스
- (Golang) FlyDB - bitcask paper 기반의 고성능 KV 스토리지 엔진으로 redis 프로토콜과 해당 데이터 구조를 지원합니다.
- (Rust) Engula - 캐시, 데이터베이스 및 스토리지 엔진으로 사용되는 분산 키-값 저장소
- (Golang) Dice - Redis 방언을 사용하는 매우 간단한 Golang 기반 인메모리 KV 스토어
관계형, SQL, NewSQL 데이터베이스
- (Golang) CockroachDB - 트랜잭션이 가능하고 일관성이 뛰어난 키-값 저장소를 기반으로 구축된 분산 내결함성 SQL 데이터베이스
- (Golang) YugabyteDB - 미션 크리티컬 애플리케이션을 위한 클라우드 네이티브 분산 SQL 데이터베이스
- (Golang) RQLite - SQLite를 스토리지 엔진으로 사용하는 경량 분산 관계형 데이터베이스
- (Golang) Kingbus - raft 기반의 분산형 MySQL binlog 저장소 [Raft]
- (C++) YDB는 고가용성과 확장성을 엄격한 일관성 및 ACID 트랜잭션과 결합한 오픈 소스 분산 SQL 데이터베이스입니다.
- (Golang) RadonDB - 무제한 확장성과 성능을 제공하는 오픈 소스, 클라우드 기반 MySQL 데이터베이스
NoSQL, 문서 데이터베이스
- (C++) MongoDB - 개발 및 확장이 용이하도록 설계된 문서 데이터베이스
- (Golang) FerretDB - MongoDB 6.0+ 유선 프로토콜 쿼리를 SQL로 변환하는 프록시 - PostgreSQL을 데이터베이스 엔진으로 사용
- (C#) LiteDB - 단일 데이터 파일에 NoSQL 문서 저장
- (Python)tinydb - 순수 Python으로 작성된 경량 문서 지향 데이터베이스
- (PHP) SleekDB - 일반 JSON 파일에 데이터를 저장하는 타사 종속성 없이 PHP로 구현된 데이터베이스와 같은 간단한 플랫 파일 NoSQL입니다.
- (Rust) BonsaiDB - 구성 가능한 지연된 온디스크 데이터 저장 기능을 갖춘 ACID, 트랜잭션 KV 또는 문서 개발자 친화적인 데이터베이스
- (Golang) CloverDB - 순수 Golang으로 작성된 경량 문서 지향 NoSQL 데이터베이스
그래프 데이터베이스
- (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는 고성능, 고압축, 사용하기 쉬운 오픈 소스 분산 시계열 데이터베이스입니다. IoT, 산업용 인터넷, 커넥티드 카, IT 운영 등의 분야에서 사용됩니다.
- (Golang) LinDB - 확장 가능한 고성능, 고가용성 분산 시계열 데이터베이스
- (Scala) FiloDB - 분산형, 프로메테우스 호환, 실시간, 인메모리, 대규모 확장 가능, 다중 스키마 시계열/이벤트/운영 데이터베이스
- (Rust) CeresDB - 고성능 분산형 클라우드 네이티브 시계열 데이터베이스
열 데이터베이스
- (Java) Apache Cassandra - 확장성이 뛰어난 분할된 행 저장소입니다. 행은 필수 기본 키가 있는 테이블로 구성됩니다.
- (C++) scylladb - Apache Cassandra 및 Amazon DynamoDB와 API 호환되는 실시간 빅 데이터 데이터베이스
- (Golang) FrostDB - Go로 작성된 내장형 와이드 컬럼 컬럼형 데이터베이스
권한 데이터베이스
- (Golang) SpiceDB - 보안이 중요한 애플리케이션 권한을 생성하고 관리하기 위한 Google Zanzibar에서 영감을 받은 데이터베이스 시스템
- (Golang) Keto - Google Zanzibar에서 영감을 받은 오픈 소스 데이터베이스, gRPC, REST API, newSQL 및 쉽고 세부적인 권한 언어입니다. ACL, RBAC 지원
분석 데이터베이스
- (C++) BaikalDB는 페타바이트 규모로 설계된 분산형 HTAP MySQL 호환 데이터베이스입니다.
- (Golang) AresDB - GPU 기반 실시간 분석 스토리지 및 쿼리 엔진
벡터
- (Rust) Qdrant - 벡터 유사성 검색 엔진 및 벡터 데이터베이스
- (Golang) milvus - 임베딩 유사성 검색 및 AI 애플리케이션을 지원하기 위해 구축된 오픈 소스 벡터 데이터베이스
- (Golang) Weaviate - 객체와 벡터를 모두 저장하는 오픈 소스 벡터 데이터베이스
- (Golang) tobias-mayer/Vector-db - 로그 시간에서 유사한 벡터를 검색하는 데 사용할 수 있는 간단한 벡터 데이터베이스
- (Rust) DANNY - 벡터 검색 애플리케이션 구축을 위한 분산형 벡터 데이터베이스
게이트웨이
- (Golang) Glide - GenAI 앱의 신속한 개발을 위한 개방적이고 안정적인 고속 LLM/모델 게이트웨이
- (Golang) Traefik - 클라우드 기반 앱 프록시
- (Lua) Kong - 클라우드 네이티브 기능이 풍부한 API 게이트웨이
- (Golang) Skipper - 서비스 구성을 위한 HTTP 라우터 및 역방향 프록시
- (Golang) janus - 경량 API 게이트웨이 및 관리 플랫폼
- (Golang) Lura - 미들웨어를 갖춘 초고성능 API 게이트웨이
- (Python) MLFlow 게이트웨이 - LLM 프록시
잠금
- (Golang) etcd - 분산 시스템의 가장 중요한 데이터를 위한 신뢰할 수 있는 분산 키-값 저장소 [Raft + gRPC]
- (Java) Apache Zookeeper - 매우 안정적인 분산 조정
- (Golang) chubby - Google의 분산 잠금 서비스인 Chubby의 (매우 단순화된) 구현입니다.
스트리밍
- (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 - AWS SQS와 유사한 Unix 명명된 파이프의 분산 버전
- (PHP) GatewayWorker - Workerman 기반 분산 실시간 메시징 프레임워크
- (C++) ZeroMQ - 비동기 메시지 대기열 추상화, 다중 메시징 패턴, 메시지 필터링(구독), 다중 전송 프로토콜에 대한 원활한 액세스 등
- (Java) Apache Pulsar - 매우 유연한 메시징 모델과 직관적인 클라이언트 API를 갖춘 분산형 게시-구독 메시징 플랫폼
- (Java) Apache ActiveMQ - 고성능 Apache 2.0 라이선스 메시지 브로커
검색 엔진
- (Java) ElasticSearch - 분산형 RESTful 검색 및 분석 엔진
- (Java) Apache Lucene - 고성능, 모든 기능을 갖춘 텍스트 검색 엔진 라이브러리
- (Rust) MeiliSearch - 매우 빠르고 관련성이 높으며 오타를 허용하는 검색 엔진
- (JS) FlexSearch - 메모리 유연성이 뛰어난 전체 텍스트 검색 라이브러리
- (Golang) RiotSearch - 분산되고 단순하며 효율적인 전체 텍스트 검색 엔진
- (C++) Typesense - 빠르고 오타 허용되며 퍼지 검색 엔진
- (Rust) Sonic - 빠르고 가볍고 스키마가 없는 검색 백엔드입니다. 몇 MB의 RAM에서 실행되는 Elasticsearch의 대안
파일 시스템
- (Golang) JuiceFS - Hadoop 호환 AWS S3 호환 고성능 POSIX 파일 시스템
- (Golang) SeaweedFS - 간단한 Hadoop 호환 AWS S3 호환 분산 및 확장성이 뛰어난 분산 파일 시스템
- (C) GlusterFS - 수 페타바이트까지 확장할 수 있는 분산 스토리지
- (C++) GlusterFS - 안정성이 뛰어나고 확장 가능하며 효율적인 분산 파일 시스템입니다. 이는 데이터를 여러 물리적 서버에 분산시켜 최종 사용자에게 단일 파일 시스템으로 표시합니다.
서비스 발견
- (Golang) sleuth - 마스터가 없는 P2P 자동 검색 및 동일한 네트워크에 있는 HTTP 서비스 간의 RPC
데이터 처리
- (Scala) Apache Spark - 대규모 데이터 처리를 위한 통합 분석 엔진
종점DB
- (프롤로그) terminusdb - 협업 모델을 갖춘 분산 데이터베이스
OS
프레임워크
- (Golang) etcd - 분산 시스템 개발을 위한 프레임워크입니다. RPC 및 이벤트 중심 통신을 포함한 분산 시스템 개발을 위한 핵심 요구 사항을 제공합니다.
- (Golang) ergo - Erlang/OTP 포트가 Golang에 접근합니다.
- (Golang) gosiris - Golang을 위한 액터 프레임워크
- (Python) 자엽 - 장기 실행 서비스를 정의하기 위한 프레임워크입니다. Unix 신호 처리, 작업자 생성, 하위 프로세스 감독, 데몬 다시 로드, sd-notify, 작업자 생성 속도 제한 등을 제공합니다.
- (Java)atomix - 내결함성 분산 시스템 구축을 위한 모든 기능을 갖춘 프레임워크 [REST + Raft]
- (Kotlin) 궤도 - 분산 시스템 구축을 위한 가상 행위자 프레임워크
- (JS) hemera - NATS 메시징 시스템 [RPC]용 Node.js 마이크로서비스 툴킷
- (Python) Tooz - 개발자가 분산 애플리케이션을 구축하는 데 도움이 되는 조정 API를 제공하여 그룹 멤버십 프로토콜, 잠금 서비스 및 리더 선택과 같은 가장 일반적인 분산 기본 요소를 중앙 집중화합니다.
- (C++) Nebula - 동시성, 분산 및 복원력이 뛰어난 메시지 기반 애플리케이션을 구축하기 위한 강력한 프레임워크
- (GoLang) Service Weaver - 애플리케이션을 모듈식 바이너리로 작성하고 이를 마이크로서비스 세트로 배포할 수 있는 프레임워크
- (GoLang) Dapr - 사이드카로 작동하고 개발자가 탄력적이고 상태 비저장 마이크로서비스를 쉽게 구축할 수 있게 해주는 이식 가능한 서버리스 이벤트 기반 런타임입니다.
구성요소
- (Golang) Dragonboat - 순수 Go의 고성능 다중 그룹 Raft 합의 라이브러리
- (Golang) Golimit - Uber ringpop 기반 분산 및 분산 속도 제한기
- (Python) Tenacity - 범용 재시도 라이브러리
- (Elixir) ex_hash_ring - 뛰어난 C 해시링 라이브러리를 기반으로 한 순수 Elixir 일관성 해시 링 구현
- (Elixir) raft - Raft 합의 구현
- (C++) NuRaft - 초석 프로젝트에서 파생된 Raft 구현
- (Python) Hyx - 탄력적이고 현대적인 Python 마이크로서비스를 위한 경량 내결함성 기본 요소
- (Python) Migdalor - Python asyncio 노드를 위한 Kubernetes 네이티브 피어 검색
- (Golang) Skiplist - Skiplist 데이터 구조의 Golang 구현입니다.
- (Java) Waltz - 트랜잭션 복제를 위한 쿼럼 기반 분산 미리 쓰기 로그
기타 리소스
- awesome-scalability - 확장 가능하고 안정적이며 성능이 뛰어난 대규모 시스템의 패턴을 보여주는 읽기 목록
- awesome-distributed-systems - 분산 시스템의 멋진 자료에 대한 선별된 목록
- awesome-database-learning - 데이터베이스 내부를 이해하기 위한 학습 자료 목록
- (C/C++)(도서) C/C++로 나만의 Redis 구축
- (C) (기사) C에서 처음부터 sqlite 복제본 작성
- Berkley CS186: 데이터베이스 시스템 소개
- MIT 6.830: 데이터베이스 시스템