mirror of
https://github.com/matrix-org/dendrite.git
synced 2024-11-26 16:21:55 -06:00
Document internal APIs and Application Services component (#499)
* Document internal APIs, app services in WIRING.md * Add application services component to WIRING diagram * Fix typo and clarify what mode internal APIs use HTTP
This commit is contained in:
parent
83b3df762b
commit
8da54352e5
39
WIRING.md
39
WIRING.md
|
@ -36,7 +36,11 @@ Diagram:
|
||||||
| | | | | | | |
|
| | | | | | | |
|
||||||
| | | |>==========================>| | | |
|
| | | |>==========================>| | | |
|
||||||
| | | | +----------+ | |
|
| | | | +----------+ | |
|
||||||
| | | | | |
|
| | | | +---+ | |
|
||||||
|
| | | | +-------------| R | | |
|
||||||
|
| | | |>=====>| Application +---+ | |
|
||||||
|
| | | | | Services | | |
|
||||||
|
| | | | +--------------+ | |
|
||||||
| | | | +---+ | |
|
| | | | +---+ | |
|
||||||
| | | | +--------| R | | |
|
| | | | +--------| R | | |
|
||||||
| | | | | Client +---+ | |
|
| | | | | Client +---+ | |
|
||||||
|
@ -190,3 +194,36 @@ choke-point to implement ratelimiting and backoff correctly.
|
||||||
* Reads new events and the current state of the rooms from logs writeen by the Room Server.
|
* 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.
|
* Reads the position of the read marker from the Receipts Server.
|
||||||
* Makes outbound HTTP hits to the push server for the client device.
|
* Makes outbound HTTP hits to the push server for the client device.
|
||||||
|
|
||||||
|
## Application Service
|
||||||
|
|
||||||
|
* Receives events from the Room Server.
|
||||||
|
* Filters events and sends them to each registered application service.
|
||||||
|
* Runs a separate goroutine for each application service.
|
||||||
|
|
||||||
|
# Internal Component API
|
||||||
|
|
||||||
|
Some dendrite components use internal APIs to communicate information back
|
||||||
|
and forth between each other. There are two implementations of each API, one
|
||||||
|
that uses HTTP requests and one that does not. The HTTP implementation is
|
||||||
|
used in multi-process mode, so processes on separate computers may still
|
||||||
|
communicate, whereas in single-process or Monolith mode, the direct
|
||||||
|
implementation is used. HTTP is preferred here to kafka streams as it allows
|
||||||
|
for request responses.
|
||||||
|
|
||||||
|
Running `dendrite-monolith-server` will set up direct connections between
|
||||||
|
components, whereas running each individual component (which are only run in
|
||||||
|
multi-process mode) will set up HTTP-based connections.
|
||||||
|
|
||||||
|
The functions that make HTTP requests to internal APIs of a component are
|
||||||
|
located in `/<component name>/api/<name>.go`, named according to what
|
||||||
|
functionality they cover. Each of these requests are handled in `/<component
|
||||||
|
name>/<name>/<name>.go`.
|
||||||
|
|
||||||
|
As an example, the `appservices` component allows other Dendrite components
|
||||||
|
to query external application services via its internal API. A component
|
||||||
|
would call the desired function in `/appservices/api/query.go`. In
|
||||||
|
multi-process mode, this would send an internal HTTP request, which would
|
||||||
|
be handled by a function in `/appservices/query/query.go`. In single-process
|
||||||
|
mode, no internal HTTP request occurs, instead functions are simply called
|
||||||
|
directly, thus requiring no changes on the calling component's end.
|
||||||
|
|
Loading…
Reference in a new issue