Content Node
An Audius Content Node is a service that stores and maintains the availability of all content across the Audius network. Content types include user, track, and playlist metadata, images and artwork, and audio content.
The Content Node source code is hosted on GitHub and see the registered Content Nodes on the Audius Protocol Dashboard.
Design Goals
- Surface the Audius Storage Protocol for storing and serving images and audio
- Keep data consistently replicated and available
- Provide an interface to handle content upload, transcoding, and identification
- Allow users to maintain agency over where and how their data is stored amongst Content Nodes
The "Content Node" may be referred to as the "Creator Node". These services are the same.
Web Server
The Content Node core service is a web server with an HTTP API to process incoming requests and perform the following functions:
- user & track metadata upload
- user & track image upload
- user track file upload
- user & track data, metadata, and track file retrieval
The web server is a NodeJS Express app.
Persistent Storage
It stores all data in a PostgreSQL database and all images and metadata objects on its file system.
Pointers to all content and metadata stored on disk are persisted in the Postgres DB.
Postgres is managed in the codebase using the Sequelize ORM which includes migrations, models and validations
Redis
A Redis client is used for resource locking, request rate limiting, and limited caching and key storage.
Redis is managed in the codebase through the ioredis npm package
Track Segmenting
As defined by the Audius Whitepaper, the content node uses FFMPEG to segment & transcode all uploaded track files before storing/serving.
Data Redundancy
As defined by the Audius Whitepaper, all content is stored redundantly across multiple Nodes to maximize availability. This is all done automatically - every Node monitors every other Node in the network to ensure minimum redundancy of all data, transferring files as required.