CloudI 2.0.1
LICENSE
ABOUT
What is CloudI?
(short answer) "A distributed application server that provides efficient
messaging for many programming languages within a single service abstraction
that is both scalable and fault-tolerant."
(shorter answer) "A rock-solid transaction processing system for flexible
software development."
(shortest answer) "A Cloud at the lowest level."
Who would use CloudI?
Software developers that do not want to get locked into corporate vendors
or frameworks that push for perpetual commercial support or licenses.
Why should CloudI be used?
CloudI makes software fault-tolerant and scalable, utilizing Erlang,
even if the software is legacy source code.  CloudI mitigates
software development risk (delays or failures) when making
software scale in non-Erlang programming languages, or during a conversion
of a software system (fully or partially) to the Erlang programming language.
How should CloudI be used?
The CloudI API provides a simple set of functions for
Service-Oriented Architecture (SOA) development in any supported language
(currently C/C++, Go, Haskell, Java, JavaScript, OCaml, Perl, PHP, Python,
Ruby, and Erlang/Elixir):
subscribe,unsubscribe,subscribe_countsend_async,send_sync,mcast_async(mcast_async== publish)recv_asyncreturn,forward
External communication that needs to scale (beyond 10,000 connections)
can use an existing internal CloudI service (implemented in Erlang or Elixir)
which may do processing for one or more external CloudI services
(implemented in C/C++, Go, Haskell, Java, JavaScript, OCaml, Perl, PHP, Python,
and/or Ruby)
Even if external communication doesn't need to scale, private cloud
computing tasks (number crunching) can gain fault-tolerance and internal
system scalability within CloudI.
Where should I find more information?
Please see the FAQ for more details.
INSTALLATION
Requirements
Erlang >= 21.0 (erlang /Ubuntu)C++ (g++ /Ubuntu)boost >= 1.36.0 (libboost-system-dev libboost-thread-dev libboost-dev /Ubuntu)
Optional (default="yes"):
Java >= 1.5 JDK(default-jdk /Ubuntu)- Use the "--enable-java-support=no" configure flag to disable
 
JavaScript >= 0.12.18(nodejs /Ubuntu)- Use the "--enable-javascript-support=no" configure flag to disable
 
Perl >= 5.10 (with Compress::Zlib)(perl perl-modules /Ubuntu)- Use the "--enable-perl-support=no" configure flag to disable
 
PHP >= 7.0(php /Ubuntu)- Use the "--enable-php-support=no" configure flag to disable
 
Python >= 2.7.0(python3 python3-dev /Ubuntu)- Use the "--enable-python-support=no" and "--enable-python-c-support=no" configure flag to disable
 
Ruby >= 1.9.0(ruby /Ubuntu)- Use the "--enable-ruby-support=no" configure flag to disable
 
GNU MP library(libgmp-dev /Ubuntu)- Used in the hexpi (C++) integration test only
("--with-integration-tests=no" configure flag to disable) 
Optional (default="no"):
ATS2/Postiats(ats2-lang /Ubuntu)- Use the "--enable-ats2-support" configure flag to enable
 
Go >= 1.11(golang /Ubuntu)- Use the "--enable-go-support" configure flag to enable
 
Haskell (GHC >= 7.10.3 and cabal-install >= 1.22)(ghc cabal-install zlib1g-dev /Ubuntu)- Use the "--enable-haskell-support" configure flag to enable
 
OCaml >= 4.03.0(ocaml /Ubuntu)- Use the "--enable-ocaml-support" configure flag to enable
 
Building
For configuration options, see FAQ: 3.2 - Installation Options.
cd src
./configure
make
sudo make install
Running
Within the installation directory the cloudi script controls CloudI.
To start CloudI:
sudo cloudi start
To stop CloudI:
sudo cloudi stop
INTEGRATION
See the Quick Start Guide or the API documentation
Integration points:
- CloudI API (See 
src/api/README.markdown) - HTTP with 
cloudi_service_http_cowboyandcloudi_service_http_elli - OAuth v1 with 
cloudi_service_oauth1 - TCP with 
cloudi_service_tcp - UDP with 
cloudi_service_udp - SQL Databases
- MySQL with 
cloudi_service_db_mysql - PostgreSQL with 
cloudi_service_db_pgsql 
 - MySQL with 
 - shell with 
cloudi_service_shell 
Dynamic Configuration and Monitoring:
- CloudI Service API (See 
src/service_api/README.markdown) - Batch CloudI Service Execution with 
cloudi_service_api_batch - Monitoring to Graphite, OpenTSDB, SNMP, InfluxDB or StatsD with 
cloudi_service_monitoring 
Routing:
- Caching Static File Data with 
cloudi_service_filesystem - HTTP Client Requests with 
cloudi_service_http_client - HTTP REST Handlers with 
cloudi_service_http_rest - Fault-Tolerant Map-Reduce with 
cloudi_service_map_reduce(See thehexpiintegration test controller) - Durable Service Requests with 
cloudi_service_queue - Service Redundancy with 
cloudi_service_quorum - Service Request Redundancy with 
cloudi_service_funnel - Schedule Service Requests with 
cloudi_service_cron - Local/Remote(SSH) Request Routing with 
cloudi_service_router - Validation with 
cloudi_service_validate 
Maintained Services Excluded from this Repository:
- HtmlUnit with 
cloudi_service_htmlunit 
Unmaintained Services Excluded from this Repository:
- elasticsearch with 
cloudi_service_db_elasticsearch - Cassandra with 
cloudi_service_db_cassandraorcloudi_service_db_cassandra_cql - CouchDB with 
cloudi_service_db_couchdb - memcached with 
cloudi_service_db_memcached - Riak with 
cloudi_service_db_riak - TokyoTyrant with 
cloudi_service_db_tokyotyrant - ZeroMQ with 
cloudi_service_zeromq 
The default CloudI configuration can run the included integration tests
if all the supported programming languages are enabled at configure time
(they are by default) and the --with-integration-tests-ran configuration
argument is used (to choose the src/cloudi_tests.conf.in file).
If the --with-integration-tests-ran configuration argument is not used,
the more minimal CloudI configuration will be used instead
(in the src/cloudi_minimal.conf.in file) to support basic things like the
Quick Start Guide,
the Dashboard
and any tutorials or examples.
CONTACT
Michael Truog (mjtruog at protonmail dot com)

