云原生微服务框架示例
1 简介
Kratos(go-kratos)框架定位 / 优势:一个由社区(及厂商)推动的“云原生微服务框架”,强调 Protobuf/codegen + gRPC + 配置/中台能力,有项目模板、网关等生态,适合企业内规范化开发。

go-kratos 是 Bilibili 开源、社区持续维护的 云原生微服务框架,目标是:
“让 Go 更高效地构建可观测、可治理的分布式系统。”
主要面向:
中大型企业 的 微服务体系
强调 一致性、标准化、工程模板化
注重 IDL(protobuf)驱动开发 与 生成代码(codegen)
原生支持 gRPC + HTTP + Service Discovery + Config Center + Tracing
2 常用配套
Web / RPC:Kratos 强调 gRPC/HTTP 的代码生成与中间件,官方 repo 有 layout/template、gateway 等示例。
队列 / 数据处理:Kratos 推荐把消息层(Kafka / NATS / RabbitMQ 等)作为独立组件,官方/社区有相关示例(通常通过 consumer/producer 集成)。(队列库见 NATS/Kafka/NSQ 链接)
AI-CV:同上,Kratos 可把 CV 推理封装为服务(例如把 GoCV 或 C++ 推理二进制以 gRPC 暴露)。
LLM:Kratos 项目里出现越来越多将 LLM/Agent 集成的例子(如 Kratos 组织下也有 blades 等 AI 相关项目),便于把模型能力以服务暴露并做治理。
-
核心优势与特性:
特性 说 明 🧩 Protobuf-first 开发模式 使用 .proto 定义服务与消息,通过 kratos proto client/server 自动生成接口与骨架代码。 ⚙️ 多协议支持 同时支持 gRPC 与 HTTP(通过 HTTP Annotation),可无缝导出 RESTful 接口。 ☁️ 云原生友好 内建服务注册、配置中心、链路追踪(OpenTelemetry)、中间件机制。 🧱 强工程化 提供 kratos new 模板,统一目录结构(cmd、internal、api、configs)。 🔗 生态完善 包含网关、熔断限流、配置中心、日志等模块,适合企业统一接入。
3 典型应用场景
场景 说明
微服务后台系统 多服务间 RPC 通信(gRPC),API Gateway 对外暴露 HTTP。
企业内部平台 配置中心统一管理配置(Apollo、Nacos、Etcd)。
云原生部署 支持 Kubernetes 服务发现与容器化。
与 Gin 混合使用 用 Kratos 管理服务生命周期、配置、治理,用 Gin 做 HTTP 路由处理。
- Kratos 与 Gin 配合使用方式
场景说明
虽然 Kratos 本身自带 HTTP 服务器(基于 net/http 封装),
但有时企业或开发者更喜欢用 Gin 来处理 REST API(更灵活的中间件和路由)。
思路:
使用 Kratos 管理应用生命周期(启动、配置、服务发现、日志)。
使用 Gin 作为 HTTP Server,由 Kratos 的 transport/http 注册启动。
让 Gin 路由注册到 Kratos 的 HTTP 服务中。
4 服务使用示例:
package main
import (
"context"
"net/http"
"github.com/go-kratos/kratos/v2"
"github.com/go-kratos/kratos/v2/transport/http"
"github.com/gin-gonic/gin"
)
// 定义一个简单的 handler
func registerGinRoutes(engine *gin.Engine) {
engine.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "pong",
})
})
engine.GET("/hello/:name", func(c *gin.Context) {
name := c.Param("name")
c.JSON(http.StatusOK, gin.H{
"hello": name,
})
})
}
func main() {
// 初始化 gin
ginEngine := gin.Default()
registerGinRoutes(ginEngine)
// 用 kratos 封装 HTTP Server
httpSrv := http.NewServer(
http.Address(":8000"),
http.Handler(ginEngine), // 关键点:直接用 Gin engine 作为 Handler
)
// 创建 kratos 应用
app := kratos.New(
kratos.Name("demo.service"),
kratos.Server(httpSrv),
)
// 启动服务
if err := app.Run(); err != nil {
panic(err)
}
}
运行
$ go run main.go
INFO msg=server start address=:8000
访问服务
GET http://localhost:8000/ping
→ {"message":"pong"}
GET http://localhost:8000/hello/kratos
→ {"hello":"kratos"}
可以通过 Kratos 的配置中心(如 Apollo、Etcd)管理 Gin 的配置;
结合 kratos/config 加载动态配置;
将 Gin 路由包裹为 Kratos middleware;
支持 Prometheus metrics 与 OpenTelemetry tracing。
5 小结
项目 优 势 适合场景
Go-Kratos 工程规范、gRPC-first、可观测性强 微服务体系、大中型企业、云原生部署
Gin 高性能、轻量、路由灵活 快速 REST API、网关层
组合方案 Kratos 管理治理 + Gin 处理 HTTP 企业混合架构(治理 + 快速业务开发)
优点:偏“约定优于配置”,对 Protobuf/gRPC、codegen、项目模板、服务治理(config、metric、tracing)有比较完善的支持;对中文社区友好、文档和样板较多。
对比:比 go-kit 抽象更高、更规范化;比 go-micro 更偏 codegen/gRPC 的约定式开发而非插件化运行时。
- 点赞
- 收藏
- 关注作者
评论(0)