谈谈 HomeLab

Play Aug 05, 2019

男人的浪漫就是 bare metal server.
毕竟,就算生活再怎么 fucked up,生命中也是有不可以丢弃的东西的。

只有娘炮才用云计算,真男人都是 bare metal

我们为什么需要 HomeLab

一个类似的问题是:我们为什么需要宠物/兴趣爱好/GPA/艺术……

所以,简短版本的回答和 Sheldon 为什么要用激光煮泡面一样:because we can

一个稍长的回答

如果需要一个复杂版本的回答,事情就稍显复杂了:

我们每天都在和不同的服务打交道。这些服务托管于不同的服务商之间,我们不知道服务商会做些什么。

  • 新的一天开始了,你打开 Gmail 处理邮件。邮件有点多,旁边是谷歌大数据为您精心挑选的广告,看起来很诱人。
  • 路过 Coyote Hill 景点看到了美丽的风景拍了张照片,发现自己的 iCloud 容量满了。于是只能存到 Google Photos 被当成 ML 训练数据。
  • 下班的路上想听点歌,发现最喜欢的歌手被网易云/Apple Music/Spotify 版权了,交钱都听不了的那种。
  • 回到家,买的全套智能家具无法和 HomeKit 联动。打开电视想看点喜欢的节目,发现哔哩哔哩还是没给 Apple TV 出客户端发现想看的节目在所在的地区被版权了,只能忍受各种盗版站恶心的广告和在线播放码率。
  • 在不同设备挪文件,网盘/U盘容量又不够,十几年来产生的上 TB 的数据没办法归类。
  • 在家里跑 ML 炼丹

你需要一个 HomeLab(上面运行的服务)。将权力从服务提供商手中收回,并且颗粒化管理。

Nothing you can't do, huh?

我们需要一个怎样的 HomeLab

「一个树莓派可以解决的问题」?并不是。

随着业务的发展,scalability 会成为一个棘手的问题。一个不能被简单 extend 的系统是一个糟糕的系统。一个树莓派,在初期也许运行的很好,但到后期遇到瓶颈需要升级算力、内存、磁盘、拓展卡 etc. 的时候,吃瘪[1]

就算不是树莓派,传统的 bare metal server 在后期也会有各种 scalability 的问题。后期服务跑得多了维护起来就是噩梦,想要切割还不如重新搞一个,还是吃瘪[1:1]

VPS?

你存个 4TB 的数据我看看,DMCA 了解一下

Docker?

Docker 是一个非常棒的思路。不如说,在很多情况下 Docker 已经可以满足绝大部分的需求(而且还十分简单)。

Docker 共享宿主机的内核。不过,当你需要跑一整个 OS(有没有种 PaaS 的感觉?)或者需要搞硬件各种控制器 passthrough 的时候,鳖[1:2]

VM

此处所指的 VM,特指 Type 1 Hypervisor。一个典型的例子就是 VMware ESXi (现在改名叫 vSphere 了?)

采用 VM 的实现,可以使很多问题简单化。你可以在一台 VM 里跑 pfSense 管理家庭网络,另外开着一个 VM 跑 nginx 做黑群晖的反向代理,并且跑着 docker 里的 cidercode-server 作为云 IDE 使用。这样的管理方式使得硬件成本大为降低,因为硬件资源的合理分配(和 RISC 处理器靠谱的通用计算能力)。加上现代处理器对虚拟化的良好支持(vt-d),直通的效率和 bare metal 不会有质的差距。

另外一个优点是,网络栈可以定制出非常复杂的拓扑以满足需求(安全、业务 etc),而物理上不需要任何变动。

我们从哪里获取 HomeLab

捡垃圾。

企业级垃圾吃了都说香。作为一名优秀的垃圾佬,买新货这种事是做不得的。

淘宝和 eBay 永远是你最好的朋友(除非你的室友正好换电脑)

我们怎样配置 HomeLab

我们现在还需要 RAID 吗?

Yes and No.

作为软 raid 的支持者,我认为目前没有必要使用硬 raid,因为造成的问题远超过软 raid(这方面有很多的分析,不赘述)。而软 raid 的巅峰 ZFS 可用性已经非常高,自动根据数据热度调度是个杀手级功能。

不过,遇到需要直通控制器的情况下,你依然需要一张 HBA 卡。关键字是 IT 模式,不要买错了。

安全

Servers are not human beings. They don't betray but you still need to be aware of hackers[1:3].

禁止密码登录、prompt limit 什么的都是老生常谈了。

一个反复重申的观点是:security by design。绝大部分安全事故都是因为糟糕的设计和配置。你不会想哪天有一个 French Hacker[2] 然后截取你所有的局域网通讯的。

考虑到绝大部分家庭用户,为了外部访问拉条宽带也不可能,只能在设计上尽量能达到「即便暴露在公网的网关被妥协也无法产生损失」。合理使用 vSwitch 和 VLAN,尽量将业务和本地 traffic 剥离(但考虑到麻瓜用户事实上这是个矛盾的需求,只能尽量增加攻击成本)。

所有暴露的服务都应当使用加密通讯并且定期更新软件包。这年头 CVE 五花八门什么都有。

将业务 VM 暴露在公网是个危险的行为,我不会这么干。

I don't understand any of this, shall I try?

No


  1. 大家都不是神,鳖总是得吃的,不过能不吃还是别吃,最好是看别人吃,真吃了含泪也得咽下去 ↩︎ ↩︎ ↩︎ ↩︎
  2. 恶意的政治隐喻 ↩︎

aLPHAtOAD

太年轻,太简单,有时候幼稚。