Apache Fory Rust – JSON/Protobuf보다 10~20배 빠른 직렬화 프레임워크

22 hours ago 1

  • Apache Fory Rust초고속 직렬화 성능자동 참조 관리를 제공하는 크로스랭귀지 직렬화 프레임워크
  • Rust의 제로카피 기술타입 안전성을 기반으로, 순환 참조·트레이트 객체·스키마 진화를 자동 처리
  • IDL 파일이나 코드 생성 없이 Rust, Python, Java, Go 등 다양한 언어 간 데이터 교환 지원
  • 벤치마크 결과, JSON·Protobuf 대비 10~20배 이상 빠른 처리 속도를 기록
  • 마이크로서비스·데이터 파이프라인·실시간 시스템 등 고성능 환경에서 활용 가치 높음

직렬화의 딜레마와 Apache Fory Rust의 등장

  • 기존 직렬화 방식은 속도·유연성·언어 호환성 중 하나를 포기해야 하는 한계 존재
    • 수작업 바이너리 포맷은 빠르지만 스키마 변경에 취약
    • JSON/Protobuf는 유연하지만 10배 이상의 성능 오버헤드
    • 기존 솔루션은 언어 고유 기능 지원 부족
  • Apache Fory Rust는 성능과 유연성을 동시에 확보, IDL·수동 스키마 관리 불필요

주요 특징

  • 1. 진정한 크로스랭귀지 지원

    • 동일한 바이너리 프로토콜을 Java, Python, C++, Go 등에서 공유
    • Rust에서 직렬화한 데이터를 Python에서 그대로 역직렬화 가능
    • 스키마 파일·코드 생성·버전 불일치 문제 없음, 다언어 마이크로서비스 간 데이터 교환 단순화
  • 2. 자동 순환·공유 참조 처리

    • 대부분의 프레임워크가 실패하는 순환 참조 구조를 자동 추적 및 보존
    • 동일 객체를 여러 번 참조해도 한 번만 직렬화, 참조 동일성 유지
    • 그래프 데이터베이스·ORM·복잡한 도메인 모델에 적합
  • 3. 트레이트 객체 직렬화

    • Rust의 Box 등 트레이트 객체 직렬화를 지원
    • register_trait_type! 매크로로 다형적 타입 등록 가능
    • Box, Rc, Arc, dyn Any 등 다양한 형태 지원
    • 플러그인 시스템·이질적 컬렉션·확장 가능한 아키텍처 구현 가능
  • 4. 스키마 진화(호환 모드)

    • Compatible 모드로 서비스 버전 간 스키마 변경 허용
      • 필드 추가·삭제·순서 변경·옵션 타입 변환 가능
      • 타입 변경은 불가
    • 무중단 배포독립적 마이크로서비스 진화에 유용

기술적 기반

  • 프로토콜 설계

    • 구조: | fory header | reference meta | type meta | value data |
    • 가변 길이 정수·압축 메타데이터·참조 추적·리틀엔디언 레이아웃 적용
    • 공유 객체 중복 제거타입 메타데이터 압축으로 성능 향상
  • 컴파일 타임 코드 생성

    • 리플렉션 대신 매크로 기반 코드 생성으로 런타임 오버헤드 제거
    • #[derive(ForyObject)] 매크로가 직렬화·역직렬화 함수 자동 생성
    • 타입 안전성 확보, 바이너리 크기 최소화, IDE 자동완성 지원
  • 아키텍처 구성

    • fory/: 고수준 API
    • fory-core/: 직렬화 엔진 (버퍼 I/O, 타입 등록, 메타 압축 등)
    • fory-derive/: 프로시저 매크로 정의
    • 모듈화된 구조로 유지보수성과 확장성 확보

벤치마크 결과

  • JSON 및 Protobuf 대비 10~20배 이상 빠른 처리 속도
  • 예시:
    • simple_struct(small) → Fory 35,729,598 TPS / JSON 10,167,045 / Protobuf 8,633,342
    • person(medium) → Fory 3,839,656 TPS / JSON 337,610 / Protobuf 369,031
  • 모든 테스트 케이스에서 Fory가 최고 성능 기록

활용 시나리오

  • 적합한 사용 사례

    • 다언어 마이크로서비스: 스키마 파일 없이 데이터 교환
    • 고성능 데이터 파이프라인: 초당 수백만 레코드 처리
    • 복잡한 도메인 모델: 순환 참조·다형성 구조 지원
    • 실시간 시스템: 1ms 이하 지연, 제로카피 역직렬화
  • 대안 고려

    • 사람이 읽기 쉬운 포맷 필요 시 → JSON/YAML
    • 장기 저장 포맷 필요 시 → Parquet
    • 단순 데이터 구조 → serde + bincode

시작하기

  • 설치

    • Cargo.toml에 추가: [dependencies] fory = "0.13"
  • 기본 직렬화 예시

    • #[derive(ForyObject)]로 구조체 등록 후 serialize() / deserialize() 사용
    • 타입 ID 등록으로 데이터 일관성 유지
  • 크로스랭귀지 직렬화

    • compatible(true).xlang(true) 설정으로 다언어 호환 모드 활성화
    • ID 또는 이름 기반 등록(register_by_namespace, register_by_name) 지원

지원 타입

  • 기본형: bool, 정수, 부동소수, String
  • 컬렉션: Vec, HashMap, BTreeMap, HashSet, Option
  • 스마트 포인터: Box, Rc, Arc, RcWeak, ArcWeak, RefCell, Mutex
  • 날짜/시간: chrono 타입
  • 사용자 정의 객체: ForyObject, ForyRow
  • 트레이트 객체: Box/Rc/Arc, Rc/Arc

로드맵

  • v0.13에서 제공

    • 정적 코드 생성, 제로카피 Row 포맷, 순환 참조 추적, 트레이트 객체 직렬화, 스키마 호환 모드
  • 예정 기능

    • 크로스랭귀지 참조 직렬화, 부분 Row 업데이트

프로덕션 고려사항

  • 스레드 안전성: 등록 완료 후 Arc로 공유 가능 (Send + Sync)
  • 에러 처리: Result 기반, 타입 불일치·버퍼 부족 등 명시적 오류 구분

문서 및 커뮤니티

결론

  • Apache Fory Rust는 성능·유연성·언어 호환성의 절충을 제거한 차세대 직렬화 프레임워크
  • 매크로 기반 자동화, 트레이트 객체 지원, 순환 참조 처리로 개발 효율 극대화
  • 마이크로서비스·데이터 파이프라인·실시간 시스템 등에서 즉시 활용 가능

Read Entire Article