This chapter describes the way to achieve the reliability of video server, design decisions, design simplifications and suggested ways to improve the current design.
The present state of most of personal and old-generation client/server applications inured users to the much less reliability of commercial programs comparing to TV or oven. At the same time in manufacturing and financial business there is no of such acceptable fault level - any fault may cost you more than any expenses to improve the reliability of the system.
While most of practical programmers and computer scientists work in the hope to finally make any software program and hardware platform absolutely reliable, the most realistic of them work on the more recent approach to make reliable system from unreliable components. Traditionally this approach was implemented on the single computer: old mainframes and modern workstations support hot-swap of hardware components, redundant data storage, mirroring, journaling and so on. Enormous efforts was made to fix all possible bugs in mainframe software - this approach is proven to be expensive by the fact that billion dollars are spent to fix the last remaining bug on those systems - Y2K problem.
The drawback of this mainframe approach is the fat client in client/server architecture. In fact, mainframes and modern workstations guarantee the exceptional reliability of the relational database systems as far as you keep all the server software installations as provided by the manufacturer and system integrator. This means that most of the business logic must be implemented on the client side, where even nastiest faults of in-house programmers can't affect the data integrity on the server database. Probably that was the main reason of failure of the object-related database approach. Only the simple relational database may guarantee the affordable level of reliability on the server side. Only now, when the new Java language proved the exceptional level of stability, Oracle started to implement object-oriented features on the flagship product. The availability problem in client/server architecture is solved by investing into server with may handle all clients at the same time. The fault tolerance is based on mirroring, journaling and other expensive solutions.
In recent years the approach to build reliable systems from unreliable components was expanded from mainframe hardware to the network. The new logical layer was introduced between client and server to build the middleware solutions. On the server side we still require the quite expensive relational database, although clustering lets reduce the price of this layer by using several affordable workstations instead of a single expensive mainframe. But we still keep the business logic separately from the server. Instead, the middle layer is introduced to handle all the business logic on several computers, working in parallel and sharing the load between them. The client handles only the application logic and thus keeps Visual Basic programmers off the core of important data processing.
The reliability problem at middleware layer is solved by hot-swapping the connection and the persistent state from crashed middleware server to the another hot server. The availability is solved by keeping all servers below the maximum load ( usually the crash of 50\% of servers should still keep the system working ) and the proper load balancing. The fault tolerance is maintained by expensive databases at back-end server layer and regular transferring of persistent states at middleware layer to other locations for redundancy. This allows to implement all the computing-intensive and reliable business logic at commodity components. In fact, author knows the brokerage company which have few expensive and rock-solid servers and clients, while all the middleware layer is implemented at the stock of parallel Linux computers.