Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
45 additions
and
42 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
In the era of IoT, data is the lifeblood of digital transformation. A high-performance messaging bus is essential for data convergence, bridging, and re-distribution on the edge. However, it is difficult to implement such a messaging bus for edge computing due to the fragmented ecosystem and highly constrained resources of embedded hardware. | ||
|
||
To tackle such problems, we present NanoMQ as a lightweight edge messaging bus, which unifies data in motion and data at rest. With its elegant and powerful design, users could achieve a high level of time and space efficiency while enjoying portability and scalability when accessing the data on edge. | ||
|
||
NanoMQ's design principles: | ||
|
||
Rely on Kernel, not on Human/User. We are at OS kernel’s mercy. | ||
|
||
What you saw is what you do. Never take the overwhelming burden that overpowers NanoMQ. | ||
|
||
Adaptive to wherever we inhabited. | ||
|
||
Do not let it fail! Don’t accomplish everything at once! | ||
|
||
Interoperability is the core value and common ground. | ||
|
||
Everything is message and event | ||
|
||
Avoid write/read IO amplify |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,35 +1,33 @@ | ||
# Features | ||
# Features & Advantages | ||
|
||
## Cost-effective on the embedded platform | ||
|
||
NanoMQ is intended to be cost-effectively on an embedded platform, To achieve a highly performant throughput with minimum resource requirement. For now, NanoMQ can support 800k msg/s with only 200Mb memory usage on a mobile platform. | ||
## Efficiency | ||
|
||
NanoMQ is intended to be cost-effectively on an embedded platform, To achieve a highly performant throughput with minimum resource requirement and reach a performance-resources equilibrium on any embedded platform. NanoMQ is capable of utilizing the computing power of different hardware in the best effort via its rich tunning options. Hence it provides high throughput on resource-constrained devices. | ||
|
||
## Scalability | ||
|
||
## Fully base on native POSIX. High Compatibility | ||
NanoMQ is on multi-threading steroids. Based on the optimized NNG's asynchronous I/O framework towards Linux & MQTT, NanoMQ can scale out easily to engage multiple cores with less CPU usage in the modern SMP system. | ||
|
||
POSIX-based operating systems are by far the most popular and widely deployed. To maximize NanoMQ's compatibility, minimize its dependence on APIs—especially proprietary APIs so that we can avoid any vendor locked in. Hence it is easier and cheaper for the community to make the desired changes and embed NanoMQ into various applications if we had written NanoMQ using the POSIX APIs from the beginning. | ||
|
||
|
||
## Compatibility | ||
|
||
## Pure C/C++ implementation. High portability | ||
POSIX-based operating systems are by far the most popular and widely deployed, and it is the only prerequisite of NanoMQ. Users can use NanoMQ on any POSIX compatible system to avoid any OS locked-in problem. | ||
To maximize NanoMQ's compatibility, minimize its dependence on APIs—especially proprietary APIs so that we can avoid any vendor locked in. Hence it is easier and cheaper for the community to make the desired changes and embed NanoMQ into various applications if we had written NanoMQ using the POSIX APIs from the beginning. | ||
|
||
A significant goal of NanoMQ is to be highly portable, which means it only requires a little amount of work to compile and install it on other architecture. To work on many different kinds of edge computing platforms, we inherent NNG's platform portability layer and going to support other Linux-based systems like OpenWRT & Yocto in the future. With minimum dependency and pure C/C++ implementation, NanoMQ is easy to port to different platforms. | ||
## Portability | ||
|
||
A significant goal of NanoMQ is to be highly portable so that we minimized its dependency. NanoMQ's core features are implemented purely with C and without any third-party library. That means it only requires a tiny amount of work for porting. | ||
NanoMQ inherent NNG's platform portability layer and going to support other Linux-based systems like OpenWRT & Yocto in the future. With minimum dependency and pure C implementation, NanoMQ is easy to port to different platforms. | ||
|
||
## Performant | ||
|
||
## Fully asynchronous I/O & multi-threading | ||
From data-center to the mobile, from mobile to edge, the hardware evolves. More CPUs that were only used on data-center and the mobile platform now shines on edge. We believe multi-cores infrastructure is the future of edge computing platforms. | ||
|
||
From data-center to the mobile, from mobile to edge, the hardware evolves. More CPUs that were only used on data-center and the mobile platform now shines on edge. We believe multi-cores infrastructure is the future of edge computing platforms. Hence, NanoMQ's asynchronous I/O and multi-threading feature can help users to implement a powerful edge application on such a platform. | ||
With a built-in Actor framwork, NanoMQ can scales out to engage multiple cores. With system performance tunning towards Linux & MQTT, we manage to split workload averagely to every core. Hence NanoMQ can handle up to 1 million messages per second with less CPU usage in the modern SMP system. | ||
|
||
NanoMQ is born for the edge and delivers exceptionally high throughput and low latency with a built-in actor model. Such performance enables more possibilities for data convergence in an edge-centric paradigm. | ||
|
||
|
||
## Good support for SMP | ||
|
||
NanoMQ base on NNG's asynchronous I/O framework, so it can scales out to engage multiple cores. With system performance tunning towards Linux & MQTT, we manage to split workload averagely to every core. Hence NanoMQ can handle up to 1 million messages per second with less CPU usage in the modern SMP system. | ||
|
||
|
||
|
||
## Low latency. High handling capacity | ||
|
||
Under the circumstance of 500K/s messages throughput, the 90% Avg response time is only 0.2 ms with only 200 MB memory consumption. And all pub/sub-requests are succeeded. | ||
## All-round | ||
To tackle the fragmented protocol status quo of edge computing. NanoMQ provides an all-around messaging bus for mainstream protocols such as MQTT, nanomsg, WebSocket. ZMQ and DDS are also on our roadmap. Additionally, NanoMQ also provides a benchmarking and MQTT testing toolkit inside the package. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters