After a three months-cycle of development Monkey v1.5 with codename Emperor Tamarin is finally out!. This release is very exciting from different perspective: features, performance, Embedded Linux, community and legal.
Monkey have a strong focus on Embedded Linux, but it also have it on High-End production servers, for hence the development roadmap and non-technical areas to cover are have been growing in the last time, more hands are always welcome!
What is exciting on Monkey Project starting from now ?, very good things... in the Legal side, starting from now, Monkey HTTP Server and Duda I/O are under the terms of the Apache License v2.0. We strongly believe in Open Source and also be Open to closed environments is critical in the real world. Monkey components are business friendly, there is no need to be aware of License restrictions, and after a small debate and hours of thinking we concluded that Apache License v2.0 represents better how we will interact from now with future adopters, note that this is not just a HTTP server, is a complete Development Stack so there are many things to have in consideration.
On every technical thing, Documentation is a critical add-on of the code. Weeks ago we started a new Documentation Project to keep full information about every feature and setup available for all new Monkey releases, you can see the results on the available documentation for Monkey v1.5.
Kudos to the developers of GitBook project as they built the right tool that helps to focus just on one thing: write documentation. It uses Markdown format and is fully integrated with Github. Monkey documentation is build and rendered using GitBook.
As said, Embedded Linux is always one of our targets, if you hear about an HTTP Server or web services stack optimized for Embedded Linux.. it's Monkey.
Since a few months we provide stable packages of Monkey for Raspbian, no changes on this direction, we provide long term support and bug fixes for Monkey in Raspberry Pi devices.
Did you know that through Google Summer of Code 2014 program one of our students is developing a Dashboard based on Monkey/Duda for the Raspberry Pi ?. More news shortly :)
In order to provide a stable channel of Monkey stack for Yocto Project, we have started a new project called Monkey-Yocto, which aims to deliver official recipes for Yocto developers wanting to use Monkey as their HTTP stack.
The Yocto Project is an open source collaboration project that provides templates, tools and methods to help you create custom Linux-based systems for embedded products regardless of the hardware architecture. It was founded in 2010 as a collaboration among many hardware manufacturers, open-source operating systems vendors, and electronics companies to bring some order to the chaos of embedded Linux development.
Scheduler: Kernel Balancing
Starting from Linux Kernel 3.9, there is a new TCP/UDP socket option which allows to bind same port and address from multiples threads called SO_REUSEPORT. This is a recent Linux Kernel feature that can be used by servers wanting to improve performance reducing the bottleneck on the accept(2) system call.
Monkey v1.5 will detect the running Kernel and if the version is matched (>= 3.9), each working thread will create it own listener. So the Linux Kernel will perform connections balancing providing a better Scheduling on SMP systems that requires to scale.
If the detected Kernel is lower than 3.9, it will use the old Fair Balancing mechanism.
In order to improve performance when using SSL, the PolarSSL plugin now uses a session cache mechanism, reducing the number of required memory allocations for internal structures that may case some overhead when facing high loads.
Here is a list of other changes for the Monkey version in question:
- Virtual Host: built-in support for configurable HTTP redirection.
- Core: event handler fix when removing closed connection (FastCGI fix).
- Auth: rewrite of mk_passwd Python tool in C
- Core: new interfaces to tweak features based on Kernel version.
- SystemD: new init service file.
- Memory: memory allocator Jemalloc upgraded to v3.6
- Pooling: fix missing close events on socket (EPOLLRDHUP)
- Pooling: new HANGUP mode
- Cheetah!: add support for Kernel features being used
Thanks to everyone that was involved on this process!, more details on the official announcement page: