因为业务需要,需要部署各种区块链公链需要支持的节点,也就是钱包服务,和全球开放的节点进行同步。大部分钱包程序都不成熟,所以经常需要手工维护和节点数据的备份处理。这在同行的经验分享的时候发现大家都在全量的使用容器技术来部署钱包节点。所以,我也在这里和大家分享一下容器技术在单体的钱包服务部署过程中应该注意什么,如何优化。
1、镜像的优化,作为基础镜像,一般会选择alpine镜像作为基准。在一般的容器优化推荐中,大量的实践推荐都是以短小精悍的OS体积作为评判标准。这个本身没有错,但是我们也要考虑钱包服务目前都是不成熟的组件,很少有在alpine上做过基准测试的,很难发挥完整钱包的能力。这块,我的策略是以官方提供的Dockerfile作为基准构建自己的镜像,不要去浪费精力在镜像构建上。
2、镜像分发和构建有可能会遇到GFW拉不下来的情况,尤其是依赖环境组件包拉不下来。所以我的策略是在香港丢一台做构建就可以。
3、钱包是各种语言构建的,版本又很多。网上构建好的镜像又千奇百怪。所以,能自己构建的,就不要用别人的。就是有比较好的,也依据Dockerfile自己构建一遍。这样可以帮你梳理清楚步骤并在遇到问题的时候可以心里有一个线索。
4、最好部署一次,就可以重复的复用部署脚本。这块网上现成的大多也不完整,我整理了一份放在github上,大家可以参考。目前区块都在1T一下的,所以要提前准备好挂载数据的盘的大小。支持k8s. https://github.com/xiaods/ethereum-client-k8s-setup
5、本来我已经作为节点同步,流量会比较大,把UDP端口给屏蔽了。但是后来发现关闭UDP就没有人来连接我的钱包节点。细想一下,P2P网络不开放udp扫描端口肯定不能带来节点拓扑图的,应该开放。注意对于公有云上,udp的网络端口是很容易被屏蔽的,合理的办法是和服务商通气,了解规则。
6、因为每个钱包就是一个RPC服务,所以按照业务需求,对于有大量请求的钱包可以部署多个钱包,前面挡一个LB就可以负载RPC 请求。
7、SSD的盘是必须的,不然可能一个月都不一定能同步完像Ethererum这样的超级火爆的公链。其他公链可以忽略,都不是很热,包括BitCoin链都很快。所以目前最难吭的就是以太坊,其他都还好。
8、使用集群系统如Kubernetes来管理集群是最好的解决方案。俗话说的好,工具用的好,下班回家早。这里很多第一次接触Kubernetes的,对编写deployment,statefulset不太熟,这个没有办法,唯一的办法就是多练手。或者参考我的部署脚本。https://github.com/xiaods/ethereum-client-k8s-setup
9、对于存储这块,最重要的是node节点数据,非常重要。所以可以备份一份,方便复制节点的时候可以直接copy。因为钱包都是单点P2P,可以直接使用复制过来的数据,很方便。
10、因为大量的Docker版本都已经进入18年的新版本,当前镜像的构建里面都会加上USER指令。在这个的目的是限制容器进程用非root账户执行,以防安全信息的权利泄露。所以你在挂载目录的时候,一定要在集群层面指定使用userid为1000的用户来执行,不然会失败。这里1000是一个经验值,不是什么特别的设置。请注意,你直接赋值nobody也可以。
容器技术在云计算领域已经铺天盖地的大量采用,但是真正能使用好,大家都是要结合自己的场景来做优化的。工具都是死的,只有在业务需求的历练下,容器技术才能发挥出威力。
登录后评论
立即登录 注册