Toro takes 150ms to boot up. It is thus possible to start microservices on demand or to reboot them if something happens.
A simple microservice within the kernel takes about 130kb on disk. In addition, Toro can work with less than 4Mb of physical memory. This results in more instances with fewer resources.
Toro leverages on VirtIO interface for networking and filesystems. This avoids the use of emulating devices thus speeding up IO.
Compiles once and deploy everywhere. Once the binary is generated, it can be used without any changes in any hypervisor thus reducing the maintenance time.
Toro is a simple kernel that provides a dedicated API to develop microservices. We propose two kinds of sockets to build microservices: blocking and non-blocking. Blocking sockets are good for intensive-IO microservices whereas non-blocking sockets are good for microservices that can serve a request without blocking. When a microservice executes in Toro, it runs alone in the system thus leveraging on the VM's resources.
Toro is a set of libraries that compile within the user application, i.e., the microservice. The user can choose which components should be included, .e.g, drivers, filesystems, etc. This results in a binary that can run on top of modern hypervisors like KVM, Xen or VirtualBox. Once the kernel has been initialized, the microservice starts to execute. The microservice and the kernel execute at the most privileged level and share the memory space, i.e., flat memory model. In this sense, Toro only supports threads and does not use paging.
Toro is able to run as a guest or baremetal. Currently, it has been successfully tested on Qemu-KVM, Xen, VirtualBox and HyperV. Recently, Toro has been tested on Firecraker and NEMU. These solutions propose an optimized Virtual Machine Monitor (VMM) that simplifies the device model among other features.
Toro is hosted in Github and includes several examples that can be used as a starting point for your projects. The repository includes the following examples:
The examples include instructions to build and execute them. You can find these instructions in the README.md located in each example. In Linux, to compile and deploy the examples, you need to install qemu-kvm and Lazarus. To install them, execute:
apt-get install lazarus
sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils virtinst
If you are in Windows, please follow the instructions here.
We are always looking forward for improvements and fixes. To report an issue, please follow this guideline. If you want to help in the development, you can pick up any of the issues from here. If you do not know what to pick, do not hesitate to ask! tickets labeled as help wanted may be a good start.