GN⁺: Iggy.rs - 러스트로 구축하는 메시지 스트리밍
(blog.iggy.rs)기원
- 2023년 4월, Rust 학습을 결심함.
- 분산 시스템과 메시징에 대한 경험을 바탕으로 메시지 스트리밍 플랫폼 개발 결정.
- 메시징 시스템의 내부 작동 원리와 개발자들의 트레이드오프 이해 목적.
- Iggy.rs의 탄생, 속도와 가벼움을 강조하는 메시지 스트리밍 플랫폼 목표 설정.
프로젝트
- 초기 Iggy는 QUIC 프로토콜을 사용하여 기본적인 메시지 교환 기능 제공.
- 지속적인 프로토타이핑과 개선을 통해 병렬 쓰기/읽기 및 독립적인 스트림 지원 서버 구현.
- TCP와 HTTP 프로토콜 지원 추가 및 데이터 동기화 메커니즘 최적화를 통한 성능 향상.
- 벤치마킹을 통해 높은 처리량과 낮은 지연 시간 확인, 장기 프로젝트로 전환.
팀
- Iggy는 약 10명의 멤버로 구성된 팀이 다양한 부분에 기여.
- 코어 서버, SDK, 웹 UI, CLI 등 다양한 프로젝트에 참여.
- 프로그래밍에 대한 열정을 공유하는 다양한 경험의 개발자들이 자발적으로 참여.
- 전 세계에서 온 외부 기여자들의 참여로 프로젝트에 대한 자신감 향상.
기능
- 고성능, 지속 가능한 로그 기반 메시지 스트리밍 서버.
- 높은 처리량, 낮은 지연 시간, Rust 컴파일 언어의 예측 가능한 리소스 사용.
- 다중 스트림, 토픽, 파티션 지원 및 다양한 전송 프로토콜 지원.
- RESTful API, 다양한 언어의 클라이언트 SDK, 바이너리 데이터 직접 작업.
- 서버 기능 구성 가능, 소비자 오프셋 서버 저장, 메시지 폴링 다양한 방법 지원.
- 메시지 순서 및 수평 확장을 위한 소비자 그룹, 메시지 만료 및 중복 제거 기능.
- 모든 전송 프로토콜에 대한 TLS 지원, 선택적 데이터 암호화 및 메시지 헤더 지원.
- 스트리밍 서버 관리를 위한 내장 CLI 및 벤치마킹 앱, 단일 바이너리 배포.
로드맵
- GitHub 트렌딩 페이지에 등장한 후 사용자들과 기능 추가에 대한 논의.
- 클러스터링, 저수준 I/O, 코어당 스레드 아키텍처를 통한 성능 및 신뢰성 향상 목표.
- Raft 합의 메커니즘 실험, io_uring을 통한 I/O 작업 개선, monoio 런타임 사용 계획.
미래
- 일반적인 목적의 메시지 스트리밍 플랫폼과 OS 및 하드웨어 한계 도전 목표.
- 사용하기 쉬운 통합 플랫폼으로 다양한 프로그래밍 언어, CLI, 웹 UI 지원 계획.
- 커뮤니티의 피드백과 아이디어를 통한 발전 목표.
GN⁺의 의견
- Iggy.rs는 Rust 기반의 메시지 스트리밍 플랫폼으로, 높은 성능과 낮은 지연 시간을 목표로 함.
- 오픈 소스 프로젝트로서 전 세계 개발자들의 자발적인 참여와 기여를 통해 지속적으로 성장 중.
- 클러스터링, 저수준 I/O 최적화, 코어당 스레드 아키텍처와 같은 혁신적인 기술을 통해 분산 시스템의 성능 한계를 뛰어넘으려는 야심 찬 목표가 흥미롭고, 이 분야에 관심 있는 사람들에게 매우 유익한 프로젝트임.
Hacker News 의견
- 소프트웨어 분야에 처음 관심을 갖게 한 것은 돈이 아닌 공동의 목표를 향해 노력하는 사람들의 이상이었음. 프로젝트에 행운을 빌며, 대안들과의 비교를 통해 프로젝트의 위치를 더 잘 이해할 수 있기를 바람.
- 블로그 포스팅이 마음에 들며, 저자가 겸손하고 정직하며 건설적인 프로젝트 리더로 보임. 프로젝트에 행운을 빔.
- JetStream과 직접적인 경쟁 제품으로 보이며, 1년 미만의 작업으로 인상적인 진전을 보임.
- Fluvio의 기원을 다시 생각하게 한 포스트로, 수십 년간 다양한 분야에서 데이터 중심 애플리케이션과의 긴 관계를 가진 소규모 팀이 Rust와 WebAssembly를 사용한 데이터 스트리밍에 대해 흥분함.
- Kafka와 Fluvio(또 다른 Rust로 작성된 Kafka 경쟁자)와의 비교가 확실하지 않으나, RabbitMQ와 같은 메시지 큐일 수도 있음.
- 몇 년 전에 친구와 함께 Go로 비슷한 것을 만들었음.
- Rust를 배운 후에 시도해보고 싶으며, 사이트의 미학이 마음에 듦.
- 프로젝트가 흥미롭지만 시도하기 전에 서버 인스턴스를 여러 개 실행하는 방법과 서버 간 파일 시스템 상호작용이 어떻게 작동하는지 이해가 필요함.
- KeyDB의 스트리밍과 비교했을 때의 장점으로 더 견고한 지속성을 생각함.
- monoio 선택에 놀람. 야간 컴파일러 사용이 필요하며, 프로젝트 유지 관리에 좋은 선택이 아니라고 생각함.