4. Flow Control

In a smoothly-running system, receivers of latency-sensitive data are designed to be able to keep up with the expected average data rate. Short-term bursts of traffic may exceed the receiver's ability to keep up, but the data is buffered so that the receiver can catch up when the burst is over. These buffers allow the sender to transmit data as it becomes available without worrying about the receiver's ability to keep up. (Note that for latency-sensitive applications, it is usually undesirable for these buffers to be too large. These applications generally prefer that old "stale" data is discarded rather than saved for long periods of time.)

However, even a very well-designed system can get into conditions where one or more receivers get further and further behind. If the condition is temporary and the application not latency-sensitive, large buffers can be used to maintain data continuity for slow receivers. But no matter how big buffers are made, a design decision needs to be made to determine what to do if and when the buffers finally do fill up.

Many messaging systems, including those based on TCP, use sender flow control when buffers fill up, causing the sending application to be blocked, preventing it from sending at its natural rate. This can lead to overall system problems when only a few receivers are having trouble keeping up (the crybaby receiver problem). In a system that flow-controls the sender, all receivers suffer from the slowdown of a few. This is desirable behavior for systems which require that every receiver must get all messages. However, designers of latency-sensitive systems usually prefer that an overly-slow receiver experience data loss rather than slow down the whole group.

The 29West LBM product supports a TCP-based transport for those applications that require sender flow-control, and two UDP-based transports for applications that do not. Buffering is done on both the sender and the receiver to provide full data integrity under normal conditions. If a receiver slows down for too long and the buffers overflow, the receiver is informed that unrecoverable loss has happened. The designer can control the amount of buffering done to strike a good balance between burst recovery and stale data delivery.

Copyright 2005 - 2006 29West, Inc. -- 29West Confidential