A bit more docs

This commit is contained in:
Andrew Godwin 2022-11-19 22:36:54 -07:00
parent b9bab4c54c
commit f9ee3ef69d
3 changed files with 66 additions and 1 deletions

View file

@ -3,11 +3,16 @@ Takahē
Welcome to the Takahē documentation! Takahē is an ActivityPub server, designed
for low- to medium-size installations, and with the ability to serve multiple
for small- to medium-size installations, and with the ability to serve multiple
domains at once.
This documentation is still in development, and will be patchy while Takahē is
in alpha. For more information about Takahē, see
`the official site at jointakahe.org <https://jointakahe.org>`_.
.. toctree::
:maxdepth: 2
:caption: Contents:
installation
principles

View file

@ -15,6 +15,7 @@ Prerequisites
* Something that can run Docker/OCI images
* A PostgreSQL 14 (or above) database
* One of these to store uploaded images and media:
* Amazon S3
* Google Cloud Storage
* Writable local directory (must be accessible by all running copies!)

59
docs/principles.rst Normal file
View file

@ -0,0 +1,59 @@
Design Principles
=================
Takahē is somewhat opinionated in its design goals, which are:
* Simplicity of maintenance and operation
* Multiple domain support
* Asychronous Python core
* Low-JS user interface
These are explained more below, but it's important to stress the one thing we
are not aiming for - scalability.
If we wanted to build a system that could handle hundreds of thousands of
accounts on a single server, it would be built very differently - queues
everywhere as the primary communication mechanism, most likely - but we're
not aiming for that.
Our final design goal is for around 10,000 users to work well, provided you do
some PostgreSQL optimisation. It's likely the design will work beyond that,
but we're not going to put any specific effort towards it.
After all, if you want to scale in a federated system, you can always launch
more servers. We'd rather work towards the ability to share moderation and
administration workloads across servers rather than have one giant big one.
Simplicity Of Maintenance
-------------------------
It's important that, when running a social networking server, you have as much
time to focus on moderation and looking after your users as you can, rather
than trying to be an SRE.
To this end, we use our deliberate design aim of "small to medium size" to try
and keep the infrastructure simple - one set of web servers, one set of task
runners, and a PostgreSQL database.
The task system (which we call Stator) is not based on a task queue, but on
a state machine per type of object - which have retry logic built in. The
system continually examines every object to see if it can progress its state
by performing an action, which is not quite as *efficient* as using a queue,
but recovers much more easily and doesn't get out of sync.
Multiple Domain Support
-----------------------
TODO
Asynchronous Python
-------------------
TODO
Low-JS User Interface
---------------------