You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/07/17 02:24:42 UTC

[james-project] 28/31: JAMES-3302 Write more about Architecture for Distributed server

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 9d217f1998d47f9631e12856719d70e2962a5710
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Jul 10 17:31:47 2020 +0700

    JAMES-3302 Write more about Architecture for Distributed server
    
     - Mention protocols
     - List (and detail some) components
---
 .../servers/pages/distributed/architecture.adoc    | 81 +++++++++++++++++++++-
 1 file changed, 80 insertions(+), 1 deletion(-)

diff --git a/docs/modules/servers/pages/distributed/architecture.adoc b/docs/modules/servers/pages/distributed/architecture.adoc
index d4e1678..cb4b33c 100644
--- a/docs/modules/servers/pages/distributed/architecture.adoc
+++ b/docs/modules/servers/pages/distributed/architecture.adoc
@@ -17,6 +17,20 @@ In order to deliver its promises, the Distributed Server leverages the following
  * *Tika* (optional) enables text extraction from attachments, thus improving full text search results.
  * *SpamAssassin* (optional) can be used for Spam detection and user feedback is supported.
 
+== Protocols
+
+The following protocols are supported and can be used to interact with the Distributed Server:
+
+* *SMTP*
+* *IMAP*
+* link:operate/webadmin.adoc[WebAdmin] REST Administration API
+* *LMTP*
+
+The following protocols should be considered experimental
+
+* *JMAP* (draft specification as defined link:https://github.com/apache/james-project/tree/master/server/protocols/jmap-draft/doc[here])
+* *POP3*
+
 == Components
 
 This section presents the various components of the Distributed server, providing context about
@@ -108,7 +122,25 @@ delivery retries, or
 
 === Mailbox
 
-(TODO)
+Storage for emails belonging for users.
+
+Metadata are stored in Cassandra while headers, bodies and attachments are stored
+within the xref:#_blobstore[BlobStore].
+
+==== Search index
+
+Emails are indexed asynchronously in ElasticSearch via the xref:#_event_bus[EventBus]
+in order to enpower advanced and fast email full text search.
+
+Text extraction can be set up using link:https://tika.apache.org/[Tika], allowing
+to extract the text from attachment, allowing to search your emails based on the attachment
+textual content. In such case, the ElasticSearch indexer will call a Tika server prior
+indexing.
+
+==== Quotas
+
+Current Quotas of users are hold in a Cassandra projection. Limitations can be defined via
+user, domain or globally.
 
 ==== Event Bus
 
@@ -163,3 +195,50 @@ However, mails are not retained forever as you have to configure a
 retention period before using it (with one-year retention by default if
 not defined). It’s also possible to permanently delete a mail if needed.
 
+=== Data
+
+(TODO)
+
+=== Recipient rewrite tables
+
+(TODO)
+
+=== BlobStore
+
+Stores potentially large binary data.
+
+Mailbox component, Mail Queue component, Deleted Message Vault
+component relies on it.
+
+Supported backends includes ObjectStorage (link:https://wiki.openstack.org/wiki/Swift[Swift], S3 API).
+
+Encryption can be configured on top of ObjectStorage.
+
+Blobs are currently deduplicated in order to reduce storage space. This means that two blobs with
+the same content will be stored one once.
+
+The downside is that deletion is more complicated, and a garbage collection needs to be run. This is a work
+in progress. See link:https://issues.apache.org/jira/browse/JAMES-3150[JAMES-3150].
+
+=== Task Manager
+
+Allows to control and schedule long running tasks run by other
+components. Among other it enables scheduling, progress monitoring,
+cancelation of long running tasks.
+
+Distributed James leverage a task manager using Event Sourcing and RabbitMQ for messaging.
+
+=== Event sourcing
+
+link:https://martinfowler.com/eaaDev/EventSourcing.html[Event sourcing] implementation
+for the Distributed server stores events in Cassandra. It enables components
+to rely on event sourcing technics for taking decisions.
+
+A short list of usage are:
+
+* Data leak prevention storage
+* JMAP filtering rules storage
+* Validation of the MailQueue configuration
+* Sending email warnings to user close to their quota
+* Implementation of the TaskManager
+


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org