Cloud Native Store is a Go-based key-value store showcasing cloud-native patterns like transactional logging, data sharding, encryption, TLS, and circuit breakers. Built with hexagonal architecture for modularity and extensibility, it includes a robust API and in-memory storage for efficiency and stability.
The motivation behind Cloud Native Store is to provide a practical example of implementing a key-value store that adheres to cloud-native principles. The project aims to:
- Demonstrate best practices for building scalable, secure, and reliable cloud-native applications.
- Showcase the use of hexagonal architecture to enable modular and testable code.
- Offer a reference implementation for features like encryption, transactional logging, and stability mechanisms.
- Inspire developers to adopt cloud-native patterns in their projects.
Follow these steps to set up and run the Cloud Native Store:
- Create an encryption key by running the following command:
just genkey
- Create an
.env
file and replace the following values besidesHOME_PATH
with your own:
CLIENT_TIMEOUT="5s"
ENCRYPTION_KEY="0a0375de7bd186c2f8d80ef94e5f3d357462f594ca6785d4779f52bcb2b65b85"
GITHUB_CLIENT_ID=""
GITHUB_CLIENT_SECRET=""
GITHUB_REDIRECT_URL="http://localhost:8080/auth/callback"
GITHUB_SCOPE="user:read"
HOME_PATH="/ui"
PORT="8080"
SERVER_IDLE_TIMEOUT="5s"
SERVER_READ_HEADER_TIMEOUT="5s"
SERVER_READ_TIMEOUT="5s"
SERVER_WRITE_TIMEOUT="5s"
STORE_BREAKER_THRESHOLD="5"
STORE_DEBOUNCE_PER_SEC="10"
STORE_RETRY_DELAY="5s"
STORE_RETRY_MAX="3"
STORE_SHARDS="2"
STORE_TIMEOUT="5s"
To run unit tests:
just test
This will execute tests for the core service logic.
To start the service:
just run
After running the service, you can verify its health by visiting the UI in your browser: