不是吵架帖子,但经常看 go 和 java 比较的时候,经常有人说,go 节省点的内存跟程序员相比根本不值得一提,我越想越觉得不对劲,对于最常规的 crud 来说,不得不说 java 确实比 go 还是要一些的,不过事实是 java 或者 php 程序员转 go 其实狠快根本没那么难,而且现在环境下程序员不一定就很贵了。
go 和 java 我自己都在写,一般来说对于不差钱的国企和政府以及企业市场,java 确实是最适合的,但是我也自己做一些小产品和项目给一些小公司,我能感觉到 java 和 go 对你拿单的成本影响是很大的,比如我有一个订票(城际定制商务车业务)小程序,有时候是我自己提供云服务器,我不得不说物理机的内存确实狠便宜,可是云服务器的内存真的很贵,新用户还不明显,老用户续费狠明显,在一台 2 核 4g 的云服务器上,我一般自建数据库和 redis,然后再配合 go 的应用,因为可能面对好几个客户,会有一些自定义需求,所以部署个五六个是狠轻松的,因为每个应用的访问量并不大,但如果是 java 是很难这样子搞得,这样给了自己很大得利润空间以及拿单成本。
说了这么多,我只能说 go 其实更适合个人开发者和成本敏感型得小团队,因为一般这样团队,都自己写程序,最大得成本就是云服务得开支了,最后再说一句云服务器得内存,cpu,宽带真得很贵,动不动类似 spring 全家桶那样得架构真得狠费机器。
1
issakchill 36 天前
sprinboot 换成 quarkus 会不会好点呢?
|
2
chendy 36 天前
2c4g 的服务,本地数据库 redis ,跑五六个实例
没干过私活的再次感觉眼界打开了 |
3
Hookery 36 天前
狠轻松的 go ,又有什么理由不用呢?
|
4
liaohongxing 36 天前 2
同感 ,我一个 go 写的物联网项目 ,实时 300 个设备在线 + 大量消息 + webapi 才 25M 内存, 太省了。已稳定运行 3 周
|
5
newaccount 36 天前 6
把写 go 的开了换成 java 的,省下来的工资够买多少台服务器了
|
7
MoYi123 36 天前
@newaccount 买服务器不是花钱就行的, 服务器越多运维的成本就越高, 架构也可能要重新设计.
|
8
DandelionFlowers 36 天前
感觉狠赞
|
9
lambdaq 36 天前
一方面,你说云主机内存贵,很有道理。jvm 就是费钱
另一方面,你都 redis 了。。不肯拿个 2G 4G 容量的 redis 吧。。。。所以还是得费内存 |
10
lambdaq 36 天前
不可能拿个 2G 4G 容量的云主机跑 redis 吧 —— 结果还真是 2C4G 。。。你赢了。。。
|
11
csys 36 天前
说内存效率不重要的基本都是大厂吧
对于小厂来说,java 的效率可太吃成本了 |
12
bthulu 36 天前
大厂可能无所谓, 像我这种部署到客户厂里的, go 我只要一台几百块的口袋机就行了, java 那可不行.
|
13
billzhuang 36 天前
你的 redis 是用来做分布式锁还是做缓存用的?
|
14
sagaxu 36 天前
2c4g 和 2c16g 每个月就差 100 快钱而已,什么业务成本能敏感到这种程度?
业务量大的自己找机房托管,单个开发的成本,足够均摊 20 台 40 核 256G 内存的费用了。 |
18
Jinnrry 36 天前
主要是 jvm 、spring 这一套太重了。在目前家家降本增笑的背景下,大厂照样在乎成本了。微服务、容器化的架构下,java 应用上来 jvm 就吃掉几个 G 的内存,几千上万个容器开销就非常大了。
|
19
maxwellz 36 天前 2
我要笑死了🤣,7 个”很“和 7 个”狠“
|
20
Mystery0 36 天前 5
刚刚去 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 数据上报监控的,没有这个监控,我连哪台机器内存爆了都不知道 |
22
layxy 36 天前
目前 go 的生态已经很不错了,以前一般公司不太敢切到 go,轮子少,尤其是特定业务缺少轮子自己造工作量很大,现在公司用 go 的不少了,不只是服务器内存成本
|
23
error0 36 天前
/流汗 这种帖子下次还是开到个人开发者这类的吧,仅仅是剩内存不足以让企业更换技术,这个成本比内存带来的成本高得多
|
24
sagaxu 36 天前 via Android
@ipwx 一套一两千是卖 saas 吧,一般是多租户设计,点击几下就上线了,边际成本接近于零。
@wnanbei 多花一个人天就不止 1000 了。 @Jinnrry 上来就吃掉几个 G 内存的应用,用 Go 也小不了多少,按照过去经验,大概能节省 40%到 60%左右。按每个容器省 2G 算,10K 个容器就是 20T 内存,采购价约 60 万,按使用 3 年算每年才 20 万,还不到半个开发的成本。 个人玩儿票业务,跟营收支柱业务,成本敏感度差异是很大的,租办公室一个工位成本就要一两万一年了,核心区域一个工位一年成本要五万。让个人掏这个钱,体感要命了一样。 如果省内存收益巨大,哪个公司砸点钱用 Rust 或 C++重写包括 hadoop 在内的一大把基础设施,应该不愁销路。 |
25
momowei OP @sagaxu 你说这么多,我想说啥列,让一个人写 java 的人写 go 并不是啥难事,之所以是 go ,是因为他上手很快,你说的什么 rust,c++这些上手门槛和 crud 效率跟 go 和 java 都差太多了
|
26
zhady009 36 天前
最大堆给小点用轻量级的框架 Java 也可以比较小,用 Vertx HttpServer 压测最大堆给 32M 压测结果
➜ ~ wrk -t10 -c100 -d10s http://localhost:8080 Running 10s test @ http://localhost:8080 10 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.33ms 2.94ms 74.85ms 98.96% Req/Sec 9.05k 2.01k 11.63k 82.97% 909414 requests in 10.10s, 8.51GB read Requests/sec: 90003.95 Transfer/sec: 861.95MB 整个应用加上一些非堆的占用实际用 100M ,只想说要根据应用多方面的因素来选型 |
27
aLazarus 36 天前
每次看到这种帖子,我都想把我的服务器换成 go ,可惜没时间去学啊
|
28
qcbf111 36 天前
我还是选择 c#性能和内存双收,美滋滋。
|
29
wxf666 36 天前
|
32
helone 36 天前 3
说大厂不在乎服务器成本的我真不知道哪个大厂,字节跳动连 Go 的 HTTP 框架和 RPC 协议都要自己实现,然后洋洋洒洒写了一堆报告,分析更换后节省了多少内存和 CPU
|
33
happy32199 36 天前 via Android
有做信创的吗?据说 90%的项目只认 JAVA 有这个说法吗?
|
34
yuezhiyuan 36 天前 1
我运维,投 go 一票太方便了
资源占用低,二进制运行。打包完的 apline 容器只有 2-30m |
35
importmeta 36 天前
我主要写 Node 的, 相比而言 Java 内存确实多, 代替 Java 上云确实能省钱, 个人项目选 Node 肯定不选 Java, 现在 Node 世界有个新运行时叫 Bun, 用 Zig 写的, Benchmark 吊打 Gin Spring, 以后哪天说不定就火了.
|
36
luckyrayyy 36 天前
不懂想问,生态方面劣势大吗? Java 写业务代码门槛太低了。
|
37
timothyye 36 天前
go 也挺适合单打独斗搞私活,最小化服务器成本
|
38
PopRain 36 天前
@happy32199 医疗系统很多都是.net c# 开发的,前不久,一群不搞 HIS 的人, 给卫生局出了一个去 A 调研报告(原来网上有,被投诉撤掉了),就是认为 JAVA 是安全可控的,c# 是要去 A 的..... 屁股决定大脑
|
39
tt67wq 36 天前
@newaccount 现在 go 培训班都批发多少轮了,不能说一抓一把也能说并不稀缺
|
41
Bingchunmoli 35 天前 via Android
@csys 但是 java 现在有一套代码生成的,有很多业务生成就解决了(甚至是前后端)(小厂)开发成本会降低很多,go 现在生态还需要完善
|
42
ashin 35 天前
对于独立开发来说,每一 M 内存每一 M 硬盘每一 M 带宽 能省的必须省,为了省内存和 cpu ,我连 crontab 都舍不得配,全部移到 GitHub action 上去跑,要加载用到的数据字典都是用到的时候耗点时长和牺牲点体验临时加载用完就卸掉,每一个资源的消耗都意味着要自己掏钱,别说每月就差 100 块了,每月能不能靠自己挣到 100 块都是不确定的事情,所以这么抠抠搜搜。
目前我 2c8G redis+mysql+10 几个 go 服务,基本用不完,耗内存的主要还是在跑一个 selenium 脚本用满了 |
43
lesismal 35 天前
> 说了这么多,我只能说 go 其实更适合个人开发者和成本敏感型得小团队,因为一般这样团队,都自己写程序,最大得成本就是云服务得开支了,最后再说一句云服务器得内存,cpu,宽带真得很贵,动不动类似 spring 全家桶那样得架构真得狠费机器。
OP 格局低了, 越大团队越大业务, 省的越多. OP 个人只省了这点成本就很可以了, 对于大业务量, 那节约的成本可是大太多了 顺便安利下我这个是给大业务节约成本的仓库, 量小的标准库更适合: https://github.com/lesismal/nbio |
44
Ipsum 35 天前
之前看人说,不差内存的 arm 用 go 来写最方便。
|
45
abersheeran 35 天前
@happy32199 信创还真不是只认 Java……我参与过的项目只有一个有少量的 Java 服务,其他全是 Go 、C 、Python 。信创不关心什么内存磁盘用量啥的,人家指标点在芯片、系统、数据库之类的东西,国产化率有多少。当然能在低配机器上跑肯定是不错的,只是这个不是最核心的东西。
|
46
abersheeran 35 天前
个人项目用 Java 确实要命,什么也没跑先吃一堆内存。之前跑一个社区的服务,Ruby 写的,要了命了,内存猛猛吃。我只有一堆 1C0.5G 或者 1C1G 廉价服务器,所以从来只写 Rust 、Python 、TypeScript 、Golang 这种省内存的……
|
49
chenqh 35 天前
@abersheeran ruby 都是 ror 吧,python django 也一样啊.只是 python 很多人不用 django
|
50
hefish 35 天前
这样啊,那我也搞个 go 玩玩。。
楼上大佬们,现在搞 web 框架,一般 go 用哪个? orm 用哪个? |
51
RicardoY 35 天前 via iPhone
对于小规模场景,节省成本的最好方式是要实现实时的智能容量管理,比如使用云函数+可伸缩的云数据库,成本会非常非常低。
|
52
cookii 35 天前 via Android
nextjs 直接无服务更是绝杀
|
53
HaroldFinchNYC 35 天前
php ?
|
54
houshuu 35 天前
当时入职第一个接触的项目就是迁移一个 kotlin 核心微服务到 go ,前前后后花了 3 个月重构,但之后每个月能省大概 1.5T 内存的钱,CPU 用量也省了很多。现在有在考虑转 zig 或者 rust 了
replica 上 100 的话,基本早转早省。只是经常会出现内部库没有对应版本,得自己移植旧库到新语言上。 |
55
jqtmviyu 35 天前
之前论友分享了一个屏蔽 pcdn 节点的工具, 叫 PeerBanHelper , java 写的, 运行几百 M.
关键我下载 bt 的 transmission 还不到 30M. emby 也就 300M. 后来实在受不了这占用, 直接用 shell 写了个防火墙拦截的. 定时任务, 占用为零, 这下总算舒服了. |
57
lx0758 35 天前
我把我的博客也换成 Go 了, 确实很爽! 生态环境小应用基本可以做到平替.
不过 Java 还是有 Java 的好. 我个人的观点是: 企业内存不敏感尽量 Java, 个人用户选 Go 没商量~ |
58
lx0758 35 天前
关键还是 Go 学习成本不高, 两个一起整没啥压力.
|
59
yaodao 35 天前
我是一个写 java 的。但 java 的内存占用真的太高了,所以我现在跑在服务器上的两个 web 的后台服务都是 go 写的,一个为记账软件,另一个是博客系统。 并且博客系统的 db 还换成了 sqlite3 ,因为 mysql 等服务也太占内存了
|
60
gongquanlin 35 天前
@Mystery0 #20 这是什么面板呀
|
61
Mystery0 35 天前
@gongquanlin lens
|
62
godspeedyou 35 天前 1
pocketbase 了解下,完美发挥了 go 的轻量和零依赖特点,用来写个人项目和私活太爽了
|
63
spritecn 35 天前
python 学习来比 go 快,还能蹭 AI,不也挺好
|
64
min 35 天前
大厂肯定在意啊,省零点一个百分点内存占用,换成钱得不老少了。
one-man shop 其实到无所谓。 |
65
yyttrr 35 天前
java 服务部署的节点 cpu 内存比例要 1:4 甚至 1:8 特殊服务要 1:16 ,go 的用 1:2 都有大把空闲,有时候为了降本得找 go 研发要求他们多用些内存,或者在 go 服务的机器上部署些 redis 吃内存
|
66
qloog 35 天前
@hefish 我用: https://github.com/go-eagle/eagle 其实选个合适自己的就好
|
67
Narcissu5 35 天前
所有带内存管理的语言都面临一个问题:多用 CPU 还是多用内存,Go 也是如此。Java 也可以把内存调低,也就是更频繁的回收占用更多 CPU 而已。对于极端内存敏感的场景,可以试试 graalvm native 便衣
|
69
souths 35 天前
开发需要生态,看的从来不是语言。
java 别的不说,有 spring 系在,加上语言的强制约束,新手只要按部就班的工作能写 crud 。 未来我更看好 rust |
70
INCerry 35 天前
如果既想要超越 java 的开发效率,又想要高性能,还想要低内存占用,为何不试试神奇的 C# + .NET9 + DATAsGC 呢?
|
71
wssy001 35 天前
Golang:C 的网络语法糖 拿 Go 写 CRUD 你不觉得累吗(和 Java 比)
|
72
wow0o 35 天前
go 可以直接拿到近似 c++的运行和内存性能, 还不用去突破 c++的学习门槛.
|
73
sam384sp4 35 天前
内存问题 spring 要背大锅, 当然 java 也要背一部分。
我这边一个项目,包含上千终端的 websocket ,以及消息队列轮询(数据就存在应用内存中)用 vertx 1 核 1g 绰绰有余 |
74
guanzhangzhang 35 天前 1
@happy32199 我司信创就是好多客户,见我 github ,amd64 ,arm64 ,loong64 ,mips64el 啥的架构都有,go 自带交叉编译,没看到有客户要求语言栈的,达梦,人大金仓之类的都有 cgo 或者 go 的 client 库的
|
75
GooMS 35 天前 4
真省成本还得是 php, 毕竟大部分人的应用根本不会有人用,不用的时候 0 内存,才是最省的
|
78
Mystery0 35 天前 via Android
@Immortal 第一次用 k3s 的时候,我的活动机都开的是 1c2g ,跑个 k8s 的话就别想跑服务上去了,所以就整了 k3s ,后面受不了机器性能太低,就渐渐的开成 2c4g 的配置了
|
81
GeekGao 35 天前
成本敏感, 那选 PHP 更好,初始化占用内存少、外包人数还多、修改迭代速度快
|
84
xsen 35 天前
@Ipsum #43 也不算不差钱。我们这有一套系统用 go 写的,代码量说少也不少,十几万行。前阵子要支持 arm ,迁移过去也就花了两三天。若是 java 或者 c++的话,怕搭建环境与编译都搞不完
|
85
abcbuzhiming 35 天前
对个人来说,Go 非常好,资源占用少,能省下不少服务器费用。
对企业来说,Go 省下的服务器费用不注意抵消 Go 开发人员工资远比 Java 开发人员高,还难找的尴尬。 所以用哪种语言只取决于你自己的身份 |
87
iyaozhen 35 天前
@happy32199 搞信创其实 Go 更合适,源码保密(说的是部署保密) 交叉编译,比 java 好多了
|
88
RandomJoke 35 天前
怎么说呢,你小项目没什么量,用什么语言其实都无所谓,你用 lua js 都行,spring 本身就用来搞大型企业项目比较流行的。生态好,市场人才也多,不过话说回来这几年 go 的生态慢慢好起来了
|
89
wupher 35 天前
- 其实 Java 自己也知道在云服务器上的劣势,GraalVM 也是 Oracle 的方案之一
- Java 的优势还是在于第三方尤其是开源支持众多,无论接什么,都能用 Spring 糊上去。Spring 全家桶确实方便统一了开发链。当然,代价也是,这玩意儿可真胖啊。此外,JDK 上还有各种派生语言,如 Kotlin 、Groovy 、Jython - Go 的优势正好反过来。啥都能接,语法糖还不太多,框架都要自己去组合,还没有像 Spring 那样一统江山的玩意。就像当年一样,还要程序员 Struts + Hibernate 各种搭。 - 长远更看好 Golang 的发展,但自己也很喜欢写 Kotlin |
91
brookegas 35 天前 1
对内存省着用的,多是小老板/潜在的小老板,因为心疼花他自己的钱买内存
大大咧咧地说内存不值钱的,多是牛马,因为内存是老板花钱买的,自己负责写 bug 把内存耗完就好了 |
94
Mystery0 35 天前
@beneo 我这里的数据转换很简单,就是接收请求,然后调用新版本的服务,获取到返回数据之后再按照老版本的格式返回,请求量大是因为微信小程序端不升级了,一直在请求老接口
|
95
jeesk 35 天前
java 还有一个优势, 资料多.
不信你试一试找个 go 反射的问题问一问 openai , 看看是否能够回答正确, 别来喷子说不用反射. |
96
IvanLi127 35 天前
我自部署了很多服务,主要就自己用,基本上不考虑 java ,就是因为很多 java 程序太吃内存了。
|
97
codersdp1 35 天前 2
k8s + go 不知道多香了。
|
98
jeesk 35 天前
等以后 go 资料完善了, java 可能越来越难顶了.
|