“作死”协奏曲 —— 同步

理想很丰满,现实很骨感,汇总一下这段时间自己的“作死”之秀,望好友们“引以为戒”,莫要像我一样捶胸捣足,真的是应了那句老话你以为你以为的就是你以为的

其实整个“作死”秀主要围绕着就是同步,亦可理解为协同办公(内心旁白:我不想每天背着那么重的电脑来回跑),可是作为一个“程序猿”,真以为下班出了公司就可以将正在进行的项目置之脑后么,为了自己的轻身大计,毅然决然的踏上了“作死”之路。

内容预告:ESXI普通主机安装, 设想的编译方式, 项目代码同步, 日常资料同步

0x00 现有环境铺垫

首先交代一下作为一个无证程序猿,整天所接触的是什么样子的,也为后续内容(个人数据管理)做个铺垫。

插个题外话:为什么不使用现有大厂商的网络存储?,作为一个对具有数据“收藏癖”的码农一枚,每一次的损失都是刀刀扎心啊

  • 使用过公网服务器存储(被黑)
  • 使用移动硬盘存储(使用不当,磁盘坏道,希望能有一种龟速磁盘数据恢复技术)
  • 使用微盘(新浪)收费后要求下载个人数据,速度慢到令人发指
  • 使用百度网盘、51网盘、360网盘、快盘等,都已面临或以后面临数据的被屏蔽和导出问题
  • ……
    所以,一直想把个人数据(日常照片、学习资料、软件、项目资料等)放到自己易管理、相对安全的地方,当然万事无绝对,但是再也不想经历那种彻夜龟速导数据的事情了。

简单的整理了一下目前的一些设备,如图:

设备网络拓扑

  • NAS设备主要负责静态数据的存储
  • 家里的服务器(退役笔记本)搭建并提供:nexus(maven, Nuget, Docker, Nodejs)包管理服务、git版本管理服务、Mysql数据服务、禅道(zentao)任务跟踪管理
  • 开发机主要日常办公开发使用(iMac)
  • Exsi平台,虚拟三台主机作为开发测试机
  • 阿里云ECS主要负责简单web服务、跳板\穿透
  • 笔记本和硬盘目前随身携带

0x01 ESXI普通主机安装

这里点出了一个普通主机,因为官方提供的ESXI的各厂商版本都有与之相对的工作站主机,其实能申请到一台主机(Dell办公主机 + SSD)已经万幸了,作为开发机意义不大,所以想着,可以搭建一套可控的测试环境,可以进行按照自己的需要来进行定制搭建(主要是不要走繁琐的申请流程),也可达到资源的最大化利用,所以最终选择安装ESXI

选择Dell版本的ESXI安装镜像,尝试U盘启动安装,果不其然,最后提示网卡驱动找不到,碰到问题那就解决它,并不可怕,按照硬件条件来制作自己的安装包吧。

启动到PE,然后查看硬件列表,可以看到主机网卡型号是Realtek RTL8186/8111 PCI-E,然后接下来就查找网卡的驱动,我们按照工具(ESXI-Customizer)的要求需要的是OEM.tgz或者VIB格式的驱动文件,如下图

ESXI-Customizer

可以在https://www.vladan.fr/ 来找到相应的驱动文件(目前还未深入学习如何迁移驱动,只能先找别人制作好的),然后使用ESXI- Customizer来打包制作新的安装镜像,制作完成后就可普通的安装方式一致了,然后完成ESXI的安装,最后就可以自由的创建我们需要的虚拟机了。

ESXI 宿主机信息

ESXI 虚拟机信息

0x02 设想的编译方式

由于有了空闲资源,所以就想给利用起来,不然放着也是一种浪费。刚好手头最近在搞一个开源项目,然后使用Gradle来进行编译,全量编译200左右个子项目,速度超慢超卡,分多少内存用多少,所以就打起了空闲主机的注意。

设想将两台主机(macOS + Ubuntu)的运算资源能否统一起来,比如在iMac上进行代码编辑,然后可以让空闲的Ubuntu来进行编译,而iMac还能干点别的事情,不至于时不时的卡顿。也许有朋友反应快,能想到用持续集成(CI)吧,如果只是简单的使用持续集成,那么就没有什么意思了,而我的设想是将项目编译所依赖的资源也能统一起来,比如依赖包、依赖的编译工具等。

由于是多台独立的主机,磁盘也是完全独立的,所以就想使用磁盘共享的方式来共享数据,说干就干。搭建NFS,想着在同一个网段,速度应该不会太慢,然后将Java SDKMaven BinMaven Repository先挂载上,进行个简单的编译测试,谁成想真是图样图森破。

