V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shijingshijing
V2EX  ›  程序员

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

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

    请注意:不考虑生态是前提,也就是各种 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-18 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 差不多的东西吗? 那最好的情况也就是二者速度差不多吧?
    liprais
        35
    liprais  
       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 可能有一点影响,但是目前看来几乎是忽略的
    ZSeptember
        37
    ZSeptember  
       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
    这俩组合有什么好对比的?
    HiCode
        55
    HiCode  
       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   ·   实用小工具   ·   873 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:56 · PVG 04:56 · LAX 12:56 · JFK 15:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.