This project provides an implementation of a backend for an Instant Messaging (IM) system, developed in the Rust programming language, with a microservice architecture design. Its primary goal is to offer developers an efficient, stable, and scalable IM solution. The focus of this project is to explore and demonstrate the potential and practices of Rust in building high-performance backend services.

Service Layer
Authentication Service: Handles user registration, login, and verification.
Group Service: Takes care of group creation, message broadcasting, and member management.
Data Storage Layer
PostgreSQL: Storing user information, friendship relations, and message history, along with automated archival through scheduled tasks.
MongoDB: Acts as a message inbox, handling offline message storage and retrieval with hybrid sharding strategy.
Middleware Layer
Kafka: Provides a high-throughput message queue to decouple services.
Redis: Implements caching and maintains message status to optimize database load.
Infrastructure Layer
Docker and Docker-Compose: Containers for building and deploying services.
The project is designed with high performance and horizontal scalability in mind. Through asynchronous processing and a microservice architecture, the system is capable of scaling effectively by increasing the number of service instances in response to the growing load. Additionally, the project adopts a modular design philosophy that allows developers to customize or replace modules as needed.
The MongoDB message storage uses a hybrid sharding strategy that combines time-based and user ID-based sharding to improve performance significantly:
librdkafkaUbuntu:
shell
apt install librdkafka-dev
Windows:
shell
# install vcpkg
git clone https://github.com/microsoft/vcpkg
cd vcpkg
.\bootstrap-vcpkg.bat
# Install librdkafka
vcpkg install librdkafka
.\vcpkg integrate install
shell
docker-compose up -d
Important: Make sure all third-party services are running in Docker.
shell
cargo install sqlx-cli
sqlx migrate run
shell
git clone https://github.com/Xu-Mj/sandcat-backend.git
cd sandcat-backend
Build
Linux: Use the static feature
shell
cargo build --release --features=static --no-default-features
Windows: Use the dynamic feature
shell
cargo build --release --features=dynamic
Copy the binary file to root path
shell
cp target/release/cmd ./sandcat
shell
./sandcat
If you need to adjust configurations, please modify config.yml. For MongoDB sharding configuration, ensure the following settings are in your config:
yaml
db:
mongodb:
# ... other MongoDB settings ...
use_sharding: true
user_shards: 10 # Adjust based on your needs
Important: Given that our working environments may differ, should you encounter any errors during your deployment, please do let me know. Together, we'll work towards finding a solution.
We follow Trunk's Contribution Guidelines. They are doing a great job.
Anyone and everyone is welcome to contribute! Please review the CONTRIBUTING.md document for more details. The best way to get started is to find an open issue, and then start hacking on implementing it. Letting other folks know that you are working on it, and sharing progress is a great approach. Open pull requests early and often, and please use GitHub's draft pull request feature.
sandcat is licensed under the terms of the MIT License.
$ claude mcp add sandcat-backend \
-- python -m otcore.mcp_server <graph>