CloudI 1.7.1

CloudI is an open-source private cloud computing framework for efficient, secure, and internal data processing. CloudI provides scaling for previously unscalable source code with efficient fault-tolerant execution of C/C++, Erlang/Elixir, Go, Haskell, Java, JavaScript/node.js, OCaml, Perl, PHP, Python and Ruby services. The bare essentials for efficient fault-tolerant processing on a cloud!

Tags erlang elixir c++ c golang haskell java javascript ocaml perl php python ruby unix cross-platform distributed-computing
License MITL
State stable

Recent Releases

1.7.108 Jun 2017 04:08 minor bugfix: * All CloudI source code is under a MIT license instead of a BSD-style license to make reuse simpler and to be GPL-compatible * The chroot external service configuration option was added ( * The order external service configuration options are applied changed from owner, limit, nice, directory to chroot, limit, nice, owner, directory which means that the user/group responsible for running CloudI influences the permissions for chroot, limit, nice (and cgroup). This order will not need to change in the future. * Erlang/OTP 20.0 compilation/runtime works * backwards compatibility difference: * cpg (CloudI Process Groups) source code was changed to minimize distributed Erlang communication (and local messaging) without attempting to remain compatible with cpg versions before 1.7.1 (i.e., prevent CloudI 1.7.1 nodes from communicating with older nodes by using different cookie settings or other means). * Using the CloudI API functions send_sync or recv_async during the service's initialization previously returned an error, but will now cause the service to crash, to pursue fail-fast operation and to keep the effect the same for both internal and external services.
1.7.029 Mar 2017 23:10 minor feature: * backwards compatibility difference: * The C CloudI API (not the C++ CloudI API) had a small change to facilitate the use of thread local data with the callback function arguments order changing to match the other programming languages that lack (or avoid) state objects (C, Erlang, Go, Haskell, OCaml) * The Go CloudI API was added (requires the configure argument --enable-go-support and Go (gc) = 1.6) * The Haskell CloudI API was added (requires the configure argument --enable-haskell-support and GHC = 7.10.3, cabal-install = 1.22) * The OCaml CloudI API was added (requires the configure argument --enable-ocaml-support and OCaml = 4.03.0) * The CloudI Service API function logging_stdout_set was added to allow all CloudI logging to be sent to stdout * The count integration test was added to show how thread local state works in all supported programming languages ( (see for more details)
1.6.012 Jan 2017 00:49 minor bugfix: * backwards compatibility difference: * Functions deprecated in the 1.3.3 CloudI release have been removed * Usage of the 'immediate' atom for the timeout value with the cloudi_service Erlang module and the cloudi Erlang module is deprecated, use the 'limit_min' atom instead for the same value * The minimum allowable values for service configuration (both adding a new service and updating an existing service) of timeout_async and timeout_sync has changed from 101 milliseconds to 499 milliseconds to be consistent with the value that 'limit_min' represents * The service configuration options request_timeout_immediate_max and response_timeout_immediate_max had their meaning change to rely on a greater than or equal to comparison instead of a greater than comparison, though the same default behavior is preserved with this change ( * Now cloudi_core doesn't use any port drivers or NIFs except what is provided within Erlang/OTP, and process dictionary use is minimal * The Elixir module CloudILogger is now included in the cloudi_core Erlang application to simplify usage of CloudI in Elixir source code * Bugs related to CloudI logging syslog integration have been fixed and more options for syslog use have been added ( has more information) * The restart_delay service configuration option was added ( * CloudI service restarts have been made synchronous to ensure all termination has completed before initialization of new processes begins (to improve reliable management of global state during a restart) (see for more details)
1.5.408 Oct 2016 01:51 major bugfix: * An important bugfix was added for internal services that use both CloudI service requests and info messages at high request rates with the duo_mode service configuration option set to true (service state returned from the info message handling wasn't always saved previously under these conditions) * Request rate testing was done both with and without the persistence of service request data (using cloudi_service_queue in destination mode) as described at * The 'nice' and 'cgroup' service configuration options were added for external services * The logging_set CloudI Service API function was added to allow multiple logging modifications to occur dynamically (similar to nodes_set for CloudI nodes configuration) * Bugs were fixed and other improvements were added (see the ChangeLog for more detail)
1.5.316 Sep 2016 02:02 major feature: * services_update is a new addition to the CloudI Service API for updating any service without downtime, i.e., module hot-code reloading with internal services and OS process restarts with external services while CloudI ensures service requests are not lost and service request handlers are not interrupted in any of the service processes or threads (see for more information) * A Java user tutorial has been added based on the work of Bruce Kissinger ( * The Java CloudI API can now use method references with Java 8 * New service configuration options were added or improved: 'directory', 'dispatcher_pid_options', 'init_pid_options', 'request_pid_options', 'info_pid_options' ( has more information) * Many of the database services were removed with their dependencies, from the main repository due to service development demonstrating that failures remain isolated when using a database client locally within a service (database services can help scale usage and make sure it is fault-tolerant, but only after the service business logic is in a stable state and excluding these services will help guide developers) * cloudi_service_monitoring was improved: * Any Erlang process can create or update metrics now * cloudi.log output can be monitored with aspects_log_before or aspects_log_after * All CloudI service related metrics now have a static metric name, identified with TYPE.FILENAME.INDEX instead of the service ID as described in the ChangeLog file * Erlang internal services now have two optional behaviour functions (some services choose to use only one of the functions): * cloudi_service_handle_request/11 * cloudi_service_handle_info/3 * Bugs were fixed and other improvements were added (see the ChangeLog for more detail)
1.5.125 Dec 2015 00:14 minor bugfix: * cloudi_service_monitoring is a new CloudI service that provides metrics based on the Erlang VM and all the running CloudI services with exometer and folsom * cloudi_service_http_rest is a new CloudI service to simplify the creation of HTTP REST API handlers * CloudI service efficiency was improved by switching to maps with 18.x * CloudI now utilizes the new time warp functionality while retaining globally unique transaction ids * The CloudI logging output now has an entry for the function/arity info which is captured in Elixir and can be provided in Erlang (until EEP45) * Javascript CloudI API now works properly with node.js version 0.12.1 * Loadtests were ran ( * Bugs were fixed and other improvements were added (see the ChangeLog for more detail)
1.5.013 Apr 2015 07:40 minor bugfix: * backwards compatibility difference: * cloudi module (Erlang/Elixir-only usage) now returns a 2 element tuple with the 1st element as the result (original return value) and the 2nd element as the modified Context data (or the Dispatcher pid if a Dispatcher pid was provided instead of a Context) * Was a necessary change to keep the transaction id time as strictly monotonically increasing with the changes in Erlang 18.x that deprecate erlang:now/0 * Allows a lazy destination refresh to update the service name lookup data so the developer doesn't need to handle the update manually * The change impacted the return value of internal service external interface functions * The service application was changed to depend only on the cloudi_service module instead of the cloudi module to make its usage clearer and avoid Dispatcher pid value handling * Despite the return value changes, only the minor version number of CloudI was incremented due to the interfaces being outside the main documentation * External services can now set OS process resource limits with the 'limit' service configuration option ( * A few new CloudI data structures: cloudi_queue, cloudi_future, cloudi_service_future (cloudi_queue can handle service request validation, failures, and retries with in-memory internal service data) (cloudi_future and cloudi_service_future provide Futures for Erlang processes (sending to CloudI services) and internal CloudI services, respectively) * cloudi_service_validate is a new CloudI service for validating service requests with the requests using the service as a proxy (similar functionality was added to cloudi_service_quorum and cloudi_service_router, though cloudi_service_router is forwarding the service request instead of sending it) *
1.4.020 Jan 2015 22:14 cleanup: December 20, 2014 Version 1.4.0 released. * JavaScript/node.js, PHP and Perl are now supported programming languages with their own CloudI API implementations * A Quick Start now has intros for all supported programming languages ( * Loadtests were ran ( * Various bugs were fixed (see the ChangeLog for more detail)
1.3.301 Oct 2014 19:31 major feature: September 30, 2014 Version 1.3.3 (beta) released. * backwards compatibility difference: * Some minor functions were deprecated in the cloudi_service module and the source code was moved to separate modules (cloudi_environment, cloudi_service_name, cloudi_request, cloudi_request_info, cloudi_key_value) * The CloudI Service API had some functions renamed with the older name deprecated (loglevel_set became logging_level_set and log_redirect became logging_redirect_set) * In version 1.4.0 of CloudI the cloudi_service behaviour will have a Timeout parameter in both the cloudi_service_init callback and the cloudi_service_terminate callback (if you want to start using it now, make sure cloudi_core is compiled with the CLOUDI_SERVICE_NEW define, a CLOUDI_SERVICE_OLD macro will exist in version 1.4.0 to avoid the change so older services can run without modification) * cloudi_service_api_requests now provides simpler URL paths for the CloudI Service API (while continuing to support the older URL paths) ( * Python 3 usage requires that the request_info, request, response_info, and response data be bytes * Elixir is now supported officially and has an example at * Python 3 is now supported by the Python CloudI API (both the cloudi module and the cloudi_c module) * queue_size is a service configuration option added so any service may limit their incoming service request queue by an amount of memory (in kB) (queue_limit provides a count limit and both can be used together) * Support for Aspects (from AOP, Aspect-Oriented Programming) were added as service configuration options (aspects_init_after, aspects_request_before, aspects_request_after, aspects_info_before, aspects_inf
1.3.227 Jul 2014 08:19 major feature: May 31, 2014 Version 1.3.2 (beta) released. * Fixes for Erlang/OTP 17.0 compilation * Improved node auto-discovery functionality and configuration * Add cloudi_service_api:nodes_set/2 for dynamically configuring CloudI nodes configuration * EC2 node discovery now works as expected, selecting based on tags and/or security groups * Allow node connections to be hidden for more complex network topologies (see * Add cloudi_service_queue for persistent queuing of service requests with CT tests * Add cloudi_service_filesystem file update notification service requests (see notify_one and notify_all configuration) * The cloudi_service_http_cowboy service has many different additions: * Added websocket_protocol for creating a mapping between a protocol id and the TransId of websocket service requests to avoid contention * Added websocket_subscriptions for adding additional websocket connection subscriptions for receiving service requests, conditional on the connection URL (to simplify messaging to groups of websockets) * websocket_connect and websocket_disconnect can be set to be either async or sync service requests * use_websockets == exclusively for only using websockets * Add service name pattern support to cloudi_service_router (to map from a service name pattern to a new service name destination) * The cloudi_service_db_pgsql now provides either the or driver along with a separate configuration option for providing common output * Log output now reflects the default (tuple) service configuration format * Various bugfixes, small additions, and documentation improvements