Old projects/Image Store Requirements

This got implemented and merged in trunk by Tim Starling in 2007

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.