Golang is a language that is particularly unsuitable for application-layer reliable protocol development. All the reliable protocols depend on the connection state, in the context of concurrency, all the state depends on the event, all the events are dependent on the kernel file descriptor, the problem is that in a reliable scenario, we often need to use a port as a network card, a network card can have 65,536 descriptors concurrent processing events, A port that has only one descriptor, which needs to simulate the event-handling performance of 65,536 descriptors, is a very big problem. The mechanism of the Golang itself----although Golang and most of the implementation of the process is not consistent----cause each event should be short-term, and the event should be stateless, if the reliable agreement at all stages of business and event understanding is not in place, it is extremely easy to achieve more resources, and the low efficiency of the agreement.
Why do we have the above paragraph? Because the current sia,ipfs,storj,swarm are implemented in Golang, these implementations are implemented in the application layer based on the UDP reliable transport protocol, to achieve point-to-point data storage and sharing, the problem is, I guess these projects, including now all the blockchain projects, are lacking the support of network transmission experts, so their transmission implementations seem ridiculous. True, network transmission is the accumulation of things by time, TCP developed more than half a century, only to develop BBR, not to mention 20 years, most of the time in the loose research state of decentralized transmission. From BT to a few of the already ico large-size American knife storage projects, in the transmission, can be said to be in a simple rough state, let alone with the existing network affinity strategy.
IPFs is actually a BT protocol, and the bottom of BT is UTP. UTP implements the AIMD in transmission, which is something inherited from traditional TCP, classic and useful. By the way, the TCP network itself is a chaotic system, the sender and the receiver do not know the state of the network, they do not know whether to continue to send, do not know whether it is reasonable, the only thing to do is to test, so the great God said that TCP is a control system, not the transmission protocol. However, AIMD can cause a slight congestion in the network, and from a single link, the network is always in the packet and not dropped. The problem is that in a packet switched network, the physical link is a time-sharing, a single link can detect the congestion point, in multiple links, it may have produced a large packet loss. So the AIMD of single link detection is always inaccurate. Therefore, on the IPFs, for the time-insensitive storage, download scene, probably no pressure, but if it is related to streaming media transmission, IPFs afraid deficient.
What is the problem with Storj? Storj also used UTP, the problem is, Storj didn't understand AIMD, they brutally set a fixed rate, which makes me simply don't know how to evaluate their transmission implementation. Sia's implementation did not use Utp,sia to implement its own ratelimit to control the message delivery of pace rate, the problem is that the transmission implementation of SIA is not an event-driven implementation, they use sleep, but when sleep, the connection is not aware of the changes in the link, Therefore, the sending side can continue to hold the message for the link, it is later aware of the latter.
So, are these storage devices not available? On the contrary, all can be used, unfortunately, can only be used, if you want to use them to achieve other more efficient transmission, is the same as wishful thinking. In the end, these things are just a re-implementation of TCP in the application layer, and now all the re-implementation is still at the earliest stage of TCP. Even without congestion control at the earliest stages of TCP, everyone was able to use the link until one day, when a great God noticed that his messages often failed to arrive as expected, the congestion theory was proposed. Half a century later, congestion control algorithms are maturing----actually far from maturity----we can enjoy the smooth transmission service on the network that many people make trouble with. However, the great TCP has its own shortcomings: the time-out retransmission is not accurate and wasteful bandwidth, RTT is not really measured, so there is a series of remedial measures to form congestion control this set of specific technology.
IPFs proposed to do a centralized network infrastructure, but from a technical framework, it is not enough, but to do a centralized storage facility is more than sufficient. Compared to a few mainland China focused on making applications and even the application did not do a good job----yes, do not be guilty, I said that you----IPFs from the concept of a very innovative project.