Trellis is a linked data server that can be used for storing large volumes of content, particularly in cases where that content is stored for years and decades.
Trellis has been built on components that already support horizontal scalability: Kafka, Zookeeper and Spark. While it is possible to run Trellis on a single machine, scaling out across a cluster is well-defined and supported. Trellis is "eventually consistent", meaning that many operations run asynchronously. While this makes the system very responsive, it also means that clients cannot expect operations to be atomic. In general, per-resource operations are atomic; operations that cause other resources to change are handled asynchronously.
Data integrity is vitally important for content that is stored for years and decades. Trellis makes it possible to retrieve the state of any resource at any, arbitrary point in time. This also means that nothing is ever truly deleted. For every operation that changes a resource, there is a full audit log available through standard LDP mechanisms. This audit log lists who made what change and when that change was made.
The overall code base for Trellis is small, and it is divided up into even smaller modules each of which can be maintained independently. This simplifies maintenance and it also makes it easy to customize individual components as needed. Trellis has also been designed to fully support OSGi deployment.
Because Trellis is built on top of LDP, clients that interact with it tend to use a lot of RDF (e.g. JSON-LD). Trellis enforces only a very minimal set of restrictions on what RDF is allowable: basically, if LDP prohibits it, Trellis does not allow it; otherwise, pretty much anything goes. You can use any RDF vocabulary; you can store binaries of any type. Any special handling of particular content types needs to be handled in another layer of your software stack.
There are a lot of standards in existence. Trellis has selected to conform to a collection of well-defined and broadly used specifications because doing so provides a solid and well-understood foundation for interacting with the software. This also makes the Trellis API stable and consistent.
Any time a resource is created, modified or deleted, a notification is made available, making it easy to use an integration framework to connect Trellis to external applications. The notifications provide enough information to make informed routing decisions without being too heavy.
Trellis is an HTTP/1.1 server designed to comply with the following specifications:
- W3C LDP Server
- W3C Activity Streams
- W3C WebSub Publisher
- RFC 7089 (HTTP Framework for Time-Based Access to Resource States -- Memento)
- RFC 3230 (Instance Digests in HTTP)
- Solid WebAC (Authorization and Access Control)
All source code is open and licensed as Apache 2. Contributions are welcome. Project source code and additional information is available on github.com at trellis-ldp/trellis. Trellis is written primarily in Java.