速度简直慢的令人发指,自我感觉不应该是这种情况呀,最后和祖老师讨论了下,觉得这样对于内存来说可能省不了多少,所有文件都要走网络传输,再加上办公室的网络设备都不是企业级的,承受不起太大的流量,最后只好放弃了共享磁盘的方案,除非使用专业级的存储设备,或者,通过硬连。

退而求其次吧,只好先使用持续集成工具了,最后还是选择了熟悉的TeamCity,虽然是最基础的授权,支撑自己日常的开发工作也以足够。在使用TeamCity中遇到了一个比较好玩的事情,给TeamCity配置了多个BuildAgent,然后在配置项目编译流程的时候,想着直接通过mvn install到本地就哦了,结果多节点同步编译的时候,依赖仓库都在本地,所以常常出现找不到依赖包,这里需要注意的,只需要将被依赖项目使用mvn deploy,就可编译部署到私服上,就会自动进行同步使用。

关于将多台主机联合起来组成相对高性能的一台主机使用,也许接触的层次还不够,是时候再深入的学习学习ignite了,预感会有收获的。

0x03 项目代码同步 & 日常资料同步

终于聊到这个话题了,我感觉聊起这个我都觉得脸红,犯了一个让自己讲出来都觉得丢人的失误。

平时晚上在家会使用笔记本进行一些工作,白天到公司后,将会使用台式机,所以,两台计算机的一些文件应该是保持同步的,来达到协同办公。曾记得以前快盘等网盘支持同步功能,下载去找时好像也早已不知所踪,而且公司的一些资料也不能完全的随意上传下载,所以就试用了一下几种方案。

No.00 基于NAS的文件同步
利用家里现有的NAS服务,来提供文件同步功能,主要过程是在需要同步的主机上都安装NAS Client端,然后分别设置对应的目录关联,比如主机A上的AA文件夹,关联到NAS上的NN文件夹,在关联主机B的BB文件夹,这样就可以实现文件的传输同步了。

系统官方同步软件

奈何西数的服务在国内时长掉线,又因为考虑数据没敢换群辉,速度上尚可在忍受范围,所以可作为最末方案。此期间遇到一个可乐的事情,让我感觉到程序猿的思维太~

具体是这样的,在西数官网下载 NAS Client时,只能找到 Windows 版本,MacOS 版本就是没有,利用百度、Google进行搜索,都只有 Windows 版本,这可让我好一顿抓耳挠腮。太奇怪了,号称全平台支持,怎么就找不到呢?

当时就看着 windows 版本的下载页面看着发呆,西数的资源都是以资源ID的形式来提供出来的,比如: resource?id=288,如果我是他们,那么在版本上线的时候有很大概率会全平台通过测试后一起来发布的,那么在创建资源的时候,按照这种ID多数都是以自动序列存在,那么MacOS版本的发布,应该会和Windows版本相邻,那么资源ID应该就在288前后,这时脑中就想起一段广告语,我就秉着试一试的态度,买了三个疗程(敲了个回车),结果下载页面可就真出来了。看来,太习惯搜索引擎了,搜不到的就认为找不到了,这样不好。

No.01 基于Resilio Sync的文件同步

Sync Home

这个也是备受追捧的同步方式,可以实现P2P的同步,但是使用P2P就需要穿透服务,目前默认使用的是官方的同步服务,应该位于墙外面,据反馈会出现被墙的情况,在测试中没有遇到被墙。想着是自己搭建穿透服务,官方好像也提供了服务的部署包,没有深入的做具体的部署测试,只是对关注的同步服务做了测试。

整体来说,同步速度还是可以接受的,是个不错的工具,可以通过多种方式来进行分享,有访问连接生成的唯一序列二维码等方式。

就是在这个测试中遇到了让我脸红的问题,感觉速度很OK,然后就设置了笔记本(win10)上的项目目录和iMac上项目目录的同步。

结果问题就来了,不管在那边编辑后,然后另一边都无法正常的识别项目。突然间幡然醒悟,由于项目的同步,一些IDE的缓存文件也会被同步过去,因为一些系统环境变量、依赖软件安装目录等还有一些其他的因素,导致项目在不同平台上相同IDE生成的配置信息是不一致的。

看来,项目的同步还是乖乖的使用Git了,在家里搭建了git服务,有需要的小伙伴可以使用哦,访问地址:http://git.yhcode.com:88

No.10 基于Syncthing的文件同步

Syncting被誉为神器,因为是开源产品,官方地址为:https://syncthing.net ,在设计上应该是和Resilio Sync等其他的产品是一致的,也是支持P2P的传输方式,但是优势是开源。具体还没有正式搭建,不过想着速度应该都是差不多的,等有时间了,详细的搭建一套。

当然还有其他很多的同步产品,具体都就没有一一做测试了,有兴趣的朋友可以试一试,玩一玩。

最后,经过几番折腾,还是回到了nexus持续集成git的方式上了,这一圈,绕的我真是啼笑皆非。