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

想写个高性能版 Nextcloud 后端,用 Rust 还是 Java 好?

  •  2
     
  •   rv54ntjwfm3ug8 · 2021-09-16 00:22:47 +08:00 · 7656 次点击
    这是一个创建于 1197 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不考虑 Go,非常不喜欢 Go 这个语言。 Rust 部署方便,社区支持好,但貌似还不是成熟,很多包连 1.0 都没发出来。 Java 目前还是后端第一语言,比 Rust 成熟不少,但部署不是很方便(虽然打 Docker 镜像都差不多),资源占用也比 Rust 高。

    56 条回复    2023-01-12 21:11:38 +08:00
    ipwx
        1
    ipwx  
       2021-09-16 00:23:27 +08:00
    用 Java 你就很难部署到比如低内存的 Nas 上了。。。
    agagega
        2
    agagega  
       2021-09-16 00:33:53 +08:00
    自己写着玩的话就 Rust 呗,有时候踩坑也是种乐趣。不过听说 Rust 的 async/await 这块还没定稿?不应该哇。
    wangxn
        3
    wangxn  
       2021-09-16 01:04:42 +08:00
    Rust 并不适合来做后端吧,它的优势在后端开发上几乎没有任何应用场景。用 Rust 写后端大致等同于用 C/C++ 写后端,你可以想象这个流行度。
    现在 Rust 被用得最多的地方是重写各种命令行工具,都需要大量时间来慢慢磨细节、优化性能。
    基本上动态语言凭借专门优化了的 IO 处理和 JIT 在评测上就能打平原生语言,实际应用不好说。
    6IbA2bj5ip3tK49j
        4
    6IbA2bj5ip3tK49j  
       2021-09-16 01:06:29 +08:00   ❤️ 23
    你排除了最合适的答案……
    anyxchachapoly
        5
    anyxchachapoly  
       2021-09-16 01:24:29 +08:00   ❤️ 4
    这帖子让我产生难得一见的好奇心,看了下楼主过往发帖

    1. 楼主 59 天前发布的『第一次用 go 写爬虫那篇』,包含他人回覆概览了下,恍然大悟,原来是非常多基础不懂所以不喜欢。

    2. Java...后端第一,比 Rust 成熟不少,资源占用比 Rust 高,连个基本的 engineering 选择 tech stack 时所需要拿捏的平衡点到底是哪些都不理解。

    加油,我非常看好楼主写出一个所谓高性能的 nextcloud 『后端』
    xupefei
        6
    xupefei  
       2021-09-16 01:45:17 +08:00 via iPhone
    楼主一个人搞?这工程量挺大的啊。
    owncloud 有一个团队在用 go 重写服务器端,楼主可以加入一下
    icy37785
        7
    icy37785  
       2021-09-16 02:00:56 +08:00 via iPhone
    都发在 java 分区了那肯定就是已经决定 java 了吧。
    有一说一 go 是最合适的。
    Mohanson
        8
    Mohanson  
       2021-09-16 02:08:34 +08:00 via Android   ❤️ 1
    对裹脚布过敏
    Hanggi
        9
    Hanggi  
       2021-09-16 06:48:25 +08:00   ❤️ 2
    一个成熟的开发者不会用非常不喜欢一个语言这种无厘头的理由做技术选型。
    redr41n
        10
    redr41n  
       2021-09-16 09:15:26 +08:00   ❤️ 1
    刚想来回答 golang,结果看到楼主第一句话
    quan01994
        11
    quan01994  
       2021-09-16 09:20:56 +08:00
    为什么不用 dotnet 呢 。。
    MeatIndustry
        12
    MeatIndustry  
       2021-09-16 09:35:48 +08:00
    为什么不考虑 Kotlin 呢,都考虑到 Java 了
    seven123
        13
    seven123  
       2021-09-16 09:37:52 +08:00
    现在这个情况,首选就是 golang,又要占用小,性能还要不错,还得方便部署
    2i2Re2PLMaDnghL
        14
    2i2Re2PLMaDnghL  
       2021-09-16 09:41:18 +08:00
    我不知道你怎么想的。
    nc 21 已经有 rust 写的高性能文件后端了。
    oc 则是挑选了 go 的样子
    看来是 PHP 积重难返
    # docker 不适合运行时带虚拟机语言
    a22271001
        15
    a22271001  
       2021-09-16 09:42:14 +08:00
    java 不便于在树莓派 3 之类的小内存设备上部署,用 Go 挺合适的
    顺便吐槽一句 nextcloud 是真的卡
    witcherhope
        16
    witcherhope  
       2021-09-16 09:50:10 +08:00
    GraalVM 试试,可以减少 Java 内存占用
    chiuan
        17
    chiuan  
       2021-09-16 09:59:19 +08:00
    golang 最舒服最强目前。
    x940727
        18
    x940727  
       2021-09-16 10:01:16 +08:00
    GraalVM 试试呗,Native 无论是启动速度还是内存占用已经好很多了,优化优化估计能和 Go 掰掰手腕。
    byte10
        19
    byte10  
       2021-09-16 10:10:01 +08:00
    @a22271001 nextcloud 为啥会那么卡,我也是郁闷。这么简单的一个网盘不至于会卡吧。。
    @icy37785 go 确实是比较合适,小服务器也可以运行起来,要知道很多小玩具都是 1-2g 内存的。

    go 语言目前比较合适的。话说 nodejs 能搞吗,python 呢?按道理这是一个非常简单的服务啊,业务也简单。
    xieren58
        20
    xieren58  
       2021-09-16 10:18:09 +08:00
    绝对 rust
    seakingii
        21
    seakingii  
       2021-09-16 10:45:38 +08:00
    网络服务,GOLANG 首选
    Ayanokouji
        22
    Ayanokouji  
       2021-09-16 10:47:16 +08:00
    java + graalvm native ?
    systemcall
        23
    systemcall  
       2021-09-16 10:48:17 +08:00
    用 C#试试吧
    现在的生态也不错了。而且性能也有保障,低内存设备其实也还好,部署非常方便
    Wincer
        24
    Wincer  
       2021-09-16 11:37:46 +08:00   ❤️ 6
    问得出这样问题的人,我不觉得楼主能写出来高性能的 NextCloud 客户端~当然,欢迎楼主打我脸
    a22271001
        25
    a22271001  
       2021-09-16 11:43:45 +08:00
    @byte10 网上一堆参数优化文章杂七杂八的,我看了下干脆放弃了。。。
    mmdsun
        26
    mmdsun  
       2021-09-16 12:41:24 +08:00 via Android
    Java 云原生还是不行至少等 spring 6 出来,spring native GraalVM 还有很多小 bug.

    不想用 go 可以考虑 .NET core,C#。

    https://dotnet.microsoft.com
    mringg
        27
    mringg  
       2021-09-16 13:20:34 +08:00
    个人感觉,还是用自己比较熟悉的语言写起来,之后想改成其他语言再说就好。
    zysuper
        28
    zysuper  
       2021-09-16 13:44:27 +08:00
    个人喜欢不喜欢重要吗? 能方便的干活赚钱不香吗?
    villivateur
        29
    villivateur  
       2021-09-16 13:50:47 +08:00 via Android
    你确定你要重写 nextcloud ?
    这个工作量可不是几天几个月能搞定的
    DsuineGP
        30
    DsuineGP  
       2021-09-16 14:58:24 +08:00
    @agagega async/await 我上生产环境都一年了。
    但是有一说一,只是用来写 web 的话真不如 spring 一把梭
    用了 Rust 各种轮子都得自己造,开源的轮子要么没有要么不圆
    devcat9
        31
    devcat9  
       2021-09-16 15:01:59 +08:00
    @DsuineGP Rust 范型好用吗?除了轮子的话,写业务逻辑还有什么坑?
    angryfish
        32
    angryfish  
       2021-09-16 15:08:50 +08:00
    为啥 不用 php 写呢,狗头
    dimlau
        33
    dimlau  
       2021-09-16 15:17:59 +08:00
    喜欢不喜欢的……

    OwnCloud 在用 Go 重写啊:

    https://github.com/owncloud/ocis
    DsuineGP
        34
    DsuineGP  
       2021-09-16 15:43:25 +08:00   ❤️ 1
    @devcat9 比较大的坑是要避免在异步运行时( tokio )里面运行另一个异步运行时( tokio )
    比如一开始是在异步函数内部调用一个同步函数,之后需求改了你想在同步函数内部再调了另一个异步函数(比如网络请求之类的)就很困难
    范型的话,只要不涉及到生命周期参数就还挺好理解的,但是因为不像 java 有类继承,Rust 要想代码优雅至少得学会声明宏和派生宏的使用
    allanpk716
        35
    allanpk716  
       2021-09-16 15:48:20 +08:00 via iPhone
    楼主的意思是 rust 比 java 容易部署吗? doge
    NjcyNzMzNDQ3
        36
    NjcyNzMzNDQ3  
       2021-09-16 15:49:24 +08:00
    nextcloud 卡是因为用户关闭窗口,后台程序还在读取文件,读到结束才关闭。

    借楼推荐下 php 版本的 filerun 自用啥问题都没有。
    https://filerun.com/
    PDX
        37
    PDX  
       2021-09-16 15:51:45 +08:00 via iPhone
    用 quarkus 写,然后编译成 native
    devcat9
        38
    devcat9  
       2021-09-16 16:12:08 +08:00
    @DsuineGP 感谢!写业务代码的效率看起来还行?

    宏会不会过多影响可读性?
    wph95
        39
    wph95  
       2021-09-16 16:24:13 +08:00
    > Java 目前还是后端第一语言,比 Rust 成熟不少,但部署不是很方便(虽然打 Docker 镜像都差不多),资源占用也比 Rust 高。

    graalvm 了解一下 quarkus 了解一下
    littlewing
        40
    littlewing  
       2021-09-16 16:26:36 +08:00
    php
    earneet
        41
    earneet  
       2021-09-16 16:42:25 +08:00 via iPhone
    当然是 java 了,虚拟机得天下,裸语言实现虚拟机呀!
    0ZXYDDu796nVCFxq
        42
    0ZXYDDu796nVCFxq  
       2021-09-16 16:55:53 +08:00
    这种重 IO 的场景,换个语言有效果吗
    sky96111
        43
    sky96111  
       2021-09-16 16:58:09 +08:00 via Android
    用 Rust 重写的话…全人类感谢你.jpg
    mxT52CRuqR6o5
        44
    mxT52CRuqR6o5  
       2021-09-16 18:43:50 +08:00 via Android
    @gstqc +1,顶多省点内存
    watcher
        45
    watcher  
       2021-09-16 18:47:00 +08:00
    用 php 啊 大哥
    zxCoder
        46
    zxCoder  
       2021-09-16 21:25:00 +08:00
    dotnet
    iyear
        47
    iyear  
       2021-09-16 21:44:58 +08:00
    java 适合企业用,个人如果就一个星际蜗牛或者其他矿渣组的 nas,跑都跑不起来
    netcan
        48
    netcan  
       2021-09-16 21:55:33 +08:00
    不要浪费时间精力在 Rust 上,这个没啥前途。
    namelosw
        49
    namelosw  
       2021-09-16 21:58:55 +08:00
    这种钓鱼贴,你们顺着他说不就完了…

    就算不是钓鱼贴,鼓励他一下,哪个费事用哪个,让他勇往直前不好吗
    jiayong2793
        50
    jiayong2793  
       2021-09-16 22:06:20 +08:00
    C#?
    iseki
        51
    iseki  
       2021-09-17 04:12:09 +08:00
    JVM 吃资源确实有点严重,虽然我很反感 Go 这个残废语言,但还是不得不说,如果 Rust 不合适,可能 Go 就是无法规避的选择了,也许你可以考虑下 dot Net 系?
    saltbo
        52
    saltbo  
       2021-09-17 10:51:19 +08:00
    欢迎使用 zpan https://zpan.space
    zxCoder
        53
    zxCoder  
       2021-09-17 10:59:12 +08:00
    @iseki 话说感觉 Java 和.Net 很相似,为啥都说 JVM 吃资源严重,而.Net 不会呢?是因为微软比较 nb 吗
    comoyi
        54
    comoyi  
       2021-09-17 13:16:40 +08:00
    你的内心还是想用 Rust 的,那就用吧
    iseki
        55
    iseki  
       2021-09-17 17:33:03 +08:00 via Android
    @zxCoder 个人不太熟悉.net ,直觉上好像在起始阶段资源消耗略小一点,可能是策略不一样吧
    wapollo9
        56
    wapollo9  
       2023-01-12 21:11:38 +08:00
    Nextcloud 部分好像已经开始用 Rust 重写了?现在文件推送部分是已经重写了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2651 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:31 · PVG 23:31 · LAX 07:31 · JFK 10:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.