[LXMF] Making the Propgation Net Better and More Scalable #968
Replies: 4 comments 5 replies
|
This assumes, of course, that there aren't any glaring privacy/security flaws with doing it this way, but assuming trust systems are employed properly, I don't see how there would be any more than the current propagation net system. This concept would also work well alongside other propagation node peering improvements because those improvements still help whenever propagation node peering is used as a fallback! |
|
Meshtastic has amply demonstrated what flood routing can lead to in larger mesh networks. |
|
I think you may have some general misconceptions of how LXMF works, which is understandable, since the only way to know it right now is to actually read the code ;) LXMF propagation nodes do not use flood routing. That would imply that everything is broadcast multiple times, which would indeed be very inefficient and stupid. Instead, the LXMF propagation node sync protocol is designed so that every node that wants a particular kind of message actually gets it from someone in a way that tends toward the highest amount of efficiency and lowest latency. Messages themselves are never transmitted to a node more than once, and before messages are transferred between nodes, they run a precursory negotiation to establish which messages need to be transferred. Currently, the possible configuration space of what determines which messages a node actually wants is a bit shallow though, and it was always the intention to expand this to a more complex system that would allow automatic network stratification and load-sharing once the core protocol had its kinks worked out - a point we are now reaching. The 0.9.0 release of LXMF adds the groundwork for this, with a more dynamic peer signalling system embedded in destination announces, specifically from LXMF.py: # Optional propagation node metadata fields. These
# fields may be highly unstable in allocation and
# availability until the version 1.0.0 release, so use
# at your own risk until then, and expect changes!
PN_META_VERSION = 0x00
PN_META_NAME = 0x01
PN_META_SYNC_STRATUM = 0x02 # <-- Relevant target strata structure for node
PN_META_SYNC_THROTTLE = 0x03
PN_META_AUTH_BAND = 0x04
PN_META_UTIL_PRESSURE = 0x05
PN_META_CUSTOM = 0xFFThe idea of naively embedding a preferred PN in LXMF delivery endpoint announces would run counter to the idea of LXMF, since it would:
LXMF aims to have as many messages stored and ready for download as possible within the resource limits specified by the node operator. As I've discussed before, this is the true "concept of Reticulum" - to use allocated resources as intelligently and efficiently as possible, and when resources are exhausted to make intelligent decisions on how to deal with such situations; automatically as long as possible, but when necessary with human intervention. Ideally, any given area of a physical network should have all relevant LXMF messages available in a distributed store, with some level of redundancy. That does not mean that every node has to store every message, but we want a situation where at least every local network area has as good an approximation towards that as physically possible within resource constraints. All of this is entirely possible within the limits of current technology, even on relatively modest hardware. |
|
That sounds completely different than I had previously thought. I have had terrible experiences with Meshtastic, where the way it was distributing (especially with LoRa devices and the limited airtime) rendered it unusable. However, I am pleased that this does not seem to be the case with Reticulum. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
I've been thinking about ways the LXMF propagation node system could be improved and beyond #837 I think I have a pretty good idea of how I can be made better, faster, more efficient, and more scalable.
Right now the propagation net relies entirely upon store-and-forward flood routing which is incredibly inefficient and (in most cases) entirely unnecessary because of the network layer Reticulum provides.
Plus it runs counter the entire concept of Reticulum.
My idea revolves around avoiding any use of the propagation node peering system wherever possible (and disabling it by default).
Instead an LXMF peer would somehow append their own preferred/trusted propagation node(s?) onto their announces, and a node attempting to send that peer a message while they are offline would not send it to their own trusted propagation node, but to the recipient's instead.
Messages sent in that way would then no longer be propagated beyond that single node.
This helps relieve the exponentially ballooning size of a propagation network and makes message reception much faster as nobody has to wait for messages to sync across a propagation net.
This is the best way I see for LXMF propagation nets to be scalable without a ton of manual configuration.
All reactions