项目作者: tal-tech

项目描述 :
Gaea is a Gin-based web framework, reference gin https://github.com/gin-gonic/gin
高级语言: Go
项目地址: git://github.com/tal-tech/gaea.git
创建时间: 2020-07-27T03:42:22Z
项目社区:https://github.com/tal-tech/gaea

开源协议:Apache License 2.0

下载


简介



Gaea Logo

Gaea是一基于Gin的Web框架。 在实际工作中,在将项目应用于生产环境之前,还需要解决一系列其他工程问题,
否则,系统的可移植性将很差,并且开发人员将无法专注于业务开发。
集成到一套完整的解决方案中:依赖关系管理,配置管理,编译和部署,监视和警报,并支持一键式快速构建Web应用程序。 如果您正在考虑用Golang编写Web服务器,那么Gaea无疑是您的最佳选择!

Document

Documentation

中文文档

安装

安装脚手架

通过 rigger脚手架可一键创建Gaea模板的api项目

生成框架

此处以”myproject”为项目名称

  1. $ rigger new api myproject
  2. 正克隆到 '/winshare/go/src/myproject'...
  3. myprojec项目已创建完成, 使用:
  4. cd /winshare/go/src/myproject && rigger build

编译

  1. //Will use makefile to compile and generate binary files to the bin directory
  2. $ cd gaea
  3. $ make

help

  1. $ ./bin/myproject --help
  2. Usage of ./bin/myproject:
  3. -c string
  4. 指定ini配置文件,以程序的二进制文件(myproject)为相对目录,正确的相对目录加载方式: -c ../conf/conf_xxx.ini 默认为加载 ../conf/conf.ini
  5. -p string
  6. 配置文件的前缀设置,用于以绝对路径形式加载,如 -c conf.ini -p /usr/pathto/myproject/conf
  7. -cfg string
  8. json config path (default "conf/config.json")
  9. -extended string
  10. 扩展参数,程序未定义使用用途,用户可自行处理
  11. -f foreground
  12. -m mock 开关
  13. -s string
  14. start or stop
  15. -usr1 string
  16. user defined flag -usr1
  17. -usr2 string
  18. user defined flag -usr2
  19. -usr3 string
  20. user defined flag -usr3
  21. -usr4 string
  22. user defined flag -usr4
  23. -usr5 string
  24. user defined flag -usr5
  25. -v version

Example

1.Config server port

  1. //conf/conf.ini
  2. [Server]
  3. ;Gin启动的模式,可选debug/release
  4. mode=debug
  5. ;http server 监听端口
  6. addr=:9898
  7. ;是否开启平滑重启
  8. grace=true
  9. readTimeout=3s
  10. writeTimeout=3s
  11. ;...

2.Add router

  1. //app/router/router.go is the file that manage all URI
  2. func RegisterRouter(router *gin.Engine) {
  3. entry := router.Group("/demo", middleware.PerfMiddleware(), middleware.XesLoggerMiddleware())
  4. entry.GET("/test", democontroller.GaeaDemo)
  5. }

4.Controller (mvc programming style)

  1. //app/router/
  2. func GaeaDemo(ctx *gin.Context) {
  3. goCtx := xesgin.TransferToContext(ctx)
  4. param := ctx.PostForm("param")
  5. ret, err := demoservice.DoFun(goCtx, param)
  6. if err != nil {
  7. resp := xesgin.Error(err)
  8. ctx.JSON(http.StatusOK, resp)
  9. } else {
  10. resp := xesgin.Success(ret)
  11. ctx.JSON(http.StatusOK, resp)
  12. }
  13. }

运行

  1. $ rigger start
  2. 2019/11/06 21:50:03 CONF INIT,path:../conf/conf.ini
  3. [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
  4. - using env: export GIN_MODE=release
  5. - using code: gin.SetMode(gin.ReleaseMode)
  6. [GIN-debug] GET /demo/test --> myproject/app/controller/democontroller.MyXesGoDemo (3 handlers)
  7. 2019/11/06 21:50:03 [overseer master] run
  8. 2019/11/06 21:50:04 [overseer master] starting /winshare/go/src/myproject/bin/myproject
  9. 2019/11/06 21:50:04 CONF INIT,path:../conf/conf.ini
  10. [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
  11. - using env: export GIN_MODE=release
  12. - using code: gin.SetMode(gin.ReleaseMode)
  13. [GIN-debug] GET /demo/test --> myproject/app/controller/democontroller.MyXesGoDemo (3 handlers)
  14. 2019/11/06 21:50:04 [overseer slave#1] run
  15. 2019/11/06 21:50:04 [overseer slave#1] start program

测试

  1. $ curl http://127.0.0.1:9898/demo/test
  2. {"code":0,"data":{"ret1":"Welcome to use myproject!"},"msg":"ok","stat":1}

至此,我们已经通过Gaea搭建了一个web服务!
接下来我们进一步学习Gaea 相关配置、特性、组件应用等主题

各大主流框架路由性能对比



Gaea Logo

(图片来自于网络)

Gaea性能压测

Gaea框架相比于原生Gin 影响性能的点其实是全部集中在中间件上,因为每次http请求都会跑一边,所以,观测下在各个中间开启时对整体性能的影响情况

压测条件

条件
系统 virtualbox 虚拟机上 centos7
内存 1GB
CPU 单核
请求数量 10万
并发数量 100
传输数据 {“code”:0,”data”:”hell world”,”msg”:”ok”,”stat”:1}

压测结果



Gaea Logo

从图中我们可以明显看出:

  • Gaea的默认配置会带来一定的性能耗损,大约30%
  • 其中Logger中间件在各个中间件影响性能比重最大,其它中间件几乎可以忽略不计

在实际项目应用中,当Logger 中间件是瓶颈点时,我们可以关闭它,毕竟请求日志在网关层也会记录!

此外,对日志库使用建议日志级别设定为WARNING

联系我们



Contact Us



(微信扫一扫,申请加入开发讨论微信群)