Original Repository

MCAerogel/Aerogel

Stars: - Forks: - Open Issues: -
Open on GitHub

Next-Gen Runtime Track

Built to push Minecraft server architecture further with an independent core and aggressive iteration.

Aerogel Server

Aerogel 다운로드

Aerogel is a custom Minecraft server engine that uses Folia exclusively for parallel chunk generation while implementing the entire server runtime independently.

Built for high-parallel worlds, tuned for contributor velocity.

Repository MCAerogel/Aerogel
Asset Aerogel.jar
Hosting GitHub Pages Ready
주의

현재 Aerogel은 초기 개발 단계로, 실제 운영 환경에 사용할 만큼 안정적이지 않습니다. 기여 및 테스트 목적으로 사용을 권장합니다.

  • 버전 간 동작 차이 및 회귀가 발생할 수 있습니다.
  • 플러그인/API 호환성이 예고 없이 달라질 수 있습니다.
  • 운영 서버보다는 테스트/기여 환경에서 사용해 주세요.

버전별 다운로드

릴리즈 정보를 가져오는 중...

Compatibility

  • Recommended Java Java 25
  • Distribution GraalVM
  • Release Stage Early Development

Checksum Verification

After download, verify SHA-256 to ensure file integrity.

Linux / macOS
sha256sum Aerogel.jar
Windows PowerShell
Get-FileHash .\Aerogel.jar -Algorithm SHA256

Platform Start Commands

Use the command that matches your environment to launch Aerogel quickly.

Linux / macOS (bash)
java -Xms4G -Xmx4G -jar Aerogel.jar nogui
Windows (PowerShell)
java -Xms4G -Xmx4G -jar .\Aerogel.jar nogui

Known Issues

  • Early development builds may contain gameplay regressions between releases.
  • API behavior and compatibility can change without notice in this phase.
  • Production deployment is not recommended until stability targets are announced.
Open Known Issues

Development Team

Core contributor information from the original repository README.

Aerogel 동시성/병렬 처리 아키텍처

Runtime Spec

Aerogel의 월드 처리 경로는 락 중심 구조 대신 Actor 경계, 원자적 FSM, 비차단 파이프라인을 조합해 고부하 구간에서도 처리량과 지연 안정성을 동시에 확보하도록 설계되어 있습니다.

  1. 01 Chunk Actor 기반 실행 경계

    시스템은 청크를 동시 접근 가능한 공유 객체로 보지 않고, 청크별 단일 실행 흐름(Actor)으로 캡슐화합니다. 모든 변경 연산은 해당 청크 큐를 통과해 순차 적용되며, 교차 청크 요청은 동기 대기 대신 비차단 enqueue로 위임됩니다. 이 구조는 락 계층 설계 없이도 상호 배제와 실행 순서를 동시에 보장합니다.

    Actor: 상태를 내부에 캡슐화하고 메시지 처리로만 상태를 변경하는 실행 단위입니다.

    Enqueue: 작업을 즉시 실행하지 않고 큐에 넣어 순차 처리하는 방식입니다.

    교차 청크 요청: 현재 청크 밖의 다른 청크 작업을 직접 잠그지 않고 메시지로 위임하는 호출입니다.

  2. 02 원자적 상태 전이(Stream FSM)

    청크 스트리밍은 AtomicBoolean/AtomicReference/AtomicInteger를 결합한 상태기계로 동작합니다. inFlight는 단일 활성 스트림을, pendingTarget은 최신 요청을, version은 유효 세대를 표현합니다. 따라서 이동 중 연속 요청에서도 오래된 작업은 자연스럽게 폐기되고 최신 목표만 진행되어, 락 없이 일관된 전이 규칙을 유지합니다.

    AtomicBoolean / AtomicReference / AtomicInteger: 여러 스레드가 동시에 접근해도 값 갱신이 깨지지 않도록 보장하는 원자 타입입니다.

    inFlight: 현재 실제로 실행 중인 단일 스트리밍 작업을 가리키는 슬롯입니다.

    pendingTarget: 사용자의 가장 최신 이동 목표를 보관해 오래된 목표를 자연스럽게 버리게 하는 값입니다.

    Version(세대): 오래된 작업을 판별해 폐기하기 위한 단조 증가 식별자입니다.

  3. 03 생성-전송 분리 파이프라인

    청크 생성(월드 계산)과 패킷 구성/전송(네트워크 직렬화)을 분리한 다단계 파이프라인을 사용합니다. 각 단계는 독립 워커 풀에서 병렬 처리되고, 단계 간 완료 조건은 원자 카운터로 결합됩니다. 결과적으로 특정 단계 지연이 전체 정지를 유발하지 않으며, 처리량과 응답성을 동시에 확보하는 비차단 처리 경로가 형성됩니다.

    파이프라인: 처리 단계를 분리해 서로 다른 단계가 동시에 진행되도록 하는 구조입니다.

    워커 풀: 미리 준비된 스레드 묶음이 작업을 나눠 처리하는 실행 자원입니다.

    Backpressure: 느린 단계가 빠른 단계의 입력 속도를 조절해 과부하를 방지하는 제어입니다.

  4. 04 Lock-Free 친화 데이터 평면

    런타임 공유 상태는 ConcurrentHashMap, ConcurrentLinkedQueue, @Volatile 중심으로 구성됩니다. 읽기 경로는 가시성 보장을 우선하고, 쓰기 경로는 CAS 기반 단발 전환으로 경쟁을 흡수합니다. 특히 채널 flush는 단일 드레이너 플래그 패턴으로 중복 스케줄링을 제거해, 고빈도 이벤트 구간에서도 락 경합 없이 안정적인 지연 특성을 제공합니다.

    ConcurrentHashMap: 여러 스레드가 동시에 읽고 써도 안전한 해시맵입니다.

    ConcurrentLinkedQueue: 락 없이 다중 스레드가 추가/조회할 수 있는 큐입니다.

    @Volatile: 한 스레드가 바꾼 값을 다른 스레드가 즉시 보도록 하는 가시성 키워드입니다.

    CAS: 기대값과 현재값을 비교해 같을 때만 값을 교체하는 원자 연산입니다.

    드레이너 플래그: 한 번에 하나의 flush 처리자만 동작하도록 보장하는 스위치입니다.

  5. 05 중복 연산 통합과 취소 전파

    동일 청크에 대한 동시 빌드는 in-flight 레지스트리에서 단일 작업으로 합쳐지고, 여러 소비자가 결과를 공유합니다. 대기자가 사라진 작업은 취소 의도를 원자적으로 전파해 조기 중단되며, 워밍업 또한 단일 future로 통합됩니다. 이 메커니즘은 불필요한 CPU 소비와 초기 경합을 줄여, 멀티스레드 효율을 실사용 부하에 맞게 최적화합니다.

    In-flight 레지스트리: 현재 진행 중인 작업을 키 단위로 합치는 공유 인덱스입니다.

    Future: 아직 끝나지 않은 비동기 작업의 완료 결과를 나중에 받는 핸들입니다.

    Request Coalescing: 같은 요청이 여러 번 들어오면 하나로 합쳐 중복 계산을 줄이는 기법입니다.

    취소 전파: 소비자가 사라졌을 때 상위 단계로 중단 의도를 전달해 낭비를 줄이는 전략입니다.

Paper 기반 기술 비교

Aerogel의 실행 모델, 상태 전이 규칙, 동시성 제어 구조를 기존 연구 문맥과 대응시켜 정리한 비교입니다.

비교 항목 Aerogel 기술 Paper 기준 차이점/해석
실행 경계 청크 단위 Actor 캡슐화 + 메시지 위임 Gul Agha, 1986, Actors: A Model of Concurrent Computation in Distributed Systems Aerogel은 Actor를 "청크 단위"로 고정해 월드 변경 순서를 명시적으로 제한합니다.
상태 전이 규칙 Atomic* + 세대(version) 기반 Stream FSM David Harel, 1987, Statecharts: A Visual Formalism for Complex Systems 복합 상태도 대신 런타임 원자 타입 조합으로 전이 유효성만 엄격히 강제합니다.
Lock-Free 데이터 평면 Concurrent 자료구조 + CAS 단발 전환 Maurice Herlihy, Jeannette Wing, 1990, Linearizability: A Correctness Condition for Concurrent Objects 형식 검증 중심 접근보다 운영 코드에서의 가시성/선형화 준수에 집중합니다.
큐 기반 비차단 처리 다중 producer 경로를 단일 소비 흐름으로 수렴 Maged M. Michael, Michael L. Scott, 1996, Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms 일반 큐 알고리즘을 청크/패킷 파이프라인 단계 경계에 맞춰 적용합니다.
중복 요청 통합 in-flight 레지스트리에서 동일 요청 coalescing Jeffrey Dean, Luiz A. Barroso, 2013, The Tail at Scale 지연 최적화 자체보다 "중복 작업 제거 + 취소 전파"의 일관성 보장을 우선합니다.

정합성 보장

  • 청크 단위 변경 연산 순서는 큐를 통해 직렬화됩니다.
  • 오래된 스트림 요청은 세대(version) 비교로 폐기됩니다.
  • 동일 키 in-flight 작업은 단일 결과로 합쳐집니다.
  • 모든 처리가 틱에서 한꺼번에 실행되지 않으며, 단계별 비차단 경로에서 분산 처리됩니다.
  • 청크 간 전역 실행 순서는 보장하지 않으며, 순서 보장은 청크 경계 내부에 한정됩니다.

실패 복구 시퀀스

  • 요청 취소 감지 시 하위 단계로 취소 의도가 전파됩니다.
  • 중간 단계 실패는 해당 작업만 중단하고 큐는 계속 진행됩니다.
  • 최신 목표가 존재하면 pendingTarget 기준으로 재수행됩니다.
  • 실패 처리의 기본 단위는 작업 단위이며, 전체 파이프라인 트랜잭션 롤백을 전제로 하지 않습니다.

동시성 위험 맵

  • Race on shared state → Atomic/CAS 전환으로 흡수
  • 중복 flush scheduling → 단일 드레이너 플래그로 차단
  • Stale task execution → version/target 검증으로 폐기

설계 트레이드오프

  • 장점: 락 경합 감소, 단계 분리, 취소/병합 제어 명확화
  • 비용: 상태 전이 추론 복잡도 증가, 디버깅 포인트 분산
  • 운영: 관측 지표와 로그 키 표준화가 필수

호환성 경계

Aerogel 내부 구현체 및 플러그인에서는 아무 스레드에서나 접근이 가능합니다. 런타임이 청크 경계와 상태 전이 규칙으로 동시 접근을 흡수합니다.

  • 스레드 접근은 자유롭지만, 장시간 블로킹 호출은 큐 지연을 유발할 수 있습니다.
  • 교차 청크 동기 대기 대신 비차단 위임 패턴 사용이 권장됩니다.
  • 단일 전역 락 기반 코드 경로는 병렬 처리 이점을 크게 낮출 수 있습니다.

FAQ

Aerogel의 실행 모델과 멀티스레드 동작에서 자주 나오는 질문을 정리했습니다.