Monday, September 1, 2008

End-To-End Arguments In System Design

The "End-To-End" paper talks about a subject which is largely taken for granted today: separating complexity from lower levels. Using the main example of a reliable file transfer program, the paper shows some of the pitfalls of putting too much complexity into the lower levels. It opens with the definition of the "end-to-end argument" as an argument against over-implementing the lower levels of an architecture, offering instead that the implementation should be put in the layer where it is going to be used, which in this example is the application layer instead of the (lower level) communication layer.

The file transfer example illustrates how even if reliability was built into the communication layer, the application layer would still have to verify the transmitted data since other points of failure along the way could have dropped or corrupted data. Therefore, as long as the failure rate of the network is not too high, reliability should not be built into the communication layer, and instead will be part of the application layer, since the it already has to deal with data losses elsewhere. The paper then offers several important examples of mechanisms which could be put in the communication layer, but the end-to-end principle shows problems that could arise if this was done.

The end-to-end principle has come a long way since this paper, and it is easy to point out numerous areas to which it applies in today's world of hardware and software. Our networks today follow this principle, where instead of just a communication layer and an application layer, we have many layers in between, each offering varying levels of function. Each layer offers tools for the layer above to use, hoping to reduce redundancy by offering building blocks for higher layers. But the basics of our current system all have ties to ideals set in this paper.

One of the most important points of the paper was identifying the ends. The paper gave the example of a strong end-to-end argument in digital voice communication where reliability would introduce delays unacceptable for a conversation, and offered a counter-example of a speech message system, where you would want reliability built in to the lower levels. This is an interesting example of what is known today as the transport layer. Today, the digital voice communication would use UDP, while the voice message system would use TCP.

This paper opened the door on end-to-end communication, and it left if open for future research into what the right balance of simplicity and complexity together with cost. Today, that has evolved into our multi-layered communications, which offers many different layers, each with a well-defined set of parameters.

No comments: