Compatibility
- Recommended Java Java 25
- Distribution GraalVM
- Release Stage Early Development
Original Repository
MCAerogel/Aerogel
Next-Gen Runtime Track
Built to push Minecraft server architecture further with an independent core and aggressive iteration.
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.
현재 Aerogel은 초기 개발 단계로, 실제 운영 환경에 사용할 만큼 안정적이지 않습니다. 기여 및 테스트 목적으로 사용을 권장합니다.
Loading latest release notes...
Open Full Release NotesGet notified when a new Aerogel release is published.
After download, verify SHA-256 to ensure file integrity.
sha256sum Aerogel.jar
Get-FileHash .\Aerogel.jar -Algorithm SHA256
Use the command that matches your environment to launch Aerogel quickly.
java -Xms4G -Xmx4G -jar Aerogel.jar nogui
java -Xms4G -Xmx4G -jar .\Aerogel.jar nogui
Core contributor information from the original repository README.
Aerogel의 월드 처리 경로는 락 중심 구조 대신 Actor 경계, 원자적 FSM, 비차단 파이프라인을 조합해 고부하 구간에서도 처리량과 지연 안정성을 동시에 확보하도록 설계되어 있습니다.
시스템은 청크를 동시 접근 가능한 공유 객체로 보지 않고, 청크별 단일 실행 흐름(Actor)으로 캡슐화합니다. 모든 변경 연산은 해당 청크 큐를 통과해 순차 적용되며, 교차 청크 요청은 동기 대기 대신 비차단 enqueue로 위임됩니다. 이 구조는 락 계층 설계 없이도 상호 배제와 실행 순서를 동시에 보장합니다.
Actor: 상태를 내부에 캡슐화하고 메시지 처리로만 상태를 변경하는 실행 단위입니다.
Enqueue: 작업을 즉시 실행하지 않고 큐에 넣어 순차 처리하는 방식입니다.
교차 청크 요청: 현재 청크 밖의 다른 청크 작업을 직접 잠그지 않고 메시지로 위임하는 호출입니다.
청크 스트리밍은 AtomicBoolean/AtomicReference/AtomicInteger를 결합한 상태기계로 동작합니다. inFlight는 단일 활성 스트림을, pendingTarget은 최신 요청을, version은 유효 세대를 표현합니다. 따라서 이동 중 연속 요청에서도 오래된 작업은 자연스럽게 폐기되고 최신 목표만 진행되어, 락 없이 일관된 전이 규칙을 유지합니다.
AtomicBoolean / AtomicReference / AtomicInteger: 여러 스레드가 동시에 접근해도 값 갱신이 깨지지 않도록 보장하는 원자 타입입니다.
inFlight: 현재 실제로 실행 중인 단일 스트리밍 작업을 가리키는 슬롯입니다.
pendingTarget: 사용자의 가장 최신 이동 목표를 보관해 오래된 목표를 자연스럽게 버리게 하는 값입니다.
Version(세대): 오래된 작업을 판별해 폐기하기 위한 단조 증가 식별자입니다.
청크 생성(월드 계산)과 패킷 구성/전송(네트워크 직렬화)을 분리한 다단계 파이프라인을 사용합니다. 각 단계는 독립 워커 풀에서 병렬 처리되고, 단계 간 완료 조건은 원자 카운터로 결합됩니다. 결과적으로 특정 단계 지연이 전체 정지를 유발하지 않으며, 처리량과 응답성을 동시에 확보하는 비차단 처리 경로가 형성됩니다.
파이프라인: 처리 단계를 분리해 서로 다른 단계가 동시에 진행되도록 하는 구조입니다.
워커 풀: 미리 준비된 스레드 묶음이 작업을 나눠 처리하는 실행 자원입니다.
Backpressure: 느린 단계가 빠른 단계의 입력 속도를 조절해 과부하를 방지하는 제어입니다.
런타임 공유 상태는 ConcurrentHashMap, ConcurrentLinkedQueue, @Volatile 중심으로 구성됩니다. 읽기 경로는 가시성 보장을 우선하고, 쓰기 경로는 CAS 기반 단발 전환으로 경쟁을 흡수합니다. 특히 채널 flush는 단일 드레이너 플래그 패턴으로 중복 스케줄링을 제거해, 고빈도 이벤트 구간에서도 락 경합 없이 안정적인 지연 특성을 제공합니다.
ConcurrentHashMap: 여러 스레드가 동시에 읽고 써도 안전한 해시맵입니다.
ConcurrentLinkedQueue: 락 없이 다중 스레드가 추가/조회할 수 있는 큐입니다.
@Volatile: 한 스레드가 바꾼 값을 다른 스레드가 즉시 보도록 하는 가시성 키워드입니다.
CAS: 기대값과 현재값을 비교해 같을 때만 값을 교체하는 원자 연산입니다.
드레이너 플래그: 한 번에 하나의 flush 처리자만 동작하도록 보장하는 스위치입니다.
동일 청크에 대한 동시 빌드는 in-flight 레지스트리에서 단일 작업으로 합쳐지고, 여러 소비자가 결과를 공유합니다. 대기자가 사라진 작업은 취소 의도를 원자적으로 전파해 조기 중단되며, 워밍업 또한 단일 future로 통합됩니다. 이 메커니즘은 불필요한 CPU 소비와 초기 경합을 줄여, 멀티스레드 효율을 실사용 부하에 맞게 최적화합니다.
In-flight 레지스트리: 현재 진행 중인 작업을 키 단위로 합치는 공유 인덱스입니다.
Future: 아직 끝나지 않은 비동기 작업의 완료 결과를 나중에 받는 핸들입니다.
Request Coalescing: 같은 요청이 여러 번 들어오면 하나로 합쳐 중복 계산을 줄이는 기법입니다.
취소 전파: 소비자가 사라졌을 때 상위 단계로 중단 의도를 전달해 낭비를 줄이는 전략입니다.
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 | 지연 최적화 자체보다 "중복 작업 제거 + 취소 전파"의 일관성 보장을 우선합니다. |
Aerogel 내부 구현체 및 플러그인에서는 아무 스레드에서나 접근이 가능합니다. 런타임이 청크 경계와 상태 전이 규칙으로 동시 접근을 흡수합니다.
Aerogel의 실행 모델과 멀티스레드 동작에서 자주 나오는 질문을 정리했습니다.
왜 모든 처리를 틱에서 한 번에 실행하지 않나요?
Aerogel은 틱 경계 일괄 실행 대신 단계별 비차단 파이프라인으로 작업을 분산해, 특정 단계 지연이 전체 경로를 멈추지 않도록 설계되었습니다.
아무 스레드에서 접근 가능하다는 건 정확히 무슨 뜻인가요?
플러그인/내부 구현에서 호출 스레드 제약을 강하게 두지 않되, 런타임이 청크 경계/상태 전이 규칙으로 동시 접근 충돌을 흡수한다는 의미입니다.
그럼 스레드 안전성은 자동으로 해결되나요?
완전 자동은 아닙니다. 전역 공유 상태, 장시간 블로킹 호출, 전역 락 경로는 여전히 주의가 필요하며 비차단 위임 패턴을 권장합니다.
청크 간 작업 순서도 보장되나요?
아니요. 순서 보장은 기본적으로 청크 경계 내부에서만 제공되고, 청크 간에는 전역 순서를 강제하지 않습니다.
중간 실패가 나면 전체 작업이 롤백되나요?
기본적으로 작업 단위 실패 처리입니다. 실패한 작업만 중단/재시도하고 전체 파이프라인 트랜잭션 롤백을 전제로 하지 않습니다.
병렬 처리면 데이터가 무조건 깨지지 않나요?
아닙니다. Aerogel은 청크 경계별 직렬화, Atomic/CAS 상태 전이, in-flight 작업 병합으로 동시 접근을 제어해 병렬 처리와 데이터 일관성을 함께 유지합니다.
병렬 처리면 매번 결과가 랜덤해지지 않나요?
핵심 상태 전이는 원자 규칙과 청크 경계 순서로 제한되므로, 결과를 바꾸는 비결정 경로를 줄이도록 설계되어 있습니다.
동시성 구조면 항상 더 빠른가요?
항상은 아닙니다. 병렬화 이점은 작업 특성과 경합 상태에 따라 달라지며, 블로킹 호출이나 전역 락 경로가 있으면 이점이 크게 줄어듭니다.
병렬 처리 구조는 디버깅이 거의 불가능한가요?
난이도는 올라가지만 불가능하진 않습니다. Aerogel은 상태 키(inFlight, pendingTarget, version)와 단계 로그를 기준으로 추적할 수 있게 설계되어 있습니다.
청크는 무조건 전부 순차 처리해야 안전한 것 아닌가요?
아닙니다. 안전성의 핵심은 "전체 순차"가 아니라 "경계 내 순차"입니다. Aerogel은 청크 내부 변경은 순차로 보장하고, 청크 간 작업은 경계 규칙과 원자 전이로 병렬 실행해 일관성과 처리 효율을 함께 확보합니다.
Aerogel is not affiliated with Mojang Studios or Microsoft. Minecraft is a trademark of Mojang Studios.