开个脑洞:不考虑生态, Docker+Go 有潜力取代 JVM+ Java 么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
shijingshijing
V2EX    程序员

开个脑洞:不考虑生态, Docker+Go 有潜力取代 JVM+ Java 么?

  •  
  •   shijingshijing 2019-05-18 11:40:22 +08:00 8067 次点击
    这是一个创建于 2342 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请注意:不考虑生态是前提,也就是各种 framework,各种轮子都不算在内,单纯看语言和运行环境。

    我觉得 JVM 毕竟隔了一个虚拟机,效率啥的比 Docker 还是差一截吧。而且 Go 毕竟这几年才发展起来,论历史沉淀确实比不上 Java,但考虑到 PHP 也是跟 C 一脉相承,按当初 C 转 PHP 的势头,如果都转 Go,前景可期。我站 Docker+Go,虽然个人不喜欢 Go 的语法。

    利益相关:目前正在写 Java,没有写过任何 Go 项目。

    75 条回复    2019-05-20 08:37:57 +08:00
    coffeSlider
        1
    coffeSlider  
       2019-05-18 11:47:37 +08:00 via Android   12
    你说的这有可比性嘛? docker 是啥先理解清楚吧。
    Trumeet
        2
    Trumeet  
       2019-05-18 11:53:06 +08:00
    建议楼主先搞清楚 Docker 是什么(
    linhua
        3
    linhua  
       2019-05-18 11:53:33 +08:00
    JVM 的虚拟机 和 Docker 之类的虚拟机 不是一个概念
    Go 不需要 Docker 呀
    gamma
        4
    gamma  
       2019-05-18 11:53:34 +08:00   1
    为啥要把 Docker 和 Go 绑定呢? Go 的项目可用 Docker 也可不用,反过来 Java、PHP、Python 也可以用 Docker 呀……
    而且讨论趋势和潜力却不考虑生态这个影响最大(之一)的要素,就好像讨论投资不考虑收益一样奇怪
    LXchienne
        5
    LXchienne  
       2019-05-18 11:54:14 +08:00 via Android   7
    你的帖子让我对 docker 的理解产生了疑问
    JasperWong
        6
    JasperWong  
       2019-05-18 11:58:33 +08:00
    jvm 和 docker 不是一个维度的东西
    wangfeng96
        7
    wangfeng96  
       2019-05-18 12:00:55 +08:00 via iPhone
    Java 怎么可能说被取代就被取代呢
    lonelygo
        8
    lonelygo  
       2019-05-18 12:02:11 +08:00
    难道是这么理解的:
    JVM ( JRE ) === Docker
    Java === Go

    容我重新 Google 学习下 Docker 的概念去。
    JerryCha
        9
    JerryCha  
       2019-05-18 12:03:43 +08:00
    你的假设我不认为能成立。做决策是需要考虑成本和风险的。时间、成本、质量,Go 能做到显著提升这三者中的任意一个因素才有胜出的可能。
    loading
        10
    loading  
       2019-05-18 12:06:17 +08:00
    go 可以单文件搞定,并不需要 docker。
    cookey39
        11
    cookey39  
       2019-05-18 12:06:25 +08:00 via Android
    Java 日常被取代
    arfa
        12
    arfa  
       2019-05-18 12:07:09 +08:00
    如果 Oracle 再这样作死,那就真有可能会转向 go
    mritd
        13
    mritd  
       2019-05-18 12:07:40 +08:00 via iPhone   2
    额... 那请问不考虑框架的情况下,v2ex 能否取代高铁?
    mritd
        14
    mritd  
       2019-05-18 12:09:34 +08:00 via iPhone
    我曾经花费很久去跟新人谈 docker 不是虚拟机的问题... 但是你这个问题真的让我无从下手 贫僧甘拜下风
    mritd
        15
    mritd  
       2019-05-18 12:13:31 +08:00 via iPhone
    @LXchienne #5 马上你就会对 k8s 产生疑问 哈哈哈
    mrdemonson
        16
    mrdemonson  
       2019-05-18 12:15:32 +08:00 via Android
    一脸懵逼进来,一脸懵逼出去,以为我对 docker 的理解错了+1
    lonelygo
        17
    lonelygo  
       2019-05-18 12:16:11 +08:00
    @mritd 隔壁整好在谈 docker
    lonelygo
        18
    lonelygo  
       2019-05-18 12:17:52 +08:00
    @mritd 如果 jvm === docker,请回答:??? === k8s
    geekvcn
        19
    geekvcn  
       2019-05-18 12:19:56 +08:00   2
    Docker 更接近虚拟化技术,和 Openvz 差不多,只不过 Openvz 虚拟操作系统,Docker 是用来简化部署的,可以直接打包各种依赖,同样的 jvm+web 容器+web 项目也能打包方便部署。go 语言又不是一定要跑在 Docker 里,直接跑 window,linux 都行,这样效率更高,现在哪有项目是追求那么点效率的,不如加配置来的直接,除非是性能严重影响业务,才会考虑优化性能,性能那么重要,移动端就不会 webview 遍地走,native 应用少的可怜了,各大公司包括 BAT 都在想办法简化开发简化部署,Docker 就是为了简化部署
    cookey39
        20
    cookey39  
       2019-05-18 12:21:01 +08:00 via Android   3
    java 写后台是很稳的,但是高并发的情况下,不如 c++,然而普通人写 c++容易出错,所以就有了 go,go 的语法比较简洁,但这并不意味着开发高并发的 web 程序是简单的。就像是 c 语言简单,但并不意味着你学会 c 就能开发 linux 内核。
    而且国内除了大的公司的核心业务,是否高并发其实无关紧要....
    wdlth
        21
    wdlth  
       2019-05-8 12:22:48 +08:00
    Go 的优势在于更好的支持云原生,不需要安装运行时。JVM 语言优势在于有好的开源基金会和厂商支持,类库丰富,也可以使用别的 JVM 语言编写的类库。
    zpf124
        22
    zpf124  
       2019-05-18 12:23:10 +08:00   1
    jvm 和 vm 和 docker 这是三个不同的概念好不好.....
    jvm 实际上是个翻译, 把你的话翻译给建筑公司, 能做不能做建筑公司说了算。
    vm 是个外包商二道贩子, 你问他就是什么都能做, 结果有些不好弄的他层层转包给垃圾施工队也能凑合弄。
    docker 是个包工头, 手底下就这么些人, 大多数 vm 能我都能做,省得层层转包了,你还能明了一点,但有些东西确实做不了。
    murmur
        23
    murmur  
       2019-05-18 12:24:33 +08:00
    java 拼的就是生态你来个不考虑生态这讨论就没意义了
    zpf124
        24
    zpf124  
       2019-05-18 12:28:33 +08:00
    另外, “ JVM 毕竟隔了一个虚拟机,效率啥的比 Docker 还是差一截吧” 。
    实际结论应该恰恰相反,JVM 叫 Java 虚拟机,然而和你说的虚拟机不是一个东西, 不会去虚拟化硬件的。
    所以,应该是 docker 效率应该比 jvm 差一截。
    leriou
        25
    leriou  
       2019-05-18 12:35:20 +08:00   1
    楼主半年工作经验吧
    blless
        26
    blless  
       2019-05-18 12:41:23 +08:00 via Android   1
    @zpf124 docker 不一定比 jvm 差,docker 只是环境隔离,但是也是直接利用硬件性能啊
    luozic
        27
    luozic  
       2019-05-18 12:42:21 +08:00
    呵呵
    luozic
        28
    luozic  
       2019-05-18 12:44:09 +08:00
    go 的核心是法很多逗逼的代也能成品。
    junnplus
        29
    junnplus  
       2019-05-18 12:45:16 +08:00 via iPhone
    楼主确实在开脑洞
    slanternsw
        30
    slanternsw  
       2019-05-18 12:45:33 +08:00 via Android
    @zpf124 乱讲,容器又不是虚拟化
    mritd
        31
    mritd  
       2019-05-18 12:51:33 +08:00
    @lonelygo #18 spring boot 谢谢,此处应有掌声
    shijingshijing
        32
    shijingshijing  
    OP
       2019-05-18 13:05:52 +08:00
    我不了解 Go,说错了也无所谓,单纯以为 Go 是针对高并发 Web 的 C 语言变体,现在知道 Go 还有 GC 等其他高级 feature。

    @zpf124 我理解的是 JVM 算是一个带指令集的 VM,毕竟和主机大小端不一致,数据类型也可以不用管主机数据类型,这个和容器还是不一样的。

    @leriou 不了解的领域确实是这样的,问你一个你不了解的内容,也可以得出你是初学者的结论。你知道 CT 和 MRI 的区别么?不知道的话,是不是连两年工作经验都没有?
    Navee
        33
    Navee  
       2019-05-18 13:09:22 +08:00
    送分题:没有
    zpf124
        34
    zpf124  
       2019-05-18 13:15:33 +08:00   1
    @blless
    @slanternsw
    容器化技术是不虚拟化硬件,但内核之上的 部分系统是虚拟化出来的。

    docker 有个最大个好处 就是每个容器各自一套系统环境, 但因为这个好处,自然会有一些和你代码功能无关的基础服务要启动运行。

    而且 java 运行效率一直在优化不是都已经无限接近二进制直接执行了吗?
    另外 虽然我没学过 go, 但我也听说 go 有个 runtime, 不也和 jvm 差不多的东西吗? 那最好的情况也就是二者速度差不多吧?
    F281M6Dh8DXpD1g2
        35
    F281M6Dh8DXpD1g2  
       2019-05-18 13:23:25 +08:00   10
    @shijingshijing 别人指出你的问题,你还在这跳脚,这种心态是做不了这一行的
    blless
        36
    blless  
       2019-05-18 13:53:56 +08:00 via Android
    @zpf124 go 的 runtime 是编译成机器码啊 而 jvm 一般都是字节码
    按 linux 一切皆文件的哲学,其实 docker 里的系统也是文件隔离,执行代码的时候加载镜像文件而已,虽然网络或者 io 可能有一点影响,但是目前看来几乎是忽略的
    looplj
        37
    looplj  
       2019-05-18 14:03:38 +08:00
    用过 go 就知道写业务有多繁琐。。。
    youxiachai
        38
    youxiachai  
       2019-05-18 14:10:57 +08:00
    docker 和 jvm 是一个东西????
    现在新手是怎么入门计算机知识的......
    lostberryzz
        39
    lostberryzz  
       2019-05-18 14:13:48 +08:00
    GraalVM 了解一下
    guolaopi
        40
    guolaopi  
       2019-05-18 14:21:32 +08:00 via Android
    JAVA + JVM
    等于
    C# + CLR
    然后你懂的。。。
    atonku
        41
    atonku  
       2019-05-18 14:26:06 +08:00
    你说的这几个东西我一样也不懂,但是我知道你说的对
    wwqgtxx
        42
    wwqgtxx  
       2019-05-18 14:35:18 +08:00
    @zpf124 “但我也听说 go 有个 runtime, 不也和 jvm 差不多的东西吗?”这句话就是错的,所以还是建议你稍微看一下 go 入门再做评论
    acehow
        43
    acehow  
       2019-05-18 14:35:38 +08:00 via Android
    和 docker 没关系。直接问 java 是否会被 go 取代就行了。从长远来看,我觉得会,因为 go 更简洁快速,也没 spring 框架那么臃肿。实际上 go 现在已经比较成熟了,有自身一套比较完整的生态支持,在 2.0 后之后也会支持泛型,IDE 的话用 jb 的 goland 也很爽,而且 go 的社区现在很活跃,如果没有旧项目负担的话,新项目都可以考虑用 go 来做。
    brickxu
        44
    brickxu  
       2019-05-18 15:07:30 +08:00   1
    可以 block 了
    alamaya
        45
    alamaya  
       2019-05-18 15:23:05 +08:00
    啥都不了解,不知道你站个啥
    shijingshijing
        46
    shijingshijing  
    OP
       2019-05-18 15:27:04 +08:00
    @liprais 开心就好
    lonelygo
        47
    lonelygo  
       2019-05-18 15:39:00 +08:00
    @mritd #31 优秀
    mozutaba
        48
    mozutaba  
       2019-05-18 15:53:17 +08:00
    搞不清虚拟机的意思吧。

    精通 vc++
    szq8014
        49
    szq8014  
       2019-05-18 16:25:47 +08:00   1
    java 和 go 的领域有交叉但不能相互替代,go 现在这么火,尤其是前段时间各种公众号发文说 go 只能说在新兴(并不新了)语言下有自己的利益,除非超高并发要求,否则选哪个语言只是习惯的事,就像 不只是 java 能写 hadoop,也不只是 go 能写 docker,爽与不爽自己心里有数就成

    ps: java 的 project loom 成了的话也能低成本高并发了,一定程度上能替代 go 了, [点我看 project loom]( https://cr.openjdk.java.net/~rpressler/loom/Loom-Proposal.html)
    sudoz
        50
    sudoz  
       2019-05-18 16:29:03 +08:00
    你的脑洞瓦特了
    zhyt1985
        51
    zhyt1985  
       2019-05-18 16:39:50 +08:00
    暂时还是 Docker + Java 吧
    ipwx
        52
    ipwx  
       2019-05-18 16:41:10 +08:00
    了解一下 JIT 谢谢。
    zzzmode
        53
    zzzmode  
       2019-05-18 17:53:50 +08:00 via Android
    重新定义了 docker 和 jvm ??
    yim7
        54
    yim7  
       2019-05-18 18:02:46 +08:00
    这俩组合有什么好对比的?
    Q4h7388nR28s95fa
        55
    Q4h7388nR28s95fa  
       2019-05-18 18:26:05 +08:00
    日常 block + 1
    impl
        56
    impl  
       2019-05-18 19:16:20 +08:00 via Android
    坐等 oracle 把 Java 搞死
    arden
        57
    arden  
       2019-05-18 19:31:09 +08:00
    go 现在最大的劣势就是错误处理以有泛型不支持。
    aodeng
        58
    aodeng  
       2019-05-18 19:45:07 +08:00 via Android
    看戏
    cctv1005s927
        59
    cctv1005s927  
       2019-05-18 19:47:12 +08:00
    JVM 和 QT 可以比一下~~
    byfar
        60
    byfar  
       2019-05-18 19:57:17 +08:00
    zqguo
        61
    zqguo  
       2019-05-18 20:13:53 +08:00
    楼主你在问啥???
    vincel
        62
    vincel  
       2019-05-18 20:28:03 +08:00
    请先搞清楚 docker 是啥 一群人帮你纠正你还死要面子当一个跳梁小丑贻笑大方,虚心接受有那么难吗
    mamahaha
        63
    mamahaha  
       2019-05-18 20:31:35 +08:00
    楼主想问 go 能取代 java 吗,因为害怕被喷,所以包装了一下。
    ihciah
        64
    ihciah  
       2019-05-18 21:55:00 +08:00
    那些动不动就 Block 的,请 Block 我谢谢!想不通为什么看到新手就冷嘲热讽?
    Vegetable
        65
    Vegetable  
       2019-05-18 21:58:32 +08:00
    jvm+java=go
    jvm+java+docker = go+docker
    Vegetable
        66
    Vegetable  
       2019-05-18 22:02:58 +08:00
    @ihciah 这是新手的问题吗?
    问问题不能出现最基本的谬误,关公战秦琼就算了,问秦叔宝和青龙偃月刀谁厉害就不合适了吧,这是对所有能看到问题的人的不尊重.
    yidinghe
        67
    yidinghe  
       2019-05-18 22:04:05 +08:00 via Android
    不考虑生态,任何语言都可以取代 Java
    EminemW
        68
    EminemW  
       2019-05-18 22:06:26 +08:00
    docker 不是 go 特有的吧。按我的理解 docker 是用来隔离环境的
    ManjusakaL
        69
    ManjusakaL  
       2019-05-18 22:20:34 +08:00
    Docker 怎么和 JVM 扯上关系的?
    jc89898
        70
    jc89898  
       2019-05-18 22:25:39 +08:00   1
    @shijingshijing 首先 我确实知道 CT 和 MRI 的区别,高中物理学的。 这两个 VM 是一回事吗?而且 Docker 不是 VM,JVM 也不是你说的 VM,多读书吧。
    livnimasileid
        71
    livnimasileid  
       2019-05-18 22:40:05 +08:00
    楼主几年经验就这么跳了?
    shijingshijing
        72
    shijingshijing  
    OP
       2019-05-19 01:29:56 +08:00   2
    @jc89898
    @livnimasileid
    @cctv1005s927

    前面#32 说了不了解 Go,不知道 Go 的 runtime,错了就错了,解释了几句怎么就是你们说的跳了? 不了解一门语言,不了解一些细节,只是看了一些对比报告,提出了这个问题,觉得不合适可以 block 我,可以不回答。

    本来就已经做好了被 diss 的准备。我心态好,平时见过的也多,无所谓。仔细看看你们的回帖,除了 diss 我有其他的有用信息没有?跳梁小丑我倒觉得你们这种抓住漏洞批判一番的更合适吧,标题就说了随便开脑洞的,错了不耻下问,回答比较多的我也感谢送硬币了,还要怎么样?

    说到底层,你们未必比我知道的多,有几个完整看过 Linux 内核的,我感兴趣的是隔离,从 MMU 的分页机制,到 Linux 的进程隔离,再到各种 vm,再到 Docker,能看出针对一个问题的不同思路。可能是我表述有问题,发帖比较随意,diss 我也好,各自丰富 block 列表吧。
    KuroNekoFan
        73
    KuroNekoFan  
       2019-05-19 13:17:30 +08:00 via iPhone
    哪儿跟哪儿
    limoinkli
        74
    limoinkli  
       2019-05-19 17:01:11 +08:00 via iPhone
    不耻下问
    wo642436249
        75
    wo642436249  
       2019-05-20 08:37:57 +08:00
    @ZSeptember 说的好像 java 就简单一样,为了规范目录之类的,操作一个数据表居然需要写 5 个以上文件的代码
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     926 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 20:12 PVG 04:12 LAX 13:12 JFK 16:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86