Go 语言通用开发框架 -Ngo 开源啦
网易传媒在 2020 年底开始尝试使用 Go 语言做业务开发,并在 2021 年使用 Go 语言重构核心业务,目前超过一半的业务都已经重构为 Go 语言,并在线上提供服务。
1、为什么要用 Go 语言
Go 语言于 2009 年 11 月正式宣布推出,它是 Google 开发的一种静态强类型、编译型、并发型、并具有垃圾回收功能的编程语言,它的特性包括:
编译速度快
语法简单
像动态语言一样开发
资源消耗少
为并发 IO 而生
可运维性好
与 C/C++兼容
统一而完备的工具集
网易传媒的主要开发语言是 Java,在业务全部接入容器后,在线业务也面临着以下一些问题:
在线业务内存使用量偏高:传媒主要开发语言是 Java,使用 SpringBoot 框架,最少使用 2G 内存,普遍内存使用量都在 4G 以上,还有 8G、16G、32G 等内存使用的应用。
在线业务编译速度和启动速度偏慢:使用 maven 编译、打包、打镜像、传镜像都比较耗时,拖慢了整个 CI 的流程。
占用空间较大:由于使用 Java,JVM 在镜像实例都需要上百兆(400M 以上)的空间,拉取,上传都比较耗时。
网易传媒于 2020 年将核心业务全部迁入容器,在容器和微服务的大背景下,应用的小而快显得就格外的重要,Go 语言就比较适合于我们的需求,目前已经有很多互联网厂商都在积极推进 Go 语言的应用,于是,网易传媒在 2020 年底开始尝试 Go 语言的探索,并在 2021 年使用 Go 语言重构核心业务,目前超过一半的业务都已经重构为 Go 语言,并在线上提供服务。
2、Ngo 是什么
在传媒技术团队中推广 Go 语言,亟需一个 Web 框架提供给业务开发同事使用,内含业务开发常用库,避免重复造轮子影响效率,并且需要无感知的自动监控数据上报,能在框架层面支持业务的优雅上下线、对云原生监控的支持等,于是就孕育出 ngo 框架。
由于 Go 的开源 Web 框架没有类似 Spring Boot 大而全的,而最大的框架也是很受用户欢迎的框架是 Beego,为什么没有直接使用 Beego 呢?主要有以下几个原因:
HTTP Server 的性能不理想
缺乏大量业务所需库,比如 kafka、redis、rpc、分布式锁等,如果在其基础上开发不如从零选择更适合的库
大部分库无法注入回调函数
若干模块如 ORM 不够好用
基于以上的原因,传媒内部孕育出了 ngo 框架,主要目标如下:
提供比原有 Java 框架更高的性能和更低的资源占用率
尽量为业务开发者提供所需的全部工具库
嵌入云原生监控,自动上传监控数据
嵌入全链路监控,提供标准的 opentracering 协议,和第三方的全链路监控系统结合(Jaeger、Zipkin)
自动加载配置和初始化程序环境,开发者能直接使用各种库
与线上的健康检查、运维接口等运行环境匹配,无需用户手动开发配置
ngo 避免重复造轮子,所有模块都是在多个开源库中对比并挑选其一,然后增加部分必需功能,整个架构如下图所示:
Ngo 框架为业务选择并包装了用到的中间件和基础服务,让业务可以快速的进入到业务开发的阶段,省去了研究和比较一些基础组件的时间,大大节省了业务的开发周期。
3、快速开始
让我们从一个最简单的 HelloWorld 开始 Ngo 之旅吧
首先,将代码从 github 上 clone 下来
其次,进入 sample 目录
查看代码如下:
查看 yaml 配置如下:
运行以下命令,最简单的服务便启动了
So Cool!更多示例,我们可以进入 examples 目录查看。
版权声明: 本文为 InfoQ 作者【雷霆】的原创文章。
原文链接:【http://xie.infoq.cn/article/29d94ee8a9d90910e3d310be6】。文章转载请联系作者。
评论