Jabber Virtual Account
XMPP is great IM technology - flexible and extended, distributed and fail-tolerance. But it has one defect, back side of a features.
Name of a this problem is "too many servers". Network structure not a transparent for usual people and prevents more wide spread of a technology.
In jabber client for registration user should choose server from dozens, if he discovering list via web then from hundreds.
Most of public servers not so powerful. Yes, exists really big nodes like jabber.org, but even these machines can't keep more than 10.000 - 20.000 of users online. For reliability user must be registered in some servers, usually on 2-3. And his contacts too.
And so we have double problem of usability: every XMPP-user use some accounts and even his contact uses some accounts too. Second problem successfully solved with metacontacts, but first still opened.
Average user don't want think about server-related questions, he should have possibility transparently communicate with friends. Many accounts is problem - legacy IM networks has no it.
For example main account of user can looks so:
contact@server1 |
|
|-contact1 (metacontact)
| |
| |---- contact1 @ server1
| |---- contact1 @ contact.org
|
|-contact2 @ server2
|
|-contact3 @ server1
|
|-contact4
|
|---- contact4 @ server1
|---- contact4 @ server2
But contacts 3 and 4 very important for him and he keep them in second account:
contact@server2 |
|
|---- contact3 @ server1
|
|---- contact4
| |
| |---- contact4 @ server1
| |---- contact4 @ server2
|
|--- contact5 @ server3
2 accounts, and partially overlapping contacts. No good.
I propose made "jabber virtual account" - abstraction above separate jabber accounts like LVM is abstraction above separate disc volumes and RAID is abstraction above separate discs. Jabber client should merge accounts in single metaaccount and keep all contacts of user in it. Of course if user self want it.
And user will have one account instead of many:
contact@jabber
|
|
|- contact1 (metacontact) [contact@server1]
| |
| |---- contact1 @ server1
| |---- contact1 @ contact.org
|
|- contact2 @ server2 [contact@server1]
|
|- contact3 @ server1
| |
| |---- contact3 @ server1 [contact@server1]
| |---- contact1 @ server2 [contact@server2]
|
|- contact4
| |
| |---- contact4 @ server1
| | |
| | |---- contact4 @ server1 [contact@server1]
| | |---- contact4 @ server1 [contact@server2]
| |
| |---- contact4 @ server2
| | |
| | |---- contact4 @ server2 [contact@server1]
| | |---- contact4 @ server2 [contact@server2]
|
|- contact5 @ server3 [contact@server2]
Not very expensive way because user don't sends all messages via all servers. And also client can do load balancing - if first server too busy (ping long or something other) it can sends message via second.