Skip to content

为何选择golang开发

survior edited this page Nov 2, 2019 · 6 revisions

(1).开发语言选型

golang是最适合的选择。常用选型不外乎java, python, golang。

语言 优势 劣势
java 写exporter真没啥优势。 远比golang和python费资源,容器化下不可接受;相比golang费10倍。
python 比java省资源,但不如golang;开发简单。 镜像准备太麻烦;python版本差异太大(我受够了),不是简单升级个版本就OK的,容器化下python栈可能要维护多批镜像。
golang 开发简单;占用资源很少;性能高。 写exporter真没啥劣势。

(2).不同开发语言的资源占用对比

关于镜像大小与实际资源占用的生产对比。

语言 K8S生产资源分配 image大小 备注
java cpu:100m, memory:1G。 过百兆 使用官方的rocketmq-exporter,java写的。
python cpu:100m, memory:100m。 过百兆 笔者开发,依赖于rocketmq-console,位于:https://github.com/hepyu/hpy-rocketmq-exporter
golang cpu:10m, memory:10m。 16MB 笔者开发,依赖于rocketmq-console,位于:https://github.com/hepyu/RocketmqExporter

特别说明:

java很不适合开发exporter的重要原因有一点就是,“启动时内存和CPU耗费”与“运行时内存和CPU耗费差异太大”,这就导致容器资源分配时request和max有不小差值, 这个是很不好的,会留下隐患。

rocketmq实例不多还好,但是想象一下如果redis,mysql的exporter也是用java写,那这个差值就大了,放大到整个集群将成为潜在风险,我想这也是mysql-exporter, redis-exporter官方为什么用golang写的原因之一。

但是如果把request和max设置成一样,又很浪费。

综上所述,golang是最好的选择。