Architecture of Carbonio

Fig. 1 shows the internal architecture of Carbonio with all its components.

_images/architecture_Carbonio.png

Fig. 1 Simplified architecture of Carbonio.

While in Single-Server all packages are installed on the same node, in a typical Multi-Server each of the services depicted by the red boxes (i.e., the Core Components) should be installed on a dedicated node, while all the other (i.e., the Optional Components in the blue boxes) can be combined and installed on any node, even on a dedicated one. For example, if Carbonio VideoServer is heavily used, it could be a good idea to install it on a dedicated node, while User Management can be installed on the AppServer node instead of on a dedicated node. In the Multi-Server Installation scenario we use as example, we show how to set up a cluster of six nodes and combine the various Carbonio’s roles. A Role is a functionality that is considered atomic and can be added to the Carbonio by installing one or more software packages.

In Fig. 1, dependencies are denoted by the boxes piled on top of the bottom one. In other words, all the *-UI packages, which contain the files necessary to show the Module to the users, must be installed on the Proxy Node.

Hint

-UI packages provide the front-end files to access the service from a browser or mobile app.

A special case is represented by the Postgres/DB-Connection role. While Carbonio can be installed to communicate directly with a Postgres database, it is suggested to install a middleware (PgPool-II) in order to be independent of the underlying database(s) and be able to scale without the need to configure multiple Postgres instances or even a Postgres cluster.

Core Components

The Core Components are required because they provide the basic functionalities of Carbonio: to allow users to securely send and receive e-mails and to manage their calendars and contacts. They are:

Directory Server

It is used to manage the configuration of the infrastructure and provisioning of users and domains.

Proxy

The Proxy is indeed a reverse proxy that acts as the central access point to the Email accounts. It also prevents a public, direct access to the AppServers and other backend services. This node is the only one on which the -UI packages can be installed.

MTA

The MTA is the engine room of Carbonio. Its duties include email transfer and forwarding, filtering, and other services to keep email clean and secure.

AppServer

The Application Server provides the application login to manage the accounts data, e.g., emails, contacts, and calendar appointments. In small environments there can be one or two AppServer nodes, but more can be added to a large or growing infrastructure.

Carbonio Mesh

Carbonio Mesh manages security and provides fault-tolerant routing between nodes of a Multi-Server installation. To operate properly, there must be at least one Carbonio Mesh Server, which ideally should be installed on the Directory-Server Node, while all other nodes must install the Carbonio Mesh Agent.

Carbonio Monitoring

Carbonio Monitoring is the replacement of the previous Logger Role. Compared to the standard syslog monitoring system, Carbonio Monitoring is a fully centralised log facility that stores log messages in to a database, allowing therefore an administrator to keep a full history of the events on the system and making the search for past event easier.

Note also that the Proxy and MTA nodes must satisfy the following requirements to work properly:

  • their hostname must be resolved from both internal and external clients

  • they have valid FQDN and PTR, MX, and A records configured in the DNS server

  • they are reachable from the Internet

Optional Components

With optional components we denote all those Carbonio roles that add functionalities to the core components and are denoted by orange boxes in Fig. 1. In a Multi-Server installation they can be installed on any node, provided the dependencies are respected.

  • Chat. Provides the chat and video call functionalities. It includes Chat-UI and the AppServer Advanced, the latter provided by the carbonio-advanced package.

  • Files. Allows users to store and share documents. This role also includes Files-ui and Files-db, that provide user interface files for Files and script to initialise the Carbonio Files database and connections to it, respectively.

  • Preview. A role to create thumbnailed images of documents to preview them

  • Docs. Consists of docs-connection, docs-editor, and docs-core; it provides the collaborative editing functionalities.

    Note

    In Multi-Server installation, there can be only one instance of Docs.

  • DB-connection. Provided by packages carbonio-files-db and carbonio-mailbox-db, this role has the responsibility to allow communication between Carbonio and the database. The use of Pgpool-II would improve flexibility and scalability in the management of the DB instance(s).

  • User Management. It registers the user status (logged in or logged out) and user attributes (e.g., on which AppServer a user is logged in).

  • VideoServer. It provides video communication capabilities and is a necessary component for the proper use of video conferencing service.

  • VideoServer Recording. This modules adds recording abilities to the VideoServer.

  • Admin Panel. The core administration centre in which to manage the configuration options of Carbonio

Note

The Logger component, which is based on a cron-based collection of CSV files, has been deprecated. We are working to integrate in Carbonio a metrics-based monitoring system, based on the Prometheus technology.

Supported Mail Protocols

Carbonio supports the following protocols:

  • POP3 and POP3S

  • SMTP and its secure protocols SSMTP and SPTMS (SMTP over TLS/SSL)

  • IMAP and its secure protocol IMAPS (IMAP over SSL)