咨询热线

400-820-5820

加入我们

免费下载

请填写以下信息获取免费下载资源

  • 公司名称

    *
  • 姓名

    *
  • 职务

    *
  • 电子邮箱

    *
  • 手机

    *
  • 验证码

    获取验证码
  • 公司名称

    *
  • 姓名

    *
  • 职务

    *
  • 电子邮箱

    *
  • 手机

    *
  • 验证码

    获取验证码

留言反馈

请填写以下信息反馈问题或建议

  • 公司名称

    *
  • 姓名

    *
  • 职务

  • 电子邮箱

    *
  • 手机

    *
  • 反馈内容

  • 验证码

    获取验证码
2025-12-29
15

容器云语言选型调研

调研背景与现状

在容器化和云原生技术迅速发展的背景下,需要自研一款容器云作为公司内部使用和外部自研产品投入市场,在此基础上需要进一步调研技术选型的开发语言,目前在Java语言和go语言做进一步选择。

容器云开发主流的开发语言是go语言,作为云原生开发的首选语言,go语言在云原生开发具有优势,但是根据目前的现状和语言规模以及公司人力分配的考虑,java语言也可以作为容器云开发的语言,对于开发语言的选择有以下两个方面的不同意见:


选Java:

优势: Java语言公司人力充足,技术生态完善,对于k8s的操作有对应的kubernetes-client的JavaSDK,初步考虑能实现容器云第一阶段的建设目标。

劣势: java语言不是云原生开发主流语言,后期如果跟k8s高度集成的定制功能开发,可能会事倍功半。


选go:

优势:go语言作为云原生的主流语言,已经有对应的容器云平台例如k8s dashboard等使用go语言作为开发,可以进一步借鉴使用。

劣势:go语言公司目前人力薄弱,go语言的web相关开发框架目前不springboot等生态简单,go语言的学习成本的时间投入,开发周期等都会拉长。go语言的经验不足导致的踩坑频率,代码可维护性等表现都不如Java。

针对上述的争议,开启两种语言的调研过程。

语⾔规模以及开源主流的容器云产品或SDK的开发语⾔

SlashData,一家领先的开发者研究公司,发布了第26Developer Nation调查的初步结果。结果如下:


本次调查收集了来自135个国家的超过一万名开发者的反馈,揭示了开发者社区的最新趋势,特别是在编程语言及其不断壮大的开发者社区方面。通过此处的调研可以发现,go语言确实拥有很强势的发展势头,但是java仍然是老大哥的存在,暂居第三,毫无疑问,java语言的热度在2024年未减。同时,一个语言的热度也相应的反应出语言的生态,生态强大的语言在整个开发的周期中能得到更稳定的解决方案。这也给java作为容器云开发做了一定支撑。

 

容器云相关的产品和SDK整理:

容器云产品

开发语言

源码

Kubernetes Dashboard

go

https://github.com/kubernetes/dashboard.git

Rancher

go

https://gitee.com/rancher/rancher.git

KubeSphere

go

https://github.com/kubesphere/kubesphere.git

KubeOperator

go

https://github.com/KubeOperator/KubeOperator.git

kubecube

go

https://github.com/kubecube-io/KubeCube.git

Fabric8 kubernetes-clientSDK

Java

https://github.com/fabric8io/kubernetes-client.git

kubernetes-client/javaSDK

Java

https://github.com/kubernetes-client/java.git


通过以上的整理,发现go语言开发的容器云相关的产品占有很大的市场,也证明了go语言确实是云原生开发的主流语言,但是java也拥有开发容器云等云原生产品的能力,我们可以依赖Fabric8 kubernetes-clientSDK),kubernetes-client/javaSDK)等两个开源的SDK来实现k8s的管理,也能达到实现类似Kubernetes DashboardKubeSphere等容器云相关产品类似的效果。所以java作为开发容器云的路可以继续探。

语⾔的学习成本

针对选型的两种语言,javago目前各有优势,不同语言有不同的优势,所以此时应该从语言的学习成本考虑,容器云作为一个新的产品,在开发此类产品的开发人员缺少不了一个学习的过程,根据目前的人力现状,公司的人力主要是java开发者,所以整个学习的成本也将以一个java开发者参与容器云开发的角度进行分析,通过这个角度分析一下java语言选型和go语言选型的学习成本也能作为语言选择的最终考量做数据支撑,以下针对java语言和go语言的学习成本结合实际情况分析:

Go语言的学习成本

