View Issue Details

IDProjectCategoryView StatusLast Update
0003492unrealircdpublic2009-07-24 01:07
ReporterP21YALPHA Assigned To 
PrioritynormalSeverityfeatureReproducibilityN/A
Status closedResolutionopen 
Product Version4.0-devel 
Summary0003492: U4 circuits and mesh links
DescriptionFEATURE REQUEST of mesh structuring or/and circuit structuring an unrealircd network.

To prevent network splits and maybe to include intelligent link restructuring in runtime.

:) It would be a very nice improvement.
3rd party modules

Activities

TheSkorm

2007-07-31 05:38

reporter   ~0014632

Sounds very interesting, don't really know how possible it is, but I would defiantly love to see this.

P21YALPHA

2007-07-31 10:04

reporter   ~0014634

It would have 3 major Problems, which i have the basic ideas to solve 'em.

1. Problem: Message Loops!
Solution: Prefix every Message with an unique Transaction ID. Store a transaction log, which keeps track of Messages already sent or not.

(Transactions which might be answered by a "OK, Transact ID has arrived")
;)

2. Problem: Routing Messages (mesh structures)
Solution: Implement a simple message based Routing protocol. Store Network Map on every server.

3. Problem: Dynamic runtime link reorganization
Solution: Adapt the Spanning Tree Protocol (STP, IEEE 802.1 D) for ircd needs. :D
Let irc deamons calculate best link ways, etc...
Maybe combine it with the suggestion in Problem 2.

I know boys, this sounds of pretty hard work.
But hey! If you would implement such features, unrealircd networks would be near to 99% aivailability. Stable and very impressive.

PS.: I can help at the design, if you need help.
:)

owine

2007-07-31 10:11

reporter   ~0014635

Mesh links use a lot of bandwidth and are not really practical for the IRC protocol.

P21YALPHA

2007-07-31 10:13

reporter   ~0014637

Which hasnt yet been proven. Remember the internet, how can this big mesh survive?
;)

owine

2007-07-31 10:17

reporter   ~0014638

The solution to this is just to have reliable servers hosting your network. Netsplits will happen but if your servers are all in reliable data centers, they will happen less often. A mesh simply would be so difficult to implement for IRC communication, that it is not worth the effort.

InspIRCd used to use mesh linking but scrapped it for the current spaningtree protocol because of these exact issues.

P21YALPHA

2007-07-31 10:20

reporter   ~0014639

Last edited: 2007-07-31 10:31

Did this mesh reorganize its links dynamically while no oper did have to take hands on it?

I see no issues on data centers, while servers are located in different countries/continents.

One simple message would inform the Servers of a topology change, and the rootircd would intruct rest of the servers how to reshape without any network interference.
Linking any Server back again, the network might reshape or the rootircd would inform the homecoming server to link to whatever.

It depends on how you implement it, which values how much traffic it produces.
:)

Stealth

2007-07-31 16:14

reporter   ~0014644

This is already planned by the Insp coders, I don't know if we will be implementing it before them or not.

owine

2007-07-31 17:29

reporter   ~0014645

Say your network has 5 servers. Every message to a channel is sent to 4 different servers. This means 4x the traffic on your network. While a mesh sounds good, the practicality is not really there. Using failover links is just as good.

TheEggMan

2007-07-31 17:44

reporter   ~0014646

I was going to say, isn't this planned or being implemented by the InspIRCd team?

aquanight

2007-08-28 22:18

reporter   ~0014746

[quote]Say your network has 5 servers. Every message to a channel is sent to 4 different servers. This means 4x the traffic on your network. While a mesh sounds good, the practicality is not really there. Using failover links is just as good.[/quote]

This is technically true of spanning tree (only the bandwidth is spread out more, except the in the case of a single hub). But in a mesh, with the rule of thumb for channel messages of not sending where it isn't needed, sometimes bandwidth can be saved. Spanning tree you'd have to send up if even one server along the path has a user in the channel, which could easily involve 3 or 4 other servers that do nothing but pass it on. With mesh, ideally, you would only send to your direct uplink if that uplink has someone in the channel. Although perfect meshes aren't always possible, I believe originally insp accounted for this with route messages which allowed for basically simulating the appearance of a perfect mesh in the absence of an actual perfect mesh.

There is one issue with meshing though: the decentralized nature that structure invokes gets shot straight to the deepest underworlds when traditional services are added, because they reintroduce something centralized, and reintroduce the headache of significant service interruption when just the right server goes kersplat, whereas normally one server goes out, the users on it just reconnect on a different one and carry on like nothing happened. The solution is to use ircd-side services with a module, with databases shared via replication or whatever, but to my knowledge, nothing of this nature has been implemented even for unreal3.

Issue History

Date Modified Username Field Change
2007-07-31 05:36 P21YALPHA New Issue
2007-07-31 05:38 TheSkorm Note Added: 0014632
2007-07-31 10:04 P21YALPHA Note Added: 0014634
2007-07-31 10:11 owine Note Added: 0014635
2007-07-31 10:13 P21YALPHA Note Added: 0014637
2007-07-31 10:17 owine Note Added: 0014638
2007-07-31 10:20 P21YALPHA Note Added: 0014639
2007-07-31 10:31 P21YALPHA Note Edited: 0014639
2007-07-31 16:14 Stealth Note Added: 0014644
2007-07-31 17:29 owine Note Added: 0014645
2007-07-31 17:44 TheEggMan Note Added: 0014646
2007-07-31 17:45 TheEggMan Status new => acknowledged
2007-08-28 22:18 aquanight Note Added: 0014746
2009-07-24 01:07 Stealth Status acknowledged => closed