From 2044f365c8845b369ae26b880d4c1e5e862c0ee5 Mon Sep 17 00:00:00 2001 From: erikjohnston Date: Tue, 28 Jun 2022 12:15:27 +0000 Subject: deploy: 7469824d5838577f5a07aec6ab73b457459d8b4a --- v1.62/replication.html | 221 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 v1.62/replication.html (limited to 'v1.62/replication.html') diff --git a/v1.62/replication.html b/v1.62/replication.html new file mode 100644 index 0000000000..6b40e3e4ff --- /dev/null +++ b/v1.62/replication.html @@ -0,0 +1,221 @@ + + + + + + Replication - Synapse + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +
+
+ +
+ +
+ +

Replication Architecture

+

Motivation

+

We'd like to be able to split some of the work that synapse does into +multiple python processes. In theory multiple synapse processes could +share a single postgresql database and we'd scale up by running more +synapse processes. However much of synapse assumes that only one process +is interacting with the database, both for assigning unique identifiers +when inserting into tables, notifying components about new updates, and +for invalidating its caches.

+

So running multiple copies of the current code isn't an option. One way +to run multiple processes would be to have a single writer process and +multiple reader processes connected to the same database. In order to do +this we'd need a way for the reader process to invalidate its in-memory +caches when an update happens on the writer. One way to do this is for +the writer to present an append-only log of updates which the readers +can consume to invalidate their caches and to push updates to listening +clients or pushers.

+

Synapse already stores much of its data as an append-only log so that it +can correctly respond to /sync requests so the amount of code changes +needed to expose the append-only log to the readers should be fairly +minimal.

+

Architecture

+

The Replication Protocol

+

See the TCP replication documentation.

+

The Slaved DataStore

+

There are read-only version of the synapse storage layer in +synapse/replication/slave/storage that use the response of the +replication API to invalidate their caches.

+

The TCP Replication Module

+

Information about how the tcp replication module is structured, including how +the classes interact, can be found in +synapse/replication/tcp/__init__.py

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + \ No newline at end of file -- cgit 1.4.1