站在一个开发者的角度,参与容器云平台的开发,首先对应语言的基础语法来说,不会是一个难点,如基本的数据类型,变量,常量,运算符,条件语句,循环语句,函数,变量作用域,数组,接口等各类语言类似的基本语言的操作学习上手会是很快的过程,针对整个学习路径,更多的是分析go语言在Web话开发,微服务开发,以及容器云开发需要对接k8s等方面做分析,主要考虑到以下这些点,如作为Web开发的框架,Web开发过程需要用的关系型数据库,此时考虑的对象关系映射ORM框架,以及工程中必须要的日志框架,还有整个开发不会是从0开始,我们需要脚手架的支持,此时也需要去了解go开发的一些脚手架,当然开发工具的学习也是整个学习的一个环境,功欲善其事,必先利其器,熟悉一个开发工具对应整个开发过程也是不可少的一个环境。整个学习后需要还得考虑go语言如何做工程化,以及如何学习容器k8s相关sdk。针对以上的点,一一列举学习的内容的点,为学习的评估做参考:

Web框架的学习:

框架

性能

功能丰富度

学习曲线

适用场景

使用的项目

Gin

很高

简单,快速开发

很容易上手

高性能 API,微服务架构

Rue-go

Echo

丰富,灵活

容易上手

APIWeb 应用,微服务


Beego

中等

很丰富,全栈

较陡峭

企业级应用,全栈开发


Iris

丰富,强大

中等

Web 应用,实时应用

KubeOperator

Buffalo

中等

非常丰富,全栈

中等

快速开发,原型设计,Web 应用


go-restful

中等

简单,专注于 API

容易上手

构建 RESTful API 服务,API 文档支

Dashboard KubeSphere

以上整理go语言Web开的一些框架,当go语言作为容器云开发的主要语言的时候,我们将熟悉以上的Web开发框架,了解不同的框架的优劣同时才能做出合理的框架选择,当然Web框架的常规建议也能从网上找到,以下做简单整理:

·  性能要求高Gin Echo 是首选,尤其是 Gin 性能更突出。

·  全栈开发Beego Buffalo 提供了完整的框架支持,适合更复杂的 Web 应用开发。

·  快速 API 开发go-restful 是轻量级的框架,专注于构建 RESTfulAPI

·  多功能需求Iris 提供了较多的内置功能,适合需要多样化需求的项目


对象关系映射(ORM)框架

特性

GORM

XORM

Gorp

Beego ORM

性能

性能较高,但较重

性能较好,简单查询更优

极高性能,轻量级

中等性能,适合 Beego 框架使用

功能

全功能,支持自动迁移、预加载、事务

支持简单的 ORM 功能,简洁

提供基本的 ORM 功能,控制权高

基础功能,自动迁移,简单查询

学习曲线

较平缓,但功能丰富

简单易用,学习曲线短

需要手动映射,学习曲线较陡

简单,尤其与 Beego 框架配合使用时

灵活性

高,支持复杂查询和模型关联

比较灵活,但不如 GORM 丰富

非常灵活,但缺少自动化功能

较低,适合简单需求

适用场景

企业级应用,高级功能需求

中小型项目,简单高效的数据库操作

性能要求高,自定义查询,简单项目

Beego 框架中的 Web 应用,简单需求

以上从网上整理了go语言的ORM框架相关的数据,同时也整理出选型建议如下:

·  GORM:适合需要全面 ORM 功能的项目,特别是企业级 Web 应用。功能丰富,支持复杂查询,但相对较重。

·  XORM:适合中小型项目,需要一个高效且简洁的 ORM。性能优越,灵活性不错,但不如 GORM 丰富。

·  Gorp:适合需要手动控制 SQL 查询和完全控制数据库操作的场景。适合性能要求高的简单项目。

·  Beego ORM:适合已经在使用 Beego 框架的项目,或者对 ORM 功能的需求较简单的 Web 应用。


日志框架

zerolog

高性能的结构化日志库,专为JSON输出优化,支持零分配日志记录
适合微服务和云原生应用

Zap

高性能、结构化的日志库,特别强调速度和效率
项目配合用了lumberjack,实现日志文件的自动切割和管理功能

Logrus

以其易用性和灵活性著称

以上也列举go语言的日志框架,三种日志框架也将在go选择后去学习对比,做出更适合容器云的日志框架选择,结合网上对日志框架的分析,也简单罗列如下:

·  Zerolog:适合对性能要求极高的场景,特别是日志聚合和大规模分布式系统。其性能表现优异,适合处理大量日志且需要高吞吐量和低延迟的应用。

