JCyclone is a Staged Event-Driven Architecture (SEDA) based implementation made
- Stages as Robust Building Block -
A JCyclone application consists of a network of stages connected by event queues.
A stage is a self-contained application component. It's the basic building
block of JCyclone applications. A stage is composed mainly of an incoming event
queue, a thread pool and a programmer supplied event handler.
Event handlers provide core application logic. They communicate by enqueuing
events onto another stages by obtaining a handle to that stage's event queue.
Queues are natural control boundaries; they provide modularity, isolation and
independent load management.
- Dynamic Resource Control -
The stage's scheduling and resource monitoring is
managed by JCyclone resource controllers. A resource controller
observes runtime characteristics of a stage and adjusts allocation and
scheduling parameters to meet performance targets. This shield the
programmer from the complexity of performance tuning and keep each stage
withing its operating regime.
JCyclone implements two kind of controllers: batching controller and thread
pool controller. The former adjusts the number of threads executing withing
the stage and the later adjusts the number of events processed by each iteration
of the event handler. Processing many events at once increases throughput but
can decrease response time, so controllers tries to trade of these effects.
"An important aspect of dynamic control in SEDA is that it allows the application
to adapt to changing conditions despite the particular algorithms used by the
underlying operating system. In some sense, SEDA's controllers are naive about
the resource management policies of the OS."
- Matt Welsh
- Adaptive Overload Management -
JCyclone uses feedback-driven admission control that actively observes
and adapts the system' behavior under load. Each stage in a JCyclone application
has an associated admission controller that guards access to the event queue
of that stage. This controller operate primarily by adapting the rate at which
each stage in the system accepts events, signaling overload to upstream stages
through queue rejections.
Overload control make it relatively straightforward to ensure that a JCyclone
application will behave well under excessive demand.
- Summary -
JCyclone is an application framework that offers very high performance by
supporting massive concurrency and providing robust behavior under heavy load.
It hides the concurrency concerns from the programmer and provide a clear logical
division of work within the application that encourage modular development practices.
In short, JCyclone achieves robustness, modularity, concurrency and scalability.