go 的内存优势在部分场景比想象中多

32 天前
 momowei

不是吵架帖子,但经常看 go 和 java 比较的时候,经常有人说,go 节省点的内存跟程序员相比根本不值得一提,我越想越觉得不对劲,对于最常规的 crud 来说,不得不说 java 确实比 go 还是要一些的,不过事实是 java 或者 php 程序员转 go 其实狠快根本没那么难,而且现在环境下程序员不一定就很贵了。

go 和 java 我自己都在写,一般来说对于不差钱的国企和政府以及企业市场,java 确实是最适合的,但是我也自己做一些小产品和项目给一些小公司,我能感觉到 java 和 go 对你拿单的成本影响是很大的,比如我有一个订票(城际定制商务车业务)小程序,有时候是我自己提供云服务器,我不得不说物理机的内存确实狠便宜,可是云服务器的内存真的很贵,新用户还不明显,老用户续费狠明显,在一台 2 核 4g 的云服务器上,我一般自建数据库和 redis,然后再配合 go 的应用,因为可能面对好几个客户,会有一些自定义需求,所以部署个五六个是狠轻松的,因为每个应用的访问量并不大,但如果是 java 是很难这样子搞得,这样给了自己很大得利润空间以及拿单成本。

说了这么多,我只能说 go 其实更适合个人开发者和成本敏感型得小团队,因为一般这样团队,都自己写程序,最大得成本就是云服务得开支了,最后再说一句云服务器得内存,cpu,宽带真得很贵,动不动类似 spring 全家桶那样得架构真得狠费机器。

13208 次点击
所在节点    Go 编程语言
147 条回复
issakchill
32 天前
sprinboot 换成 quarkus 会不会好点呢?
chendy
32 天前
2c4g 的服务,本地数据库 redis ,跑五六个实例
没干过私活的再次感觉眼界打开了
Hookery
32 天前
狠轻松的 go ,又有什么理由不用呢?
liaohongxing
32 天前
同感 ,我一个 go 写的物联网项目 ,实时 300 个设备在线 + 大量消息 + webapi 才 25M 内存, 太省了。已稳定运行 3 周
newaccount
32 天前
把写 go 的开了换成 java 的,省下来的工资够买多少台服务器了
realpg
32 天前
@chendy #2
2c4g, 6 个机器 跑 10Kqps 还空余 大量资源
MoYi123
32 天前
@newaccount 买服务器不是花钱就行的, 服务器越多运维的成本就越高, 架构也可能要重新设计.
DandelionFlowers
32 天前
感觉狠赞
lambdaq
32 天前
一方面,你说云主机内存贵,很有道理。jvm 就是费钱

另一方面,你都 redis 了。。不肯拿个 2G 4G 容量的 redis 吧。。。。所以还是得费内存
lambdaq
32 天前
不可能拿个 2G 4G 容量的云主机跑 redis 吧 —— 结果还真是 2C4G 。。。你赢了。。。
csys
32 天前
说内存效率不重要的基本都是大厂吧
对于小厂来说,java 的效率可太吃成本了
bthulu
32 天前
大厂可能无所谓, 像我这种部署到客户厂里的, go 我只要一台几百块的口袋机就行了, java 那可不行.
billzhuang
32 天前
你的 redis 是用来做分布式锁还是做缓存用的?
sagaxu
32 天前
2c4g 和 2c16g 每个月就差 100 快钱而已,什么业务成本能敏感到这种程度?

业务量大的自己找机房托管,单个开发的成本,足够均摊 20 台 40 核 256G 内存的费用了。
ipwx
32 天前
@sagaxu 据说现在的外包,都卷到了一套系统一两千,还带一年服务器的。
dobelee
32 天前
@ipwx 卧槽开眼了。
wnanbei
32 天前
@sagaxu 2c4g 160 ,2c16g 280 ,这成本快翻倍了吧
Jinnrry
32 天前
主要是 jvm 、spring 这一套太重了。在目前家家降本增笑的背景下,大厂照样在乎成本了。微服务、容器化的架构下,java 应用上来 jvm 就吃掉几个 G 的内存,几千上万个容器开销就非常大了。
maxwellz
32 天前
我要笑死了🤣,7 个”很“和 7 个”狠“
Mystery0
32 天前

刚刚去 k3s 截了个图
自己买云厂商活动机组的 k3s ,普遍是 2c4g ,所以对内存很敏感,一旦全部跑在一台机器上面之后,内存爆了机器都连不上

部署的这些东西,除了 python 那个和 halo ,其他都是我自己写的,用 go 写的请求量超大的服务,占用内存也比那几个 java 老服务没流量占用的内存小一大半。
绿色框的 java 服务设置了 jvm 内存限制为 1G ,它的请求量大,占用内存多没得说;蓝色框的两个老服务,基本上没什么流量了,现在设置的 jvm 内存限制是 512M ,再低就起不来了


现在你问我写新东西要用 java 还是 go ?你觉得我该选什么?
从图上看,go 写的东西无论是 cpu 还是内存都比 java 低太多了


————————
FAQ:

1.为什么不加钱上大机器?
A:钱不是大风刮来的,就这一堆,算下来一年都要好几千块钱呢

2.为什么这么多 java 服务?
A:有些是以前写的,为了降低占用,我都把里面的代码改了很多了,老服务做兼容的逻辑,以前是查库,现在我改成了返回死数据。如果时间够,我是真的想把这堆东西全部用 go 重写

3.这是 pod 的占用,有些两个容器的是不是其他容器占用大
A:有两个容器的,第二个容器都是 categraf ,用来采集 promethus 数据上报监控的,没有这个监控,我连哪台机器内存爆了都不知道

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1080790

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX