kratos
https://github.com/bilibili/kratos
Kratos是bilibili开源的一套Go微服务框架,包含大量微服务相关框架及工具。
Features
HTTP Blademaster:核心基于gin进行模块化设计,简单易用、核心足够轻量;
GRPC Warden:基于官方gRPC开发,集成discovery服务发现,并融合P2C负载均衡;
Cache:优雅的接口化设计,非常方便的缓存序列化,推荐结合代理模式overlord;
Database:集成MySQL/HBase/TiDB,添加熔断保护和统计支持,可快速发现数据层压力;
Config:方便易用的paladin sdk,可配合远程配置中心,实现配置版本管理和更新;
Log:类似zap的field实现高性能日志库,并结合log-agent实现远程日志管理;
Trace:基于opentracing,集成了全链路trace支持(gRPC/HTTP/MySQL/Redis/Memcached);
Kratos Tool:工具链,可快速生成标准项目,或者通过Protobuf生成代码,非常便捷使用gRPC、HTTP、swagger文档;
要求:Go version>=1.12 and GO111MODULE=on
demo
kratos new是快速创建一个项目的命令
(1)kratos new kratos-demo -o YourName -d YourPath(kratos new默认是不会生成通过 protobuf 定义的grpc和bm示例代码的,如需生成请加–proto)
├── CHANGELOG.md # CHANGELOG
├── CONTRIBUTORS.md # CONTRIBUTORS
├── README.md # README
├── api # api目录为对外保留的proto文件及生成的pb.go文件,注:需要"--grpc"参数
│ ├── api.proto
│ ├── api.pb.go # 通过go generate生成的pb.go文件
│ └── generate.go
├── cmd # cmd目录为main所在
│ └── main.go # main.go
├── configs # configs为配置文件目录
│ ├── application.toml # 应用的自定义配置文件,可能是一些业务开关如:useABtest = true
│ ├── grpc.toml # grpc相关配置
│ ├── http.toml # http相关配置
│ ├── log.toml # log相关配置
│ ├── memcache.toml # memcache相关配置
│ ├── mysql.toml # mysql相关配置
│ └── redis.toml # redis相关配置
├── go.mod # go.mod
└── internal # internal为项目内部包,包括以下目录:
├── dao # dao层,用于数据库、cache、MQ、依赖某业务grpc|http等资源访问
│ └── dao.go
├── model # model层,用于声明业务结构体
│ └── model.go
├── server # server层,用于初始化grpc和http server
│ └── http # http层,用于初始化http server和声明handler
│ └── http.go
│ └── grpc # grpc层,用于初始化grpc server和定义method
│ └── grpc.go
└── service # service层,用于业务逻辑处理,且为方便http和grpc共用方法,建议入参和出参保持grpc风格,且使用pb文件生成代码
└── service.go
(2)Build & Run
cd kratos-demo/cmd
go build
./cmd -conf …/configs
(3)访问:http://localhost:8000/kratos-demo/start