目录

Serverless奇亚币(Chia)挖矿与成本分析

奇亚币Chia是最近非常火的新币种,火爆到什么程度呢?火爆到大容量的硬盘都被卖光了。另外一点Chia的创始人就是BT的创始人,依靠的是硬盘容量挖矿,号称绿色挖矿。虽然一直对区块链行业不是很了解,但是仍然想凑个热闹,想尝试一下Serverless是不是能挖矿。

目前挖矿这件事情在国内还是有所禁忌的,毕竟是有违低碳环保的宗旨,同时,也有人质疑虚拟货币是不是一场资本骗局。笔者对于这些问题并没有太多研究,本文主要从技术维度对Serverless挖矿的技术实现和成本进行分析。

Chia架构分析

之前确实没有太关注过币圈,只是简单的了解区块链的基本概念,也不曾参与过挖矿,只是简单的知道比特币必须要依靠性能强大的GPU能力。而Chia币恰好相反,不必依赖昂贵的显卡能力,而单纯消耗的存储能力。公有云的存储,特别是对象存储一向具有很大的价格优势,所以这也为公有云资源进行挖矿提供了可能性。

先来简单分析一下Chia的架构,通过分析可知对于竞猜过程,并不需要钱包参与,因为对于plot数据,创建时已经指定了两个公钥,也就是plot已经是专属“彩票”,兑奖时,直接打给的彩票的创建公钥对应的账户地址(待稍后测试确认),对于Wallet并没有参与竞猜,所以不需要部署,对于farmer部分只需要部署,Full node,Farmer, Harvester三种,具体每个服务部署多少,取决于负载,也就是 plots的数量级。

/images/pasted-227.png

Chia云主机架构挖矿

部署架构

之前看到过利用公有云进行挖矿的案例,甚至AWS官方竟然推出了标准化文档。这些解决方案中主要利用的是云主机加上本地的NVMe存储实现高性能挖矿。

/images/pasted-232.png

在这个方案中,临时空间使用的是NVMe本地盘,而最终的持久化空间则是利用对象存储,但是由于对象存储的访问接口限制,需要利用用户态模块将对象存储以文件目录挂载给各个节点,用于最终数据的写入。但是在实际测试中,用户态的模块其实并不稳定,经常出现Input/Output Error的情况,经过与云商工单系统确认,该问题属于硬伤,只能再增加一层缓存层(比如NAS),利用对象存储的上传工具上传。

时间分析

分享一下实际的测试结果,我们云主机的规格4核32G,本地NVMe磁盘894G,最大的IOPS可以达到250000。为了测试准确性,我们使用k=32,其他为默认参数进行验证。总体生成耗时8.8小时,拷贝至最终存储11.6分钟,转存至对象存储大约耗时14分钟,总体耗时为9小时12分钟。

1
2
3
4
5
Approximate working space used (without final file): 269.315 GiB
Final File size: 101.340 GiB
Total time = 31748.852 seconds. CPU (117.300%) Wed May 12 14:27:27 2021
Copied final file from "/plots-tmp/plot-k32-2021-05-12-05-38-79875f7a80d07fb658c68fd441e3c3befec4a30e2c6c9c21ee79fe815d0c4e36.plot.2.tmp" to "/plots-final/plot-k32-2021-05-12-05-38-79875f7a80d07fb658c68fd441e3c3befec4a30e2c6c9c21ee79fe815d0c4e36.plot.2.tmp"
Copy time = 692.271 seconds. CPU (27.600%) Wed May 12 14:39:00 2021

资源消耗

我们看一下监控数据,在单任务并发的情况下,我们可以看到,远远没有达到NVMe的极限速度。

/images/pasted-228.png

CPU利用率方面基本没有超过25%,而网络利用率我们看到,在挖矿过程中并没有太多的网络消耗。

/images/pasted-231.png

/images/pasted-230.png

资源成本

测试过程中使用的是按量计费,Plots过程中主要涉及的云资源包括主机和云盘,费用分别为:

  • 云主机 0.44 元/小时(账单内是将存储和计算资源分别计算,购买时时在一起)
  • 云硬盘 2.92 元/小时

