Architectural tenets

The architecture of Zato reflects several key foundational concepts underlying the design of the platform. Each component of the architecture takes each of the concepts into account.

Concept Meaning
A broad usage spectrum From IoT, through APIs, file transfer, enterprise backend systems and mainframe to AI & Machine Learning. Zato is meant to be used to build a wide range of integrated systems.
Productivity Developer time is of utmost importance. The design of the platform makes it easy to quickly build both simple and complex integration environments. Python is the most productive tool for integrations and this is why Zato is in Python.
Operational excellence Ease of use and monitoring capabilities allow one to constantly improve processes, plans and procedures. Results of your work should be easily reproducible in different contexts, environments or projects.
Scalability It should be easy to scale environments regardless of one’s preferred deployment approach, be it cloud based, on promises, hybrid, bare metal, Docker or Kubernetes. Any combination can be used.
High availability Integrations are the very core of any organisation or project and it is essential that the platform eliminate single points of failure, that it provide redundancy and that it offer convenient means to carry out upgrades or maintenance tasks.
Security An integration platform needs to expect that it will be routinely attacked by nefarious actors. The very choice of Python, a very high level, secure language and the platform’s resilience to attacks are an integral part of the design.
Simplicity over complexity The correct way to build advanced, mission-critical systems is to make them as simple as possible, but no simpler. Individual components and parts should be easy to understand and master.

The above tenets are what drives the design of Zato, this is what directly leads to what its architecture looks like.

Runtime architecture

../_images/arch-tech-overview.png
Clusters
  • Each Zato environment contains one or more clusters. A cluster is a logical collection of servers and supporting components.
  • Clusters can run on premises, in the cloud, directly under Linux as well as using Docker, Kubernetes or Vagrant
  • It is perfectly fine to have more clusters for particular purposes, e.g. one for REST and AMQP and another cluster for AI and ML
  • A special kind of a cluster is called a quickstart cluster. Such a cluster can be created within a few seconds, using a single command, to quickly have a working environment.
  • This is a great way to get started with Zato because it requires no additional work, the result is a fully functional environment running with all the components on a single host.
  • Quickstart clusters can be used for development, testing and production environments.
Servers
  • Servers are containers for services and applications, this is where one’s API and publish/subscribe topics run
  • In the spirit of cloud computing, to scale environments horizontally, more servers can be added to a cluster
  • To scale servers vertically, more CPUs can be assigned to each server
  • Servers run in an active-active setup - unless the load balancer is configured not to direct requests to a particular one
  • Servers can be added, removed and reconfigured on the fly
  • Servers synchronise their configuration automatically, e.g. deploying a new service on one server is auto-synchronised with all the other servers from the cluster
Load balancer
  • The high-availability load balancer can be the built-in one or an external one
  • Usage of a load balancer is optional. If it is not required, e.g. if there is one server in a cluster, or if running under Kubernetes, the load balancer does not need to be created
Dashboard
  • A web-based GUI for the management of servers running in clusters
CLI and API
  • Everything that can be done using the Dashboard is also available via CLI and API for DevOps automation

Best practices

Learn how to design environments with a specific goal in mind: