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

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

  •  
  •   shijingshijing · 32 天前 · 5331 次点击
    这是一个创建于 32 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

    精通 vc++
        49
    szq8014   31 天前   ♥ 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)
        50
    sudoz   31 天前
    你的脑洞瓦特了
        51
    zhyt1985   31 天前
    暂时还是 Docker + Java 吧
        52
    ipwx   31 天前
    了解一下 JIT 谢谢。
        53
    zzzmode   31 天前 via Android
    重新定义了 docker 和 jvm ??
        54
    yim7   31 天前
    这俩组合有什么好对比的?
        55
    HiCode   31 天前
    日常 block + 1
        56
    impl   31 天前 via Android
    坐等 oracle 把 Java 搞死
        57
    arden   31 天前
    go 现在最大的劣势就是错误处理以有泛型不支持。
        58
    aodeng   31 天前 via Android
    看戏
        59
    cctv1005s927   31 天前
    JVM 和 QT 可以比一下~~
        61
    zqguo   31 天前
    楼主你在问啥???
        62
    vincel   31 天前
    请先搞清楚 docker 是啥 一群人帮你纠正你还死要面子当一个跳梁小丑贻笑大方,虚心接受有那么难吗
        63
    mamahaha   31 天前
    楼主想问 go 能取代 java 吗,因为害怕被喷,所以包装了一下。
        64
    ihciah   31 天前
    那些动不动就 Block 的,请 Block 我谢谢!想不通为什么看到新手就冷嘲热讽?
        65
    Vegetable   31 天前
    jvm+java=go
    jvm+java+docker = go+docker
        66
    Vegetable   31 天前
    @ihciah 这是新手的问题吗?
    问问题不能出现最基本的谬误,关公战秦琼就算了,问秦叔宝和青龙偃月刀谁厉害就不合适了吧,这是对所有能看到问题的人的不尊重.
        67
    yidinghe   31 天前 via Android
    不考虑生态,任何语言都可以取代 Java
        68
    EminemW   31 天前
    docker 不是 go 特有的吧。按我的理解 docker 是用来隔离环境的
        69
    ManjusakaL   31 天前
    Docker 怎么和 JVM 扯上关系的?
        70
    jc89898   31 天前   ♥ 1
    @shijingshijing 首先 我确实知道 CT 和 MRI 的区别,高中物理学的。 这两个 VM 是一回事吗?而且 Docker 不是 VM,JVM 也不是你说的 VM,多读书吧。
        71
    livnimasileid   31 天前
    楼主几年经验就这么跳了?
        72
    shijingshijing   31 天前   ♥ 1
    @jc89898
    @livnimasileid
    @cctv1005s927

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

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

    说到底层,你们未必比我知道的多,有几个完整看过 Linux 内核的,我感兴趣的是隔离,从 MMU 的分页机制,到 Linux 的进程隔离,再到各种 vm,再到 Docker,能看出针对一个问题的不同思路。可能是我表述有问题,发帖比较随意,diss 我也好,各自丰富 block 列表吧。
        73
    KuroNekoFan   31 天前 via iPhone
    哪儿跟哪儿
        74
    limoinkli   30 天前 via iPhone
    不耻下问😂
        75
    wo642436249   30 天前
    @ZSeptember 说的好像 java 就简单一样,为了规范目录之类的,操作一个数据表居然需要写 5 个以上文件的代码
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3799 人在线   最高记录 5043   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 07:55 · PVG 15:55 · LAX 00:55 · JFK 03:55
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1