Add README
This commit is contained in:
commit
855f8628e1
2 changed files with 294 additions and 0 deletions
192
WIRING.md
Normal file
192
WIRING.md
Normal file
|
|
@ -0,0 +1,192 @@
|
|||
# Wiring
|
||||
|
||||
The diagram is incomplete. The following things aren't shown on the diagram:
|
||||
|
||||
- [ ] Device Messages
|
||||
- [ ] User Profiles
|
||||
- [ ] Notification Counts
|
||||
- [ ] Sending federation.
|
||||
- [ ] Querying federation.
|
||||
- [ ] Other things that aren't shown on the diagram.
|
||||
|
||||
Diagram:
|
||||
|
||||
|
||||
W -> Writer
|
||||
S -> Server/Store/Service/Something/Stuff
|
||||
R -> Reader
|
||||
|
||||
+---+ +---+ +---+
|
||||
+----------| W | +----------| S | +--------| R |
|
||||
| +---+ | Receipts +---+ | Client +---+
|
||||
| Federation |>=========================================>| Server |>=====================>| Sync |
|
||||
| Send | | | | |
|
||||
| | +---+ | | | |
|
||||
| | +--------| W | | | | |
|
||||
| | | Client +---+ | | | |
|
||||
| | | Receipt |>=====>| | | |
|
||||
| | | Updater | | | | |
|
||||
| | +----------+ | | | |
|
||||
| | | | | |
|
||||
| | +---+ +---+ | | +---+ | |
|
||||
| | +------------| W | +------| S | | | +--------| R | | |
|
||||
| | | Federation +---+ | Room +---+ | | | Client +---+ | |
|
||||
| | | Backfill |>=====>| Server |>=====>| |>=====>| Push | | |
|
||||
| | +--------------+ | | +------------+ | | | |
|
||||
| | | | | | | |
|
||||
| | | |>==========================>| | | |
|
||||
| | | | +----------+ | |
|
||||
| | | | | |
|
||||
| | | | +---+ | |
|
||||
| | | | +--------| R | | |
|
||||
| | | | | Client +---+ | |
|
||||
| |>========================>| |>==========================>| Search | | |
|
||||
| | | | | | | |
|
||||
| | | | +----------+ | |
|
||||
| | | | | |
|
||||
| | | |>==========================================>| |
|
||||
| | | | | |
|
||||
| | +---+ | | +---+ | |
|
||||
| | +--------| W | | | +----------| S | | |
|
||||
| | | Client +---+ | | | Presence +---+ | |
|
||||
| | | Room |>=====>| |>=====>| Server |>=====================>| |
|
||||
| | | Send | +--------+ | | | |
|
||||
| | | | | | | |
|
||||
| | | |>======================>| |<=====================<| |
|
||||
| | +----------+ | | | |
|
||||
| | | | | |
|
||||
| | +---+ | | | |
|
||||
| | +--------| W | | | | |
|
||||
| | | Client +---+ | | | |
|
||||
| | | Presence |>=====>| | | |
|
||||
| | | Setter | | | | |
|
||||
| | +----------+ | | | |
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
| |>=========================================>| | | |
|
||||
| | +------------+ | |
|
||||
| | | |
|
||||
| | +---+ | |
|
||||
| | +----------| S | | |
|
||||
| | | Typing +---+ | |
|
||||
| |>=========================================>| Server |>=====================>| |
|
||||
+------------+ | | +----------+
|
||||
+---+ | |
|
||||
+--------| W | | |
|
||||
| Client +---+ | |
|
||||
| Typing |>=====>| |
|
||||
| Setter | | |
|
||||
+----------+ +------------+
|
||||
|
||||
|
||||
# Component Descriptions
|
||||
|
||||
Many of the components are logical rather than physical. For example it is
|
||||
possible that all of the client API writers will end up being glued together
|
||||
and always deployed as a single unit.
|
||||
|
||||
Outbound federation requests will probably need to be funnelled through a
|
||||
choke-point to implement ratelimiting and backoff correctly.
|
||||
|
||||
## Federation Send
|
||||
|
||||
* Handles `/federation/v1/send/` requests.
|
||||
* Fetches missing ``prev_events`` from the remote server if needed.
|
||||
* Fetches missing room state from the remote server if needed.
|
||||
* Checks signatures on remote events, downloading keys if needed.
|
||||
* Queries information needed to process events from the Room Server.
|
||||
* Writes room events to logs.
|
||||
* Writes presence updates to logs.
|
||||
* Writes receipt updates to logs.
|
||||
* Writes typing updates to logs.
|
||||
* Writes other updates to logs.
|
||||
|
||||
## Client Room Send
|
||||
|
||||
* Handles puts to `/client/v1/rooms/` that create room events.
|
||||
* Queries information needed to process events from the Room Server.
|
||||
* Talks to remote servers if needed for joins and invites.
|
||||
* Writes room event pdus.
|
||||
* Writes presence updates to logs.
|
||||
|
||||
## Client Presence Setter
|
||||
|
||||
* Handles puts to whatever the client API path for presence is?
|
||||
* Writes presence updates to logs.
|
||||
|
||||
## Client Typing Setter
|
||||
|
||||
* Handles puts to whatever the client API path for typing is?
|
||||
* Writes typing updates to logs.
|
||||
|
||||
## Client Receipt Updater
|
||||
|
||||
* Handles puts to whatever the client API path for receipts is?
|
||||
* Writes typing updates to logs.
|
||||
|
||||
## Federation Backfill
|
||||
|
||||
* Backfills events from other servers
|
||||
* Writes the resulting room events to logs.
|
||||
* Is a different component from the room server itself cause it'll
|
||||
be easier if the room server component isn't making outbound HTTP requests
|
||||
to remote servers
|
||||
|
||||
## Room Server
|
||||
|
||||
* Reads new and backfilled room events from the logs written by FS, FB and CRS.
|
||||
* Tracks the current state of the room and the state at each event.
|
||||
* Probably does auth checks on the incoming events.
|
||||
* Handles state resolution as part of working out the current state and the
|
||||
* state at each event.
|
||||
* Writes updates to the current state and new events to logs.
|
||||
* Shards by room ID.
|
||||
|
||||
## Receipt Server
|
||||
|
||||
* Reads new updates to receipts from the logs written by the FS and CRU.
|
||||
* Somehow learns enough information from the room server to workout how the
|
||||
current receipt markers move with each update.
|
||||
* Writes the new marker positions to logs
|
||||
* Shards by room ID?
|
||||
* It may be impossible to implement without folding it into the Room Server
|
||||
forever coupling the components together.
|
||||
|
||||
## Typing Server
|
||||
|
||||
* Reads new updates to typing from the logs written by the FS and CTS.
|
||||
* Updates the current list of people typing in a room.
|
||||
* Writes the current list of people typing in a room to the logs.
|
||||
* Shards by room ID?
|
||||
|
||||
## Presence Server
|
||||
|
||||
* Reads the current state of the rooms from the logs to track the intersection
|
||||
of room membership between users.
|
||||
* Reads updates to presence from the logs writen by the FS and the CPS.
|
||||
* Reads when clients sync from the logs from the Client Sync.
|
||||
* Tracks any timers for users.
|
||||
* Writes the changes to presence state to the logs.
|
||||
* Shards by user ID somehow?
|
||||
|
||||
## Client Sync
|
||||
|
||||
* Handle /client/v2/sync requests.
|
||||
* Reads new events and the current state of the rooms from logs written by the Room Server.
|
||||
* Reads new receipts positions from the logs written by the Receipts Server.
|
||||
* Reads changes to presence from the logs written by the Presence Server.
|
||||
* Reads changes to typing from the logs written by the Typing Server.
|
||||
* Writes when a client starts and stops syncing to the logs.
|
||||
|
||||
## Client Search
|
||||
|
||||
* Handle whatever the client API path for event search is?
|
||||
* Reads new events and the current state of the rooms from logs writeen by the Room Server.
|
||||
* Maintains a full text search index of somekind.
|
||||
|
||||
## Client Push
|
||||
|
||||
* Pushes unread messages to remote push servers.
|
||||
* Reads new events and the current state of the rooms from logs writeen by the Room Server.
|
||||
* Reads the position of the read marker from the Receipts Server.
|
||||
* Makes outbound HTTP hits to the push server for the client device.
|
||||
Loading…
Add table
Add a link
Reference in a new issue