所以本次挖矿过程中产生的成本约为31元。对象存储1TB保存1个月数据的时间约为111元。

Chia Serverless架构挖矿

部署架构

公有云目前都提供基于容器的实例,这种实例是按照CPU和内存的使用时间来计费,也就是如果你的CPU没有使用,则无须付费。但是目前公有云中无法将NVMe类型的磁盘直接给容器使用,我们只能将性能最佳的云盘挂载给容器的方式。另外在测试过程中,如果直接使用对象存储作为持久化存储,最终拷贝过程会出现input/output error的异常,所以在测试过程中仍然借用NAS存储作为临时性最终存储。以下为部署架构:

/images/pasted-233.png

我们将挖矿的所有节点运行在Kubernetes(Serverless)中,而Full Node放在一台低配置云主机(云主机和OSS通过内部网络通讯不收费)甚至本地环境,通过文件方式挂载使用。

本次选择的临时存储为最高性能的云硬盘,IOPS最高可达14300,缓存存储选择了普通的云盘(也可以使用NAS,成本接近),最终的数据仍然存放在对象存储。

时间分析

容器最大可使用的规格诶4C8G,云盘最大IOPS为14300。我们仍然使用k=32,其他为默认参数进行验证。总体生成耗时10.6小时,拷贝至最终存储14.5分钟,转存至对象存储大约耗时14分钟,总体耗时为11小时6分钟左右。

1
2
3
4
5
Approximate working space used (without final file): 269.379 GiB
Final File size: 101.374 GiB
Total time = 38470.562 seconds. CPU (110.440%) Thu May 13 14:06:05 2021
Copied final file from "/plots-tmp/plot-k32-2021-05-13-03-24-598167f5cc365884a79d55b3c0a68d5339f223f7708a5fec1108caf2e42d3f55.plot.2.tmp" to "/plots-final/plot-k32-2021-05-13-03-24-598167f5cc365884a79d55b3c0a68d5339f223f7708a5fec1108caf2e42d3f55.plot.2.tmp"
Copy time = 870.129 seconds. CPU (18.280%) Thu May 13 14:20:36 2021

资源消耗

从磁盘性能损耗来看,也仍然没有达到云盘的极限性能。

/images/pasted-235.png

内存利用率上,由于最高上限的限制,使用率应该不会超过4G,CPU利用率相对来说比较稳定,并没有超过200%。

11点监控 /images/pasted-236.png

15点监控 /images/pasted-237.png

21点监控 /images/pasted-238.png

资源成本

  • 容器实例:0.52 元/小时
  • 云硬盘:0.6元/小时

所以本次挖矿过程中的成本约为12.3元左右。

总结

从监控数据可以看到,Chia币在挖矿中虽然非常依赖于硬盘,但是单任务运行时并没有完全把硬盘性能榨干(曾经调试过Thread参数但是结果差不多,如果有其他参数请告知),只能通过提高并发性来压榨硬盘。对于Serverless,根据监控可以适当降低磁盘规格来达到进一步降低成本的目的。同时,对于CPU利用率和内存的利用也不会占用太高,2核4G基本可以满足需求(有内存不足的风险,内存默认上限为3389,可以限制)。

通过以上的实验数据可以看到,在公有云上挖矿有不同的组合方案, 每一种组合的成本是完全不同的。如果以单一Plots比较,Serverless方式确实有比较明显的优势。但是,由于NVMe卓越性能可以通过提高并发方式实现成本最优。根据下表中临时空间占用,在刚刚规格配置的云主机上可以实现并发3个同时挖矿的效果。

/images/pasted-234.png

同时Serverless在扩展的灵活性上要优于云主机的方案,通过适当的自动化手段,可以做到成本最优的效果。以上单纯的是从技术上对云主机挖矿的可行性进行分析,有兴趣的朋友可以入群讨论。

/images/pasted-239.png

如果加群失败,请添加个人微信号入群

/images/pasted-240.png