FreeCar

FreeCar 是一个基于 Hertz 与 Kitex 的全栈微服务项目,欢迎 Star。

业务背景

FreeCar 的开发初衷是通过同享出行,处理新能源轿车充电时间长的问题,当轿车快要没电时能够进行轿车的更换防止因为没电导致行程延误。

关于 FreeCar 更多的信息可移步至 CyanAsterisk/FreeCar

Hertz

Hertz 是一个超大规模的企业级微服务 HTTP 结构,具有高易用性、易扩展、低时延等特色。

Hertz 默许运用自研的高性能网络库 Netpoll,在一些特殊场景中,相较于 go net,Hertz 在 QPS、时延上均具有必定优势。

在内部实践中,某些典型服务,如结构占比较高的服务、网关等服务,搬迁 Hertz 后比较 Gin 结构,资源运用显著削减,CPU 运用率随流量大小下降 30%—60%

关于 Hertz 更多的信息可移步至 cloudwego/hertz

技能栈

功能 实现
HTTP 结构 Hertz
RPC 结构 Kitex
数据库 MongoDB、MySQL
装备中心 Nacos
服务发现中心 Nacos
音讯队列 RabbitMQ
链路追寻 Jaeger
集群监控 Prometheus
限流中间件 hertz-contrib/limiter
布置 docker-compose
目标存储 腾讯云 COS
CI GitHub Actions

项目架构

调用关系

基于 Hertz 和 Kitex 的 Go 微服务项目 | 开源项目推荐

技能架构

基于 Hertz 和 Kitex 的 Go 微服务项目 | 开源项目推荐

服务关系

基于 Hertz 和 Kitex 的 Go 微服务项目 | 开源项目推荐

页面展示

基于 Hertz 和 Kitex 的 Go 微服务项目 | 开源项目推荐

目录介绍

目录 介绍
Server 项目中心部分
Shared 可复用代码
Static 微信小程序代码

服务介绍

目录 介绍
API 基于 Hertz 的 API 服务
Auth 用户认证服务
Blob 与图片和腾讯云 COS 相关的服务
Car 轿车服务
Profile 主页与图片识别服务
Trip 行程服务

快速开端

发动基础环境

make start

装备 Nacos

在浏览器上拜访 http://127.0.0.1:8848/nacos/index.html#/login 进行登录。

默许命名空间以及装备组等请参阅各个 config.yaml 装备文件。

基于 Hertz 和 Kitex 的 Go 微服务项目 | 开源项目推荐
基于 Hertz 和 Kitex 的 Go 微服务项目 | 开源项目推荐

关于装备中心的具体装备,详见。

生成数据表

make migrate

发动 HTTP 服务

make api

发动微服务

make auth
make blob
make car
make profile
make trip

Jaeger

在浏览器上拜访 http://127.0.0.1:16686/

基于 Hertz 和 Kitex 的 Go 微服务项目 | 开源项目推荐

Prometheus

在浏览器上拜访 http://127.0.0.1:3000/

基于 Hertz 和 Kitex 的 Go 微服务项目 | 开源项目推荐

API 恳求

项目的 API 恳求示例详见。

开发攻略

通过直接阅览源码来了解此项目是非常困难的,在此供给开发攻略方便开发者快速了解并上手此项目包含 Kitex、Hertz 等结构。

前置预备

通过快速开端中的命令快速发动所需的东西与环境,若需求特殊定制请修正 docker-compose.yaml 与 Nacos 装备中的内容。

IDL

在开发之前咱们需求界说好 IDL 文件,其间 hz 为开发者供给了许多定制化的 api 注解。

示例代码:

namespace go auth
struct LoginRequest {
    1: string code
}
struct LoginResponse {
    1: i64 accountID
}
service AuthService {
    LoginResponse Login(1: LoginRequest req)
}

代码生成

Kitex

在新增服务目录下履行,每次仅需更改服务名与 IDL 途径。

服务端
kitex -service auth -module github.com/CyanAsterisk/FreeCar ./../../idl/auth.thrift
客户端
kitex -module github.com/CyanAsterisk/FreeCar ./../../idl/auth.thrift

注意项:

  • -module github.com/CyanAsterisk/FreeCar 该参数用于指定生成代码所属的 Go 模块,防止途径问题。
  • 当时服务需求调用其他服务时需生成客户端文件。

Hertz

初始化
hz new -idl ./../../idl/api.proto -mod github.com/CyanAsterisk/FreeCar/server/cmd/api
更新
hz update -I -idl ./../../idl/api.proto

注意项:

  • -module github.com/CyanAsterisk/FreeCar/server/cmd/api 该参数用于指定生成代码所属的 Go 模块,防止途径问题。

业务开发

在代码生成完毕后需求先将一些必须组件增加到项目中。由于 api 层不用再次增加,因而以下主要讲解关于 Kitex-Server 部分,代码坐落 server/cmd 下。

Config

参阅 server/cmd/auth/config,为微服务的装备结构体。

Global

参阅 server/cmd/auth/global,为微服务供给可大局调用的办法。

Initialize

参阅 server/cmd/auth/initialize,供给必要组件的初始化功能,其间 nacos.go flag.go logger.go 为必须项。

Tool

参阅 server/cmd/auth/tool,供给微服务的东西函数,其间 port.go 为必须项。

API

在写网关层的业务逻辑时,仅需求每次更新 IDL 与新的微服务客户端代码,若需求增加新的组件直接增加即可,项目高度可拔插,架构与微服务层类似。

网关层的业务逻辑在 server/cmd/api/biz 下,大部分代码会自动生成。若需求独自新增路由需求到 server/cmd/api/router.go 中。

关于中间件的运用,只需求在 server/cmd/api/biz/router/api/middleware.go 中增加中间件逻辑即可。

许可证

FreeCar 在 GNU General Public 许可证 3.0 版下开源。

总结

这个项目仍是花费的不少时间,欢迎咱们学习,假如 Star 是对咱们最大的鼓励!

参阅

  • CyanAsterisk/FreeCar
  • cloudwego/hertz
  • cloudwego/kitex