1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- Synapse Architecture
- ====================
- As of the end of Oct 2014, Synapse's overall architecture looks like::
- synapse
- .-----------------------------------------------------.
- | Notifier |
- | ^ | |
- | | | |
- | .------------|------. |
- | | handlers/ | | |
- | | v | |
- | | Event*Handler <--------> rest/* <=> Client
- | | Rooms*Handler | |
- HSes <=> federation/* <==> FederationHandler | |
- | | | PresenceHandler | |
- | | | TypingHandler | |
- | | '-------------------' |
- | | | | |
- | | state/* | |
- | | | | |
- | | v v |
- | `--------------> storage/* |
- | | |
- '--------------------------|--------------------------'
- v
- .----.
- | DB |
- '----'
- * Handlers: business logic of synapse itself. Follows a set contract of BaseHandler:
- - BaseHandler gives us onNewRoomEvent which: (TODO: flesh this out and make it less cryptic):
-
- + handle_state(event)
- + auth(event)
- + persist_event(event)
- + notify notifier or federation(event)
-
- - PresenceHandler: use distributor to get EDUs out of Federation. Very
- lightweight logic built on the distributor
- - TypingHandler: use distributor to get EDUs out of Federation. Very
- lightweight logic built on the distributor
- - EventsHandler: handles the events stream...
- - FederationHandler: - gets PDU from Federation Layer; turns into an event;
- follows basehandler functionality.
- - RoomsHandler: does all the room logic, including members - lots of classes in
- RoomsHandler.
- - ProfileHandler: talks to the storage to store/retrieve profile info.
- * EventFactory: generates events of particular event types.
- * Notifier: Backs the events handler
- * REST: Interfaces handlers and events to the outside world via HTTP/JSON.
- Converts events back and forth from JSON.
- * Federation: holds the HTTP client & server to talk to other servers. Does
- replication to make sure there's nothing missing in the graph. Handles
- reliability. Handles txns.
- * Distributor: generic event bus. used for presence & typing only currently.
- Notifier could be implemented using Distributor - so far we are only using for
- things which actually /require/ dynamic pluggability however as it can
- obfuscate the actual flow of control.
- * Auth: helper singleton to say whether a given event is allowed to do a given
- thing (TODO: put this on the diagram)
- * State: helper singleton: does state conflict resolution. You give it an event
- and it tells you if it actually updates the state or not, and annotates the
- event up properly and handles merge conflict resolution.
- * Storage: abstracts the storage engine.
|