A backend social media project using Kitex + Hertz + RPC + Kubernetes,supporting functionalities for publishing posts, adding comments, liking posts, and dynamically retrieving them in a feed-like manner
Using Kitex as micro services framework and Hertz as HTTP Api gateway(both open sourced by bytedance)
Using AWS S3 as object storage
Using rabbitmq as message queue
Using Docker and Kubernetes as deployment
| Service | Description | Techniques | Protocol | service registry |
|---|---|---|---|---|
| api | Routing HTTP request to RPC Services | Gorm Kitex Hertz |
http |
CoreDNS |
| user | User Management | JWT |
proto3 |
CoreDNS |
| relation | User Following Management | - | - | CoreDNS |
| feed | Posts Stream | - | - | CoreDNS |
| favorite | Favorite Management | - | - | CoreDNS |
| comment | Comment Management | rabbitmq |
- | CoreDNS |
| publish | Posts Publish Management | AWS S3 |
- | CoreDNS |
| dal | Data Access Layer | MySQL gorm |
- | CoreDNS |
| Directory | Sub Directory | Description | Remarks |
|---|---|---|---|
| cmd | api | api gateway | |
| comment | comment service | ||
| favorite | favorite service | ||
| feed | feed service | ||
| publish | publish service | ||
| relation | relation service | ||
| user | user service | ||
| config | Config file for services and infrastructure | ||
| dal | db | Including Gorm operations and initialization | |
| pack | Packing Gorm struct into RPC struct | ||
| idl | protobuf idl file | ||
| kitex_gen | Code generated by Kitex | ||
| util | mq | Message queue used in comment service(could be expanded to other services) | |
| errno | error code | ||
| jwt | Using SHA256 and BASE64 | ||
| oss | AWS S3 oss, compatible with minio | ||
| config | Viper Reading configurations | ||
| config | Config file for each service and infrasctructures | ||
| kubernetes | Kubernetes description yaml files | ||
| script | Shell Scripts for kubernetes deployment, setting up Kind cluster and executing some needed sql operations(not creating database or tables) | ||
| kubernetes | Shell files that create and deploy kubernetes cluster, building and loading images, etc |
go install github.com/swaggo/swag/cmd/swag@latest
Verify
swag --version
Init Api file
swag init -g cmd/api/main.go
Make sure you have installed Docker on your machine
Install Kind - Kubernetes IN Docker
For Mac
brew install kind
For Ubunut
sudo apt install kind
Verify Installation
kind --version
Grant executable permission to the .sh files
chmod -R +x script/*
Create Kubernetes Cluster
kind create cluster --config ./config/kubernetes/cluster-bloomblog.yaml
Verify creating cluster
kubectl cluster-info --context kind-bloomblog
You should see output like
Build Docker images
./script/kubernetes/build_images.sh
Loading images into Kubernetes cluster
./script/kubernetes/kind/load_images.sh
Deploy Infra(Mysql,Rabbitmq)
./script/kubernetes/deploy-infra.sh
Deploy Services
./script/kubernetes/deploy.sh
Start a kubernetes job
kubectl apply -f config/kubernetes/infra/jobs/add_casscade.yaml
Verify Deployment
Verify Pods
kubectl get pod
Verify Services
kubectl get service