Ideas for Ambrosia server

Here are some basic ideas for a server project, with working title “Ambrosia”. Like my qnet notes, these are just quick jots that need to be better organized someday.

  • gateway:
      a gateway to xmpp-core clients and/or servers
      accept xmpp-client or xmpp-server connections
      make outgoing xmpp-server connections if necessary
      handle authentication (using local tls/sasl system configuration)
      accept connections from services for administration/routing
      if a user is unknown, ask a service for a see-other-host value
  • service protocol:
      mutual-auth encrypted channel from service to gateway
      a service can:
        handle administration of the gateway
        register any number of domain/type pairs to handle
        reply to a see-other-host request by the gateway
      packets sent from the service are routed out the gateway
      packets received from a remote client or domain is delivered to the
        service
      if there are multiple services registered with the same domain name,
        the gateway picks one (round robin load balance, or whatever) ?
      stanzas should be chunked so that large stanzas don't block the channel
      acking of all stanzas
  • how it will probably work:
      launch the gateway process.  it needs no configuration.
      configure and launch the IM service.  it connects to the gateway, and
        registers its domain for client/server.
      a client connects to the gateway, the gateway authenticates it.
      the client sends a message addressed to someone at another domain.
      the gateway routes it to the IM service.  the IM service processes
        it, and routes it back to the gateway for outbound deliver.
      the gateway connects to the other domain and delivers it.
  • why this design is significant:
      the gateway system is scalable, in that you can run as many as you
        want.  the single IM service can connect to multiple gateways.
      the gateway handles all authentication, meaning that the services
        have less to think about.
      any number of services can share a gateway
      any number of domains can share a gateway (virtual domains)
      gateway shouldn't need to be configured, making administration easier
      the same gateway software can be used from simple internal servers
        all the way to massive public servers
  • what this design doesn't cover:
      xmpp-im.  this is purely about the gateway.  handling IM is another
        topic entirely, and scalability of that is an even harder problem.
        all this proposal does is isolate the edge work into a reusable
        component.

Leave a Comment

Bad Behavior has blocked 353 access attempts in the last 7 days.