đ sponge - Awesome Go Library for Distributed Systems
A distributed development framework that integrates automatic code generation, gin and grpc frameworks, base development frameworks.
Detailed Description of sponge
English | įŽäŊä¸æ
Sponge is a powerful development framework that integrates automatic code generation
, Gin and GRPC
. Sponge has a rich set of code generation commands, and the generated different functional codes can be combined into a complete service (similar to how artificially broken sponge cells can automatically reassemble into a new complete sponge). Sponge provides one-stop project development (code generation, development, testing, api documentation, deployment), it greatly improves development efficiency and reduces development difficulty, develop high-quality projects with a "low code approach".
Sponge Core Design Philosophy
Sponge's core design concept is to reversely generate modular code through SQL
or Protobuf
files. These codes can be flexibly and seamlessly combined into various types of backend services, thus greatly improving development efficiency and simplifying backend service development. Sponge's main goals are as follows:
- If you develop a web or gRPC service with only CRUD API, you don't need to write any go code to compile and deploy it to Linux servers, dockers, k8s, and you just need to connect to the database to automatically generate the complete backend service go code by sponge.
- If you develop general web, gRPC, http+gRPC, gRPC gateway services, you only need to focus on the three core parts of
define tables in the database
,define API description information in the protobuf file
, andfill in business logic code in the generated template file
, and other go codes (including CRUD api) are generated by sponge.
Sponge Generates the Code Framework
Sponge generation code is mainly based on SQL
and Protobuf
files, where SQL
supports database mysql , mongodb, postgresql, tidb, sqlite.
Generate Code Framework
Generate Code Framework Corresponding UI Interface
Microservice framework
Sponge is also a microservices framework, the framework diagram is shown below, which is a typical microservice hierarchical structure, with high performance, high scalability, contains commonly used service governance features, you can easily replace or add their own service governance features.
Performance testing of http and grpc service code created by the microservices framework: 50 concurrent, 1 million total requests.
Click to view the test code.
Key Features
- Web framework gin
- RPC framework grpc
- Configuration parsing viper
- Configuration center nacos
- Logging component zap
- Database ORM component gorm, mongo-go-driver
- Cache component go-redis, ristretto
- Automated API documentation swagger, protoc-gen-openapiv2
- Authentication jwt
- Websocket gorilla/websocket
- Crontab cron
- Message Queue rabbitmq, kafka
- Distributed Transaction Manager dtm
- Distributed lock dlock
- Parameter validation validator
- Adaptive rate limiting ratelimit
- Adaptive circuit breaking circuitbreaker
- Distributed Tracing opentelemetry
- Metrics monitoring prometheus, grafana
- Service registration and discovery etcd, consul, nacos
- Adaptive collecting profile
- Resource statistics gopsutil
- Code quality checking golangci-lint
- Continuous integration and deployment jenkins, docker, kubernetes
Project Code Directory Structure
The project code directory structure created by sponge follows the project-layout.
Here is the directory structure for the generated monolithic application single repository (monolith)
or microservice multi-repository (multi-repo)
code:
.
âââ api # Protobuf files and generated * pb.go directory
âââ assets # Store various static resources, such as images, markdown files, etc.
âââ cmd # Program entry directory
âââ configs # Directory for configuration files
âââ deployments # Bare metal, docker, k8s deployment script directory.
âââ docs # Directory for API interface Swagger documentation.
âââ internal # Directory for business logic code.
â âââ cache # Cache directory wrapped around business logic.
â âââ config # Directory for Go structure configuration files.
â âââ dao # Data access directory.
â âââ ecode # Directory for system error codes and custom business error codes.
â âââ handler # Directory for implementing HTTP business functionality (specific to web services).
â âââ model # Database model directory.
â âââ routers # HTTP routing directory.
â âââ rpcclient # Directory for client-side code that connects to grpc services.
â âââ server # Directory for creating services, including HTTP and grpc.
â âââ service # Directory for implementing grpc business functionality (specific to grpc services).
â âââ types # Directory for defining request and response parameter structures for HTTP.
âââ pkg # Directory for shared libraries.
âââ scripts # Directory for scripts.
âââ test # Directory for scripts required for testing services and test SQL.
âââ third_party # Directory for third-party protobuf files or external helper programs.
âââ Makefile # Develop, test, deploy related command sets .
âââ go.mod # Go module dependencies and version control file.
âââ go.sum # Go module dependencies key and checksum file.
Here is the directory structure for the generated microservice monolithic repository (mono-repo)
code (also known as large repository directory structure):
.
âââ api
â âââ server1 # Protobuf files and generated *pb.go directory for service 1.
â âââ server2 # Protobuf files and generated *pb.go directory for service 2.
â âââ server3 # Protobuf files and generated *pb.go directory for service 3.
â âââ ...
âââ server1 # Code directory for Service 1, it has a similar structure to the microservice multi repo directory.
âââ server2 # Code directory for Service 2, it has a similar structure to the microservice multi repo directory.
âââ server3 # Code directory for Service 3, it has a similar structure to the microservice multi repo directory.
âââ ...
âââ third_party # Third-party protobuf files.
âââ go.mod # Go module dependencies and version control file.
âââ go.sum # Go module dependencies' checksums and hash keys.
Quick start
Installation sponge
Sponge can be installed on Windows, macOS, Linux and Docker environments. Click here for instructions on installing sponge.
Starting UI service
After installing the sponge, start the UI service:
sponge run
Access http://localhost:24631
in a local browser and manipulate the generated code on the UI page.
If you want to access it on a cross-host browser, you need to specify the host ip or domain name when starting the UI, example
sponge run -a http://your_host_ip:24631
. It is also possible to start the UI service on docker to support cross-host access, Click for instructions on starting the sponge UI service in docker.
Sponge Development Documentation
Detailed step-by-step, configuration, deployment instructions for developing projects using sponge, Click here to view the sponge development documentation
Examples of use
Examples of create services
- Create web service based on sql (including CRUD)
- Create grpc service based on sql (including CRUD)
- Create web service based on protobuf
- Create grpc service based on protobuf
- Create grpc gateway service based on protobuf
- Create grpc+http service based on protobuf
Examples of develop complete project
Distributed transaction examples
If it's help to you, give it a star â.