Old projects/Image Store Requirements

This page lists the requirements for an image storage software (called 'the software') that we want to use to replace the current NFS-based approach.

The requirements:

Platform

 * The software must be open source.
 * We must have the right to change the software and distribute our changes.
 * The software must be runnable under Linux and BSD.
 * The software must provide a PHP interface library.
 * The software should be written in a reasonably well known language (e.g. C, C++, Perl, PHP, Ruby, ... but not brainfuck, OCAML, ...)
 * If the software requires additional tools to be installed, those must be open source also.
 * If the software requires a database, MySQL and (to a lesser extent) PostgreSQL are preferred.

Architecture

 * The software must be able to store images, to retrieve those images and to remove images from the storage.
 * Images will be referenced by a key generated by MediaWiki. The software must not require that MediaWiki stores keys generated by the software.
 * Images belong to certain storage categories. The software will provide ways to generate storage categories, to change the characteristics of storage categories and to remove storage categories.
 * The software has to provide features that make the image store highly available. The HA features can be in either the server part, the client library, or both of them.
 * The level of HA that has to be delivered is tunable by storage category. At least two levels have to be implemented:
 * No HA. The image is stored only once.
 * Mirroring. The software has to ensure that at any time at least two copies of the image exist.
 * The software must provide a way to group storage nodes (the computers that hold images) into locations (e.g. to reflect their placement in different datacenters).
 * If there are more than one locations defined, the software has to distribute images from mirrored storage categories to different locations.

Interface

 * The software must provide a PHP interface library. The library must be object-oriented. The software must work with PHP 4 version 4.3.11 and above, and should also work with PHP 5.0.4.
 * If the image is available from multiple locations, the software should point the user to the closest server. If needed, special DNS configurations may be used to achieve this.
 * The software must report the outage of any server or component. IRC- and email-based notifications are prefered (iNotif).
 * The software should provide an easy way to generate backup dumps of the images within one storage category. TAR-format is prefered.