Technical overview

Zato clusters

Each Zato environment is comprised of one or more Zato clusters that allow for the messages passing through to be handled in a secure and reliable way.

../_images/arch-tech-overview.png

A cluster has a high-availability load balancer in front of the message processing servers. External applications connect to the load balancer which distributes the load across one or more servers according to the configured algorithm, with round-robin being the default one.

The load balancer is smart enough to realize, in case of a failure, whether a server has gone down, and stops forwarding messages to it. Conversely, when a server comes up, the load balancer automatically recognizes it and starts dispatching requests. There is no limit to the number of servers in a cluster and administrators have the ability to take servers offline or online without disrupting message processing.

Zato’s HA load balancer is implemented on top of HAProxy. (read more)

A Zato server is the entity that does the job of exposing services to external applications and does the processing of incoming requests. Servers are also capable of invoking other external applications through various protocols and formats.

Zato servers always contain identical copies of services, they’re always symmetrical and run the same code under a common configuration. (read more)

Exactly one of the servers in a given cluster has also a highly-customizable built-in scheduler which can be configured to fire background jobs.

Web admin is a slick AJAX web-based administration console used for the management of clusters. Each cluster has one web admin console although a single console may be reused for managing multiple clusters. Web admin is implemented in Django with a pinch of of jQuery added in for frontend features. (read more)

ODB (Operational database) is an SQL database used for storing static configuration common to all members of the cluster. ODB may be installed on Oracle, PostgreSQL, MySQL or SQLite.

(read more)

Redis is used to store the more dynamic configuration and to provide quick access to Zato statistics. (read more)

Implementation overview

Zato is mostly implemented in Python. Many of its core dependencies are implemented in Python, C and in Cython. In particular, all the heavy processing of XML and JSON documents is always performed by libraries written in C.

Zato servers are running on top of Gunicorn, in the asynchronous gevent mode by default. This allows Zato to easily handle thousands of incoming connections. Processing hundreds or thousands messages a second is easily within Zato’s reach.

Programmers use Python to develop services. Python is a very high-level and powerful programming language, famously known for its ease of use and readability, both of which greatly reduce the Zato services’ maintenance costs.