·  Zap:适合需要高性能且要求丰富功能的应用,特别是结构化日志、大规模分布式系统等。它的性能和灵活性使其成为微服务架构的理想选择。

·  Logrus:适合中小型应用,不需要极高性能的场景。由于其简单易用和广泛的社区支持,是大多数应用的入门级日志框架。。


脚手架:

脚手架考虑主要是支持快速搭建Web应用的一种现有的工程,通过脚手架,能快速在此基础上做下一步开发,如java语言的ruoyi框架,在go语言中也存在类似ruoyi的脚手架,以下整理了对应的ruoyi-gogithub地址,但是这些项目的完善度远远达不到java语言开发的ruoyi框架,也可以做为学习参考,也是go语言选型要学习的一部分。

https://github.com/lostvip-com/ruoyi-go.git

https://github.com/Kun-GitHub/RuoYi-Go.git

https://gitee.com/OptimisticDevelopers/Ruoyi-Go.git

go工程化项目:

对于一个语言选型作为开发的主要语言,除了了解框架和脚手架,开发工具,进一步的需要的是如何将框架,脚手架这些充分消化吸收,建立工程化项目的思维,以下主要列举了go建立工程化需要考虑的点和参考:

1.包管理方式:Go语言没有类似于Maven的中央仓库,但有一些常用的依赖管理工具可以帮助开发者管理和导入第三方库。其中最受欢迎的包括:Go ModulesGlideDep。这些工具允许您指定所需的依赖关系,并自动下载和构建它们
2.代码结构:参考DDD MVC等开发模式
3.单元测试:标准库 testing 包
4.微服务框架 GoMicro等
5.日志规范:zap logrus等日志框架
6.代码检视:SonarLint
7.CI/CD:Jenkins,gitlab
参考:https://zhuanlan.zhihu.com/p/514426016 ,一步步的建立工程化思维。

Kubernetes go相关SDK的学习:

对于容器云的开发和k8s的交互,如果go语言作为主要选择,那么项目主要将使用Client-gocontroller-runtimeSDK,这些SDK作为项目中主要对接方式,这也是整个开发环节需要考虑的一个部分。

Java开发容器云平台学习成本

Java语言如果作为容器云开发的主要语言,那么对应的学习成本,我们无需考虑Web框架的学习,将以spring全家桶作为Web开发主要框架,对应日志和http框架,JSON的框架,脚手架等,都有成熟的解决方案,对于java开发参与进来,针对go语言前面的Web框架,对象关系映射框架,日志框架,http框架,JSON框架,脚手架,开发工具,工程化思维,项目运维和bug修复都在java开发者的历史经验得到了历练,此时需要学习的就是对接k8s交互的SDK,主要存在下面两个SDK
1.kubernetes的kubernetes-client 开发SDK;2.Fabric8的kubernetes-client 开发SDK


对于以上两种SDK的不同可以参考以下参考资料:

https://kubernetes.io/docs/reference/using-api/client-libraries/

https://www.kubernetes.org.cn/8984.html

https://itnext.io/difference-between-fabric8-and-official-kubernetes-java-client-3e0a994fd4af

当然对于Java做容器云开发,也有很多参考的文章作为辅助,以下统统整理在下面,做参考:

https://blog.csdn.net/liuyij3430448/article/details/129534732

https://www.sofastack.tech/blog/java-kubernetes-operator-kubecon-na2019/

https://www.redhat.com/zh/topics/cloud-computing/what-is-kubernetes-java-client#%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E4%BD%BF%E7%94%A8-java-%E5%AE%A2%E6%88%B7%E7%AB%AF%EF%BC%9F

语⾔选择在容器化平台开发中的对⽐

以下对于两种语言的选型做总结行比较:

对比项目

Java

go

项目上手(学习成本)

相对较慢

语言规模(社区活跃)

成熟

较成熟

项目框架熟悉程度

熟悉

相对处于入门

开发速度

较快

容器云管理平台开源项目参考度

极少

开发人员

云原生贴合度

面向对象OOP

约束严格

自由

脚手架(如ruoyi)完善度

代码规范扫描工具

AlibabaGuide

SonarLint

errcheckSonarLintgolangci-lint


评论

携手共启数字化转型新征程

欢迎与我们交流,共同探索适合您的转型路径。

立即交谈
  • 公众号

  • 服务号

  • 视频号

我们随时准备为您提供帮助

  • 咨询热线

    400-820-5-820