69 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
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.
 |