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.


