做 Scala 的分布式编译服务有没有市场? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vexjoe
V2EX    问与答

做 Scala 的分布式编译服务有没有市场?

  •   vexjoe 2018 年 4 月 28 日 2595 次点击
    这是一个创建于 2850 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为自己平时开发要用 scala,在自己的笔记本上编译太慢 开发体验很差,想着搞一个类似 distcc 的东西,原理大概是这样的:

    1. 把本地的源码文件上传到服务器(单机或者集群)
    2. 服务器编译源码
    3. 本地从服务器下载编译好的 class 文件

    自己搞了个 scala 的小项目看了下, 50k 的源码(大约 2K 行)编译出来目标文件大约 150k, 编译时间大约需要 25 秒。 这种场景下网络带宽的开销比很小, 理论上可以线性的降低编译时间(服务器集群的计算能力越大编译越快)

    一个挺美好的想法就是: 有这个需求的人,捐个闲置的 VPS 出来(安装一个 compiler worker)作为 compiler farm 的一部分,然后大家共享整个集群的计算能力。

    现在有 2 个问题:

    1. scala 编译过程的可并行程度有多高?(太低就不好水平扩展了)
    2. 有多少人需要这个东西?(其实也可以应用于别的语言,C/C++已经有比较成熟的东西,不过貌似都是大公司内部在用,而 scala 的使用者貌似不太多,其他语言的编译速度都还可以接受。动态语言不需要这个。)

    现在自己是挺需要这个东西的,感觉做个简单的原型出来不难。关键有多少人需要这种东西,给点意见?

    11 条回复    2018-04-28 16:38:10 +08:00
    bbx
        1
    bbx  
       2018 年 4 月 28 日
    我觉得 assembly 才蛋疼,我有的时候 sbt assembly 20 分钟。。
    msg7086
        2
    msg7086  
       2018 年 4 月 28 日
    20 台 VPS 算力加一起相当于一个台式机,你这是云减速吧。
    自己托管服务器然后按 CPU 时间收费倒是可以的,但是吧,受众太小了,投入产出不成比例。
    vexjoe
        3
    vexjoe  
    OP
       2018 年 4 月 28 日
    @bbx 你是指用这个 https://github.com/sbt/sbt-assembly 打出一个 fat jar 么?
    我个人的话这种操作不频繁,请问你是在什么场景有这种需求?
    bbx
        4
    bbx  
       2018 年 4 月 28 日 via iPhone
    @vexjoe 随便加一些 big data 的 jar,像是 flink spark druid,因为需要 exclude 一些 dependency,dependency 经常各种 conflict,所以 merge 成 fat jar 的时候很耗时
    vexjoe
        5
    vexjoe  
    OP
       2018 年 4 月 28 日
    @msg7086
    随便找了个阿里云最低配的 VPS 做测试
    CPU 情况 Intel(R) Xeon(R) 2.50GHz 1 核 1G 内存
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 22.635s
    [INFO] Finished at: Sat Apr 28 15:55:19 CST 2018
    [INFO] Final Memory: 25M/60M
    [INFO] ------------------------------------------------------------------------


    我这边日常工作的配置 2.7 GHz Intel 2 核 8G 内存
    compile 上面提到的项目
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 14.382 s
    [INFO] Finished at: 2018-04-28T15:55:24+08:00
    [INFO] Final Memory: 38M/447M
    [INFO] ------------------------------------------------------------------------


    粗略计算下 22.635s / 14.382 s ≈ 1.57 ,算力的差距差不多是 1.5 台 VPS 等于 1 台 个人电脑这样,感觉还行的样子?
    agagega
        6
    agagega  
       2018 年 4 月 28 日
    不如做个 C++ 的(
    vexjoe
        7
    vexjoe  
    OP
       2018 年 4 月 28 日
    @bbx 我的需求是开发阶段(写代码-编译-写代码)会经常需要编译。fat jar 这种场景一般是部署的时候,是不是你代码的修改,经常需要部署某一个环境里去跑,才能看到修改的效果?
    3a3Mp112
        8
    3a3Mp112  
       2018 年 4 月 28 日
    需要用到 scala 的公司不会缺少硬件的。
    vexjoe
        9
    vexjoe  
    OP
       2018 年 4 月 28 日
    @3a3Mp112 看来我司比较小气 XD
    vexjoe
        10
    vexjoe  
    OP
       2018 年 4 月 28 日
    @3a3Mp112 不过我用自己另一台 4 核 3.9Ghz 16G RAM 的,编译速度仍然只有这台 2 核笔记本的 2 倍左右。感觉个人计算机的能力还是很有限的。
    msg7086
        11
    msg7086  
       2018 年 4 月 28 日   1
    VPS 上的 CPU 一般是配置成 Fair Share 的,爆发式运行可以,量大了经常连续爆发会被商家限速。
    4 核 3.9 差不多三四年前的台式机水平,现在如果配 Ryzen 可以 8 核 4.0,速度又能翻倍了,价格也不离谱。
    自己搞服务器的话,E5-2670v2 这种 CPU 插 2 块,20 个核心一起跑,感觉又不一样了。

    总之呢我是觉得这需求太小众,花时间去做,不如把时间转成钱然后买设备解决。
    当然你想搞也是可以的,比如固定月租+按量付费,充值然后根据 CPU 时间计价,补偿硬件费用,也可以。
    每分钟算力 1 毛,起步费 5 块=50 分钟算力什么的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1858 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 10:35 PVG 18:35 LAX 02:35 JFK 05:35
    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