-
Notifications
You must be signed in to change notification settings - Fork 15
为何选择golang开发
survior edited this page Nov 2, 2019
·
6 revisions
golang是最适合的选择。常用选型不外乎java, python, golang。
语言 | 优势 | 劣势 |
---|---|---|
java | 写exporter真没啥优势。 | 远比golang和python费资源,容器化下不可接受;相比golang费10倍。 |
python | 比java省资源,但不如golang;开发简单。 | 镜像准备太麻烦;python版本差异太大(我受够了),不是简单升级个版本就OK的,容器化下python栈可能要维护多批镜像。 |
golang | 开发简单;占用资源很少;性能高。 | 写exporter真没啥劣势。 |
关于镜像大小与实际资源占用的生产对比。
语言 | 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是最好的选择。