探索IOTA ICT,在谷歌小型云实例f1-micro中测试ICT

IOTA Controlled agenT(ICT)的测试版本Ict 0.1.1已经在官方discord频道发布。本文将介绍如何在谷歌云计算实例(f1-micro)上运行ICT。

本文不讨论ICT要解决什么样的问题或者它的最终实现目标是什么。很简单,因为目前ICT还处于pre-alpha阶段,所以还不能对它做出解释。有一些关于ICT的猜测,但在没有对它进行深入研究并理解它的内在机制之前,不应对别人谈论的东西做出猜测或评论。现在,我们仅来了解一下如何运行ICT。

步骤概述

CfB介绍了6个步骤来设置和运行ICT:

  1. 下载ict-0.1.1.zip
  2. 建立一个名称为ict.properties的文件,编辑该文件写入内容port = 14265并保存,与ict-0.1.1.zip放在同一位置。
  3. 运行命令:java -cp ict-0.1.1.zip cfb.ict.Ict ict.properties
  4. 将你的UDP端口地址(udp://IP:14265)告诉3-7个邻居(Ict目前不能添加邻居,只能请求其它邻居添加他们)。
  5. 观察Ict的运行,直到它崩溃并提示错误信息“not enough memory”。
  6. 保存Ict在控制台输出的最后报告,它可以在下一阶段的测试中用到。

测试设备的选择

CfB在Discord表示,用于测试ICT的设备性能越低越好,特别推荐的硬件是Raspberry Pi Minus One。我有一个Raspberry Pi 3b+并成功设置了ICT,但我所使用的组合调制解调器/路由器使我无法继续配置必要的端口,所以我忽略了CFB“最好使用树莓派”的意见,转而在规格和性能很低的VPS上运行ICT,即谷歌云计算的小型云实例:f1-micro(有使用时间和配额限制的免费机型)。

如果您想学习本教程,请先准备一个VPS——这里我解释了如何开通一个f1-micro云实例:Exploring IOTA #1

查看一下刚刚创建的云实例的硬件信息。在浏览器中打开SSH Web终端并键入:

:~$ cat/proc/meminfo
MemTotal: 606684 kB
....

意思是有606MB的内存,继续获取CPU信息:

:~$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 63
model name : Intel(R) Xeon(R) CPU @ 2.30GHz

为什么有0个处理器?

经过一番研究后发现f1-micro实际上是有一个超过0.2个虚拟CPU的共享内核(虚拟CPU是Intel Xeon E5上单独的硬件超线程)

更多详细信息,请浏览:探索谷歌云f1-micro实例。

然后检查一下系统使用的是哪个Linux发行版:

:~$ cat /etc/issue
Debian GNU/Linux 9 \n \l

下载ICT的ZIP包

现在下载链接已失效,而且因为不希望对现阶段的ICT测试造成影响,本文也不提供下载链接。如果你感兴趣,可以加入IOTA官方discord的#ICT频道来等待CfB发布下一个版本。

您可以使用桌面版SSH或谷歌云自带的Web版SSH导入ICT的zip文件。

探索IOTA ICT,在谷歌小型云实例f1-micro中测试ICT

Web版SSH会将文件上传到实例的主目录中,可以将它们移动到单独的新文件夹中以便操作,在此我们创建一个iota-ict文件夹:

:〜$ mkdir iota-ict
:〜$ mv ict-0.1.1.zip iota-ict
:〜$ cd iota-ict
~ / iota-ict $ ls
ict-0.1.1.zip

创建ict.properties文件

同在iota-ict目录下创建一个ict.properties文件:

〜/ iota-ict $ vim ict.properties
port = 14265

ict.properties的内容只有如下一行,确认无误后保存文件:

port = 14265

查看一下当前的目录/文件结构:

〜/ iota-ict $ ls
ict-0.1.1.zip ict.properties

现在在iota-ict文件夹下有了ict-0.1.1.zip和ict.properties这两个文件,后面可以准备运行了。

运行java

为了运行java,你需要先获取Java运行时环境JRE(大约需要480MB的磁盘空间):

sudo apt-get update
sudo apt-get install default-jre

检查一下Java安装后的情况和默认值:

java -version
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-1~deb9u1-b11)
OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)

最后启动ICT:

java -cp ict-0.1.1.zip cfb.ict.Ict ict.properties

其中-cp表示class path,当运行如下命令时可以获得更多信息:

$ java -help
java [-options] class [args...]
...
Where options include:
-cp <class search path of directories and zip/jar files>

意味着我们要在cfb.ict.Ict中指定主类并将ict.properties(指定UDP端口的文件)传递给主类。

正确执行后应该看到如下内容:

[2018-06-29T11:36:58.620] Ict 0.1.1
2018-06-29T11:36:58.725
Number of transactions = 0
Number of missing transactions = 0

程序没有终止,也没有输出任何其他的东西,因为我们的ICT还没有被邻居们添加,所以没有发生任何通信。 - 请继续后面的步骤。

将您的UDP/IP告诉3-7个IRI邻居

ICT目前不能添加邻居,只能请求其它邻居添加我们的ICT。

步骤分解如下:

一、查看VPS的IP地址:

$ curl ipecho.net/plain
12.123.123.123

二、查看是否可以正常连通

别人(邻居)可以通过端口14265上的UDP访问我的IP吗?

从运行ICT的谷歌云实例以外的实例上/联网机器上运行如下命令查看一下:

nc -v -u -z -w 3 12.123.123.123 14265
MySecondInstanceIP [12.123.123.123] 14265 (?) : Connection refused

该命令将UDP数据包发送到12.123.123.123的14265端口,3秒后提示Connection refused的连接错误。我们可能需要在防火墙中添加一些规则。谷歌云中有一个“VPC network”选项卡,您可以将这些规则(下图)添加到现有的规则中:

探索IOTA ICT,在谷歌小型云实例f1-micro中测试ICT

规则添加好后应该就可以了,再次使用前面的netcat命令检查一下是否可以连通。

三、请求邻居添加你的ICT

现在可以将你的IP和端口告诉3-7个完整IRI节点来添加你的ICT了。

首先,确保您已经再次启动了ICT。您可能希望它在后台运行,并将输出的内容记录到一个文件(ict.log)中。另外,要确保它在退出控制台或者重启/注销电脑后可以继续运行(使用nohup):

~/iota-ict$ nohup java -cp ict-0.1.1.zip cfb.ict.Ict ict.properties > ~/ict.log 2>&1 &
[1] 27870

执行此操作后得到了一个PID,您可以使用它来查看性能:

$ top -p 27870

当你以“直播”(实时查看)的方式打开ict.log时可以看到如下的内容:

~$ tail -f ict.log
nohup: ignoring input
[2018-06-29T12:55:31.521] Ict 0.1.1
2018-06-29T12:55:31.626
Number of transactions = 0
Number of missing transactions = 0

可以再次看出,在找到IRI节点添加ICT之前,不会发生太多的事情。

这部分相当棘手 - 你需要加入discord,并在#ICT频道里找到好心人添加你的ICT。我终于设法让三个邻居添加了我的IP,我想再次感谢他们帮我解决了这些小问题。

一旦邻居们成功添加了你之后,你就会看到:

Number of transactions = 114
Number of missing transactions = 1
2018-06-29T12:59:13.162
/IPaddressFromNode1:14600: 874 / 43 / 1 / 0 / 43
/IPaddressFromNode2:14600: 12 / 1 / 0 / 0 / 1
Number of transactions = 44
Number of missing transactions = 0

有人反编译了ICT zip文件夹中的类文件,我也试了一下 - 反编译后,对上述内容中加粗部分的数字有如下的解释。但这是猜测,因为我还没有理解代码。

  • 874 = numberOfAllTransactions
  • 43 = numberOfNewTransactions
  • 1 = numberOfInvalidTransactions
  • 0 = numberOfRequestedTransactions
  • 43 = numberOfSharedTransaction

在超出f1-micro云实例的免费试用时间或配额后会进入正常收费状态。我的ICT与4个邻居一起运行了两天,最后有从美国到EMEA(欧洲、中东、非洲三地区的合称)的4.5 GiB出站流量(这意味着这几个邻居分布在EMEA地区)。

在云实例不再使用时一定要关掉,否则会收费。

探索IOTA ICT,在谷歌小型云实例f1-micro中测试ICT

假设有平均每秒50-60KB的传出流量,相当于每天有4-5GiB:

{50, 60}KB/s * 60s * 60min/h * 24h/day = {4.3, 5.2} GiB/day

我可能在美洲有两个邻居(不收费),在EMEA有两个邻居(收费)。

在本文中,我们在谷歌云的f1-micro云实例上执行了ICT java应用程序。在下一篇文章中会继续探索IOTA ICT,下篇文章会尝试反编译ICT代码并了解这个预览版本实际上正在做什么。重点在于尝试 - 这可能会让我感到有点尴尬,因为我在java上的经验不足(也许很有趣)。通过深入的了解源代码,我们可以推测它可能会为IOTA,缠结及其愿景解决什么或做些什么 - 至少我可以再次尝试一下。

如果您有兴趣使用IOTA并通过探索来深入了解,您可以从这里开始:Exploring IOTA #1

本文涉及技术层面,可能存在部分内容翻译不精确的情况,如果遇到不好理解的地方,建议参照原文加深理解。

 

原文链接:https://medium.com/coinmonks/exploring-iota-ict-1-running-ict-on-a-cloud-computer-bc3d96b246ea

胖子李

专栏作者:胖子李

个人简介:我共发表了 190 篇文章,总计被阅读了653,996 次,共获得了 1,884 个赞。

作者邮箱 作者主页 Ta的文章

发表评论

邮箱地址不会被公开。 必填项已用*标注