GitHub - real-logic/aeron: Efficient reliable UDP unicast, UDP multicast, and IP...
source link: https://github.com/real-logic/aeron
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Aeron
Efficient reliable UDP unicast, UDP multicast, and IPC message transport. Java and C++ clients are available in this repository, and a .NET client is available from a 3rd party. All three clients can exchange messages across machines, or on the same machine via IPC, very efficiently. Message streams can be recorded by the Archive module to persistent storage for later, or real-time, replay. Aeron Cluster provides support for fault-tolerant services as replicated state machines based on the Raft consensus algorithm.
Performance is the key focus. A design goal for Aeron is to be the highest throughput with the lowest and most predictable latency of any messaging system. Aeron integrates with Simple Binary Encoding (SBE) for the best possible message encoding and decoding performance. Many of the data structures used in the creation of Aeron have been factored out to the Agrona project.
For details of usage, protocol specification, FAQ, etc. please check out the Wiki.
For those who prefer to watch a video then try Aeron Messaging from StrangeLoop 2014. Things have advanced quite a bit with performance and features, but the basic design still applies.
For the latest version information and changes see the Change Log with Java downloads at Maven Central.
Commercial support, training, and development on Aeron is available from [email protected]. Premium features such as Solarflare ef_vi transport bindings for a further 20-60% reduction in latency depending on usage and configuration, and security with ATS (Aeron Transport Security) for encrypted communications is available to customers on commercial support.
How do I use Aeron?
How does Aeron work?
How do I hack on Aeron?
Build
Java Build
Build the project with Gradle using this build.gradle file.
You will require the Java 8+ to build Aeron:
- JDK 8 or later, Java versions before 1.8.0_65 are very buggy and can cause tests to fail.
Full clean and build of all modules
$ ./gradlew
C++ Build
You require the following to build the C++ API for Aeron:
- 3.6.1 or higher of CMake
- C++11 supported compiler for the supported platform
- C11 supported compiler for the supported platform
- Requirements to build HdrHistogram_c.
- JDK 8 or later to compile the SBE schema definitions used by the archive client.
Note: Aeron support is available for 64-bit Linux, OSX, and Windows.
For convenience, the cppbuild
script does a full clean, build, and test of all targets as a Release build.
$ ./cppbuild/cppbuild
For those comfortable with CMake - then a clean, build, and test looks like:
$ mkdir -p cppbuild/Debug $ cd cppbuild/Debug $ cmake ../.. $ cmake --build . --clean-first $ ctest
C Media Driver
By default, the C Media Driver is built as part of the C++ Build. However, it can be disabled via the CMake
option BUILD_AERON_DRIVER
being set to OFF
.
Note: C Media Driver is supported on Mac and Linux, the Windows version is experimental.
For dependencies and other information, see the README.
Documentation
If you have doxygen installed and want to build the Doxygen doc, there is a nice doc
target that can be used.
$ make doc
Packaging
If you would like a packaged version of the compiled API, there is the package
target that uses CPack. If the doc
has been built previous to the packaging, it will be included. Packages created are "TGZ;STGZ", but can be changed
by running cpack
directly.
$ make package
Running Samples
Start up a media driver which will create the data and conductor directories. On Linux, this will probably be in
/dev/shm/aeron
or /tmp/aeron
.
$ java -cp aeron-all/build/libs/aeron-all-${VERSION}.jar io.aeron.driver.MediaDriver
Alternatively, specify the data and conductor directories. The following example uses the shared memory 'directory' on Linux, but you could just as easily point to the regular filesystem.
$ java -cp aeron-all/build/libs/aeron-all-${VERSION}.jar -Daeron.dir=/dev/shm/aeron io.aeron.driver.MediaDriver
You can run the BasicSubscriber
from a command line. On Linux, this will be pointing to the /dev/shm
shared memory
directory, so be sure your MediaDriver
is doing the same!
$ java -cp aeron-all/build/libs/aeron-all-${VERSION}.jar io.aeron.samples.BasicSubscriber
You can run the BasicPublisher
from a command line. On Linux, this will be pointing to the /dev/shm
shared memory
directory, so be sure your MediaDriver
is doing the same!
$ java -cp aeron-all/build/libs/aeron-all-${VERSION}.jar io.aeron.samples.BasicPublisher
You can run the AeronStat
utility to read system counters from a command line
$ java -cp aeron-all/build/libs/aeron-all-${VERSION}.jar io.aeron.samples.AeronStat
For more samples and scripts to run them, see the aeron-samples directory.
Media Driver Packaging
The Media Driver is packaged by the default build into an application that can be found here
aeron-driver/build/distributions/aeron-driver-${VERSION}.zip
Troubleshooting
-
On linux, the subscriber sample throws an exception
java.lang.InternalError(a fault occurred in a recent unsafe memory access operation in compiled Java code)
This is actually an out of disk space issue.
To alleviate, check to make sure you have enough disk space.
In the samples, on Linux, this will probably be either at
/dev/shm/aeron
or/tmp/aeron
(depending on your settings).See this thread for a similar problem.
Note: if you are trying to run this inside a Linux Docker, be aware that, by default, Docker only allocates 64 MB to the shared memory space at
/dev/shm
. However, the samples will quickly outgrow this.You can work around this issue by using the
--shm-size
argument fordocker run
orshm_size
indocker-compose.yaml
.
License (See LICENSE file for full license)
Copyright 2014-2022 Real Logic Limited.
Licensed 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
https://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.
Recommend
-
26
One of my more recent projects has led me to become more involved in the Aeron project. If you are unaware of Aeron, then head over to the
-
10
Keepalived using unicast, track and notify scripts Keepalived works pretty well using multicast messages, unless the network infrastructure...
-
19
买了把有点贵的人体工学椅 – Herman Miller Aeron July 4, 2020 因为要长期在家做设计、写作,坐着工作的时间比较长,所以,就考虑购买一把人体工学椅。希望这把椅子,至...
-
6
Copy link Contributor CDirkx commented
-
5
Tweet Rollercoaster: An Efficient Group-Multicast Scheme for Mix Networks Daniel Hugenroth, Martin Kleppmann, and Alastair R. Beresford ...
-
5
Aeron 是什么? 2 Aeron...
-
4
Unicast Use of the Formerly Reserved 127/8 Workgroup: Internet Engineering Task Force Internet-Draft: draft-schoen-intarea-unicast-127-00 Updates: 1122,
-
5
The IPv4 Cleanup Project Fixing the odd nooks and crannies still mildly broken in IPv4, by: Making class-e (240/4), 0/8, 127/8, 224/4 more usable Adding 419 million new IPs to the world Fixing
-
11
Simple, reliable & efficient distributed task queue in Go Asynq is a Go library for queueing tasks and processing them asynchronously with workers. It's backed by Redis and is designed to be scalab...
-
5
Keepalived and unicast over multiple interfaces Vincent Bernat September 19, 2020 ...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK