blob: 5003667bcebb82b2858e5d3c57f0fa00516f62bd [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Architecture
-->
<html lang="en">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
<meta content="ActiveMQ's next generation of messaging" name="description"/>
<meta content="messaging,stomp,jms,activemq,apollo" name="keywords"/>
<meta content="Apollo" name="author"/>
<script src="../scripts/jquery.js"></script>
<link type="text/css" rel="stylesheet" href="../styles/impact/css/pygmentize.css"/>
<link type="text/css" rel="stylesheet" href="../styles/impact/css/site.css"/>
<title></title>
</head>
<body>
<div id="navigation">
<div class="wrapper">
<ul>
<li><a href="../index.html">Apollo 1.7.1</a></li>
<li><a href="../community/developers.html">Developers</a></li>
<li><a href="../community/index.html">Community</a></li>
<li><a href="../download.html">Download</a></li>
</ul> <div></div>
</div>
</div>
<div id="content">
<div class="wrapper">
<h1 id = "Performance_and_Scaling">Performance and Scaling</h1>
<h2 id = "Performance">Performance</h2>
<p>Apollo's performance is awesome considering it is using Stomp, a text
based protocol. See <a href="http://hiramchirino.com/stomp-benchmark/ec2-c1.xlarge/index.html">the STOMP benchmark report</a>
for detailed results.</p>
<h2 id = "Scaling_Characteristics">Scaling Characteristics</h2>
<p>There are many different extreme ways that a messaging system can be used.
Some folks like to:</p>
<ul>
<li>connect a large number of clients.</li>
<li>hold a large number of messages in their queues.</li>
</ul>
<!-- * move around large messages. -->
<p>Apollo aims to support all those usage scenarios.</p>
<h3 id = "Scaling_the_Number_of_Connected_Clients">Scaling the Number of Connected Clients</h3>
<p>Apollo uses non blocking IO and a reactor thread model. This means that a
running broker uses a constant number of threads no matter how many
clients are connected to it.</p>
<h3 id = "Scaling_the_Number_of_Queued_Messages">Scaling the Number of Queued Messages</h3>
<p>Queues will swap messages out of memory when there are no consumers that
are likely to need the message soon. Once a message is swapped, the queue
will replace the message with a reference pointer. When the queue builds
a large number (more than 10,000) of these swapped out reference
pointers, they then get consolidated into a single &ldquo;range entry&rdquo; and the
pointers are dropped.</p>
<p>When a consumer comes along that needs some of the swapped out messages,
it will convert previously consolidated &ldquo;range entries&rdquo; to a set of
reference pointers. The next reference pointers that the consumer is
interested in get swapped back as regular messages. This allows Apollo's
queues to hold millions of messages without much impact on JVM memory
usage.</p>
<!-- This is still being cooked
### Scaling the Message Size
Big messages don't even make it into the JVM's memory management. The
contents of big messages received and sent using buffers allocated in a
memory mapped file. This allows the OS to efficiently manage swapping
those large messages to disk and it avoids churning the eden garbage
collection generation in the JVM. If 1 producer is sending 100 MB
messages to a consumer the JVM will not report any significant memory
usage.
-->
<div></div>
</div>
</div>
</body>
</html>