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

2018-04-28 13:39:54 +08:00
 vexjoe

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

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

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

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

现在有 2 个问题:

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

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

1767 次点击
所在节点    问与答
11 条回复
bbx
2018-04-28 14:41:55 +08:00
我觉得 assembly 才蛋疼,我有的时候 sbt assembly 20 分钟。。
msg7086
2018-04-28 14:52:19 +08:00
20 台 VPS 算力加一起相当于一个台式机,你这是云减速吧。
自己托管服务器然后按 CPU 时间收费倒是可以的,但是吧,受众太小了,投入产出不成比例。
vexjoe
2018-04-28 15:48:14 +08:00
@bbx 你是指用这个 https://github.com/sbt/sbt-assembly 打出一个 fat jar 么?
我个人的话这种操作不频繁,请问你是在什么场景有这种需求?
bbx
2018-04-28 15:56:26 +08:00
@vexjoe 随便加一些 big data 的 jar,像是 flink spark druid,因为需要 exclude 一些 dependency,dependency 经常各种 conflict,所以 merge 成 fat jar 的时候很耗时
vexjoe
2018-04-28 16:03:16 +08:00
@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
2018-04-28 16:04:27 +08:00
不如做个 C++ 的(
vexjoe
2018-04-28 16:07:42 +08:00
@bbx 我的需求是开发阶段(写代码-编译-写代码)会经常需要编译。fat jar 这种场景一般是部署的时候,是不是你代码的修改,经常需要部署某一个环境里去跑,才能看到修改的效果?
3a3Mp112
2018-04-28 16:10:23 +08:00
需要用到 scala 的公司不会缺少硬件的。
vexjoe
2018-04-28 16:11:40 +08:00
@3a3Mp112 看来我司比较小气 XD
vexjoe
2018-04-28 16:15:09 +08:00
@3a3Mp112 不过我用自己另一台 4 核 3.9Ghz 16G RAM 的,编译速度仍然只有这台 2 核笔记本的 2 倍左右。感觉个人计算机的能力还是很有限的。
msg7086
2018-04-28 16:38:10 +08:00
VPS 上的 CPU 一般是配置成 Fair Share 的,爆发式运行可以,量大了经常连续爆发会被商家限速。
4 核 3.9 差不多三四年前的台式机水平,现在如果配 Ryzen 可以 8 核 4.0,速度又能翻倍了,价格也不离谱。
自己搞服务器的话,E5-2670v2 这种 CPU 插 2 块,20 个核心一起跑,感觉又不一样了。

总之呢我是觉得这需求太小众,花时间去做,不如把时间转成钱然后买设备解决。
当然你想搞也是可以的,比如固定月租+按量付费,充值然后根据 CPU 时间计价,补偿硬件费用,也可以。
每分钟算力 1 毛,起步费 5 块=50 分钟算力什么的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/450666

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX