Design decisions

The main approach to design components of the video server was inspired by the ``classic'' middleware. Although the fault tolerance was not the immediate goal, the proper architecture lets improve the reliability, availability and fault tolerance as incremental changes, without re-shaking everything.

The back-end of the whole system which manages the metadata, the network topology and holds the persistent state of several operations is implemented in Java connected to the database via JDBC. During the development, such key Java properties as operating in the virtual environment, absence of pointers and memory leaks, strong prototyping and exceptions handling determined the exceptional reliability of the database server.

At the same time the database server is getting rid of any real-time tasks - all multimedia traffic bypasses it. In those conditions the Java performance is proven to be adequate.

At startup, each client and acquisition server maintains the permanent TCP connection with the database server, which tracks the status of those servers. Moreover, each acquisition server maintains the permanent connection with one or several dedicated push servers, informing the database/metadata server on the status of those push servers. So, database server is tracking the whole system status on real time.

So, first, we may have several real-time push servers, broadcasting movies to clients. Second, we have the highly reliable back-end that keep tracking of the system status. Each client knows the data-rate and size of each movie. To improve the reliability of the system, client should be able to receive the movie from reserve push server when the one server is down. To improve the availability, client should also address the database server to request alternative sources of broadcast.

With current implementation, the hot-swap of push servers and any sophisticated load balancing is not yet available, this should be the direction of further research. But the implementation of those features will not affect the whole system design.