Hello! I’d like to share my first Nix-related project with you and kindly ask for your feedback.
Introduction
This project, currently named cache-server, was developed as part of my bachelor’s thesis at Brno University of Technology. It is a fork of a previous project which was also developed as a thesis by Marek Križan.
Problem Being Solved
The goal of the project is to offer a flexible and scalable cache management solution. It enables the creation of a network of interconnected cache servers with multiple cache instances, offering different storage options and distribution strategies. Currently, it supports only local and S3 storage, but it’s easy to extend to support more storage backends.
Also nix python package for OpenDHT library was created during development.
Key Features
- Uses OpenDHT for decentralized access to cache servers across multiple nodes.
- Supports the Cachix client for binary pushing, fetching and deploying.
- Supports local and S3 storage backends with optional storage strategies for distributing data across multiple storage instances.
- Simple YAML configuration with per-cache settings, supporting multiple cache instances on a single server.
Inspiration from Attic
The project was inspired by Attic.
Key differences in this implementation are:
- Support for distributed cache nodes
- Built-in Cachix compatibility
- YAML configuration for ease of use
How to Get Started
To try out the project, follow the installation instructions. Next, create the server configuration file using the examples provided in the README. Start the server to generate the authentication keys. After that, set up your Cachix client. It’s pretty straightforward, but if you encounter any issues, feel free to reach out!
Current Status
The project is functional but still has some bugs to work out. I know there’s a lot of room for improvement, and ongoing work is focused on stabilizing the system.
Feedback
As this project is part of my bachelor’s thesis, any feedback or suggestions you provide could contribute to both the development of the project and the content of my thesis. I would be grateful for your insights, as they may help shape the project. Feel free to share your thoughts, and if you see any areas for improvement, don’t hesitate to let me know!
Additionally, there is a section in the README that outlines the known limitations of the project, so take a look if you’re interested.
Contributions are welcome.
Thank you for checking out my project!