![]() |
![]() |
Table of Contents |
The overall system architecture looks as follows:
The hardware tier is composed of two types of devices: video and archive archive. A video server acts as a stream player and recorder. An archive sever fulfills a role of a library that stores all the data accessible for clients. The system can work with only one video and archive server present. Although, many video and archive servers shown on the picture that can be served by the system makes the architecture fully scalable. When the architecture composed of one video and one archive server, what would happened when the number of system's users would grow and too many of them would want to play a video at the same time? It might be impossible to store all data required by them on one video server. The system, which might be composed of many video and archive servers, can undoubtedly deal with this situation by adding a new video server into the architecture. The presented system performs load balancing and distributes videos among video servers and this way preserves its usefulness. The system doesn't specify the kind of video servers and archive libraries that can be compatible with it. It can operate with any video server and archive library - the software tier solves the problem of diversity.
The current implementation uses as a video server the Sun MediaCenter server that has a hardware, operating system and file system dedicated for multimedia. It is equipped with 50 GB disc array, can operate with MPEG-1 and MPEG-2 streams. It has a network card dedicated to Fast Ethernet, ATM, as well as analogue interfaces. The role of the archive server performs automated tape library ATL with total capacity of 2,64 TB, throughput of 13,5 GB/h. It supplies 3 independent drives with transfer rate of 1.25 MB/s and uses 264 cartridges of 10 GB each.
Each device, either a video server or an archive library can communicate with other devices/applications through the video server or archive library specific way. Such diversity makes the use of them very complicated, and sometimes even impossible. If the system skipped the proxy layer and communicated with a server directly it would be unachievable to use another servers that are able to speak in a different way without modification of the main module.
VFS and AS proxies have been introduced into the system as the solution that improves the system's flexibility. They provide standard set of functions used to manipulate on contents of the servers, which they cover: adding, removing, changing attributes, getting system state etc. The proxy layer hides variety of vendor's solutions by means of CORBA interfaces. For instance, when a new archive library is to be established into a system, the only thing that must be performed is covering it by a proxy that implements the AS_proxy interface, which looks as follows:
//
// ....
//
interface AS_proxy_client
{
strings get_list_of_files() raises (AS_proxy::AS_proxy_exception);
file_status get_file_status(in string file_name)
raises (AS_proxy::AS_proxy_exception);
void delete_file(in string file_name)
raises (AS_proxy::AS_proxy_exception);
void rename_file(in string file_name_old, in string file_name_new)
raises (AS_proxy::AS_proxy_exception);
void retrieve_file(in lock_manager lockman, in string file_name,
in string destination_IP, in unsigned short destination_port)
raises (AS_proxy::AS_proxy_exception);
void retrieve_file_out(in lock_manager lockman, in string file_name,
out string source_IP, out unsigned short source_port)
raises (AS_proxy::AS_proxy_exception);
void stage_file(in string file_name)
raises (AS_proxy::AS_proxy_exception);
void stage_file_wait(in string file_name, in unsigned short nsecs)
raises (AS_proxy::AS_proxy_exception);
void store_file(in lock_manager lockman, in string file_name,
in string source_IP, in unsigned short source_port)
raises (AS_proxy::AS_proxy_exception);
};
The CORBA server that implements this interface communicates with the device using a protocol that is understood by this device. However, for the rest of the components of the system, it is accessible as a CORBA object with the same interface. Such a solution makes the system independent on any current and future solutions provided by any vendor.
In the current implementation we use, as an archive library, the ATL tape library, which gives the access to its resources by means of FTP. If one didn't possess such a fantastic device, it would be really easy for them to substitute it with a local, large-capacity file system that accesses its resources by common read/write operations. Such a replacement would have no influence on a system activity. What is more, this change would be even unrecognizable by the system, which would identify a new archive server as a CORBA object that implements the same CORBA interface.
Every film stored in the system is an abstract identity with no physical equivalent. And so is seen by a client as an abstract which is ready (or not) for playing. A client knows only its name and place in a hierarchical directory structure, owner and access rights. There are files stored on archive and video servers (called later instances) that are logically attached to films - so every film has one or more copies of itself currently present in the system. But these files are hidden from clients. This is because manual management of these instances can destroy the system consistency and should be restricted to minimum. The assumption in this system is that there is always a film instance on some of archive servers. If it is missing on a video server it will be downloaded - as video servers are used as a kind of cache. But if it is missing from an archive server, there is a danger that this film will be lost at all - as it can be removed from cache at any moment.
The main task of the whole system is to store new films and to provide existing ones to the client. Reacting for client's request is the core of the whole system. As mentioned previously, it was assumed, that disk space of video servers is not sufficient to store all data - only the tertiary storage device is large enough to keep them all. But a client cannot play it from an archive server directly and he cannot keep all he wants on video servers. So he has to make a reservation - he provides the time when he wants the film to be ready to play (i.e. copied on a video server) and hopes that the system will do everything possible to actually copy it there. And that is the point - the system must be able to distribute the resources in such a way that most needed films will be ready to play.
This task is performed by means of `priorities'. Each film
has a priority associated with it. When a client requests a
film at a specified time, the film becomes more important -
its priority grows up. The priority is increasing when the
time goes by. The maximum is reached, when the time for
playing is up. The system stores on video servers only
films with the highest priorities, those which are `most
wanted'. If it is no space for the film that has been
request on a video server, the file (files) with lower
priorities (less important) are removed from the video
server's file system and a new file is stored there. As the
priority of the file grows when the time of playing is up,
the probability of finding files with lower priorities, that
might be deleted, grows. Such a mechanism makes the
management of the files fully automatic.
Sometimes each
file on every server is important (has a high priority). It
happens when too many films have been requested and they
cannot be stored in a limited video server's file system
storage space. In such a situation there is no way to fulfill
a client's request. When it happens very often, attaching a
new video server to the system should be considered.
Each of the modules shown on the picture is responsible for various, separate system aspects:
All of the presented parts have been covered by a CORBA interface. In this way, the system becomes accessible for all environments, which are able to communicate using CORBA middleware. The system is able to communicate with clients written in Java, C, C++, Perl and many other programming languages, and presents all the advantages that CORBA introduces into distributed environments.
The CORBA interface that specifies the strict functionality of the server makes it easier to implement any client. It is worth repeating that a standard CORBA interface doesn't force any requirements upon any client - they can be developed using almost every programming language and so run on almost every platform.
As even the most perfect and useful server without any client is unusable for an end-user we have decided to develop a Java client in the current implementation of the system. The description how we can use it is described in The User guide.
The SVDA client is made up of two parts: the filesystem manager and the player.
The SVDA module implements methods required for interaction with the user. It is responsible for the visual part of the client and for providing the user with the easy to operate GUI. It forwards all user requests regarding filesystem contents to the ORB module which then communicates with the appropriate server.
![]() |
![]() |
Table of Contents |