FreeCar
FreeCar is a full-stack microservice project based on Hertz and Kitex, welcome Star.
Project address: CyanAsterisk/FreeCar
Hertz
Hertz is an ultra-large-scale enterprise-level microservice HTTP framework, featuring high ease of use, easy expansion, and low latency etc.
Hertz uses the self-developed high-performance network library Netpoll by default. In some special scenarios, Hertz has certain advantages in QPS and latency compared to go net.
In internal practice, some typical services, such as services with a high proportion of frameworks, gateways and other services, after migrating Hertz, compared to the Gin framework, the resource usage is significantly reduced, CPU usage is reduced by 30%-60% with the size of the traffic.
For more details, see cloudwego/hertz.
technology stack
Function | Implementation |
---|---|
HTTP Framework | Hertz |
RPC Framework | Kitex |
Database | MongoDB, MySQL |
Configuration Center | Nacos |
Service Discovery Center | Nacos |
Message Queue | RabbitMQ |
Link Tracking | Jaeger |
Cluster Monitoring | Prometheus |
Current limiting middleware | hertz-contrib/limiter |
Deployment | docker-compose |
Object Storage | Tencent Cloud COS |
CI | GitHub Actions |
Project Architecture
Call relationship
Technology Architecture
Service Relationship
Display
Directory Introduction
Catalog | Introduction |
---|---|
Server | Core part of the project |
Shared | Reusable Code |
Static | WeChat applet code |
Service Introduce
Catalog | Introduce |
---|---|
API | Hertz-based Gateway Service |
Auth | User Authentication Service |
Blob | Services Related to Pictures and Tencent Cloud COS |
Car | Car Service |
Profile | Profile and Picture Recognition Services |
Trip | Trip Service |
Quick Start
Start dependence
make start
Configure Nacos
Access
http://127.0.0.1:8848/nacos/index.html#/login
on the browser to log in.For the default namespace and configuration groups, please refer to each
config.yaml
configuration file.
For detailed configuration of the configuration center, see.
Generate data table
make migrate
Start HTTP service
make api
Start the microservice
make auth
make blobs
make a car
make profile
make a trip
Jaeger
Visit
http://127.0.0.1:16686/
on your browser
Prometheus
Visit
http://127.0.0.1:3000/
on your browser
API requests
The project's API request example see details.
Development Guide
It is very difficult to understand this project by directly reading the source code. Here is a development guide for developers to quickly understand and get started with this project, including frameworks such as Kitex and Hertz.
Preparation
Use the commands in the quick start to quickly start the required tools and environment. If you need special customization, please modify the contents of docker-compose.yaml
and Nacos configuration.
IDL
Before development, we need to define the IDL file, where hz
Provides developers with many customized api annotations.
Sample code:
namespace go auth
struct LoginRequest {
1: string code
}
struct LoginResponse {
1: i64 accountID
}
service AuthService {
LoginResponse Login(1: LoginRequest req)
}
Code Generation
Kitex
Execute under the new service directory, only need to change the service name and IDL path each time.
Server
kitex -service auth -module github.com/CyanAsterisk/FreeCar ./../../idl/auth.thrift
client
kitex -module github.com/CyanAsterisk/FreeCar ./../../idl/auth.thrift
Note:
- Use
-module github.com/CyanAsterisk/FreeCar
This parameter is used to specify the Go module to which the generated code belongs to avoid path problems. - When the current service needs to call other services, a client file needs to be generated.
Hertz
Initialization
hz new -idl ./../../idl/api.proto -mod github.com/CyanAsterisk/FreeCar/server/cmd/api
renew
hz update -I -idl ./../../idl/api.proto
Note:
- Use
-module github.com/CyanAsterisk/FreeCar/server/cmd/api
This parameter is used to specify the Go module to which the generated code belongs to avoid path problems.
Business Development
After the code is generated, some necessary components need to be added to the project. Since the api layer does not need to be added again, the following mainly explains about Kitex-Server
section, the code is located under server/cmd
.
Config
Refer to server/cmd/auth/config
for the configuration structure of microservices.
Global
Refer to server/cmd/auth/global
to provide globally callable methods for microservices.
Initialize
Refer to server/cmd/auth/initialize
to provide the initialization function of the necessary components, among which nacos.go
flag.go
logger.go
are required.
Tool
Refer to server/cmd/auth/tool
to provide tool functions for microservices, where port.go
is required.
API
When writing the business logic of the gateway layer, you only need to update the IDL and the new microservice client code each time. If you need to add new components, you can add them directly. The project is highly pluggable, and the architecture is similar to the microservice layer.
The business logic of the gateway layer is under server/cmd/api/biz
, and most of the code will be automatically generated. If you need to add a new route separately, you need to go to server/cmd/api/router.go
.
Regarding the use of middleware, you only need to add middleware logic in server/cmd/api/biz/router/api/middleware.go
.
License
FreeCar is open source under the GNU General Public License version 3.0.
Summarize
This project still takes a lot of time, everyone is welcome to learn, if Star is our greatest encouragement!
Top comments (0)