From The Open Source Backup Wiki (Amanda, MySQL Backup, BackupPC)
The transfer architecture arises from a simple observation about Amanda: its core job is to move data around. Amanda has the Application API, which handles getting data from clients (and returning it on restores); and the Device API, which handles long-term storage of data. The transfer architecture (abbreviated XFA) connects these two APIs.
At a high level, the XFA is simple. It manages transfers, which are composed of transfer elements. A transfer has a source element, which produces data, a destination element, which consumes it, and zero or more filters, which transform the data that passes through them. Elements send messages to indicate the status of a transfer and record information like index offsets. It is similar to GStreamer, but optimized for Amanda's needs rather than those of media streaming applications.
The transfer architecture has the following benefits:
- Transfer elements are connected in a maximally efficient manner
- New elements are easy to add, to support new encryption algorithms, compression utilities, compression offloading, etc.
- DRY-compliant -- the same code is used in all data transfers, so it is better-tested and error messages are predictable
- XFA/Data Handling Model -- how data flows through a transfer, and how that is accounted for in indices.
For a full list of available elements and their use, see Amanda::Xfer. The most authoritative source for the architecture, particularly regarding implementation details, is the source itself - see xfer-src/ in the source distribution.