成都的寒假,我买了一堆二手的 M1 Mac Mini

苹果正式发布 M1 芯片那天,我盯着那几张性能对比图看了半小时,脑子里就一个念头:我那堆爬虫脚本,是不是能跑得更快、更省电了?这念头一出来就压不下去,像毒瘾。成都的冬天湿冷,我直接下单了三台二手的 M1 Mac Mini,堆在工作室角落,像三个沉默的银色方块。

团队刚接了个大单,要求是每天从几十个目标站稳定抓取数据,数据量级在百万条。之前用的方案是四台老旧的 Intel NUC 加一堆云服务器做代理池,电费账单和运维复杂度都在飙升。最头疼的是反爬,对方网站用了一套动态渲染加行为检测,我们得用 Selenium 集群去模拟真人操作,资源消耗巨大,一个节点卡死就可能引发连锁雪崩。我算过账,光是维持这套系统的电费和云服务开销,就吃掉了我接近30%的毛利。管理那帮程序员更累,天天跟我扯什么“技术债”、“架构重构”,其实就是不想碰这些脏活累活。

所以 M1 的出现,对我来说不是科技新闻,是救命稻草。ARM 架构、统一内存、能效比,这些词在我眼里自动翻译成:更低的单机成本、更强的单机性能、可能更稳定的运行环境。我赌的就是苹果的软硬一体优化,能把我那些 Python 环境、Chrome Driver、还有自己写的多进程任务调度器,全部碾平。

机器到手那天晚上,我让团队都先回去,一个人留在办公室。拆箱,接线,开机。第一个挑战就是环境迁移。大部分 Python 包都还没提供 ARM 原生版本,得靠 Rosetta 2 转译。我一边用 Homebrew 重装,一边盯着终端里滚动的编译信息。`pip install` 常见的包还行,但碰到一些依赖特定 C 库的,比如 `lxml` 或者某些图像处理库,就报各种稀奇古怪的错。我得一个个查资料,改编译参数,甚至手动去 GitHub 找别人打好的实验性 wheel 包。

那种感觉很奇怪。不是烦躁,是亢奋。就像你面前摆着一台未知性能的新引擎,你得亲手把它调教到最佳状态。编译 `scrapy` 和 `selenium` 环境花了最长时间,我不断在几台机器之间切换,用 `htop` 看 Rosetta 2 的转译进程占用了多少 CPU,测试启动一个无头 Chrome 实例到底需要多少秒。对比数据出来了:同样一段解析复杂 DOM 树、提取并清洗数据的脚本,在 Intel i5 的 NUC 上平均耗时 8.7 秒,在 M1 Mac Mini 上,即使经过转译,也只需要 3.2 秒。功耗?NUC 跑起来风扇狂转,整机功耗接近 40 瓦;M1 那边安静得像没开机,功耗仪显示不到 15 瓦。

我靠在后仰的办公椅上,看着三台机器终端里绿色字符匀速滚动。那一刻,什么管理烦恼、客户催逼、现金流焦虑,都被这种纯粹的、硬件碾压带来的效率快感暂时覆盖了。我知道问题还在,团队管理的一地鸡毛明天太阳升起照样得面对。但至少在这个湿冷的成都寒夜里,我手里有了更锋利的刀。我盘算着,用这三台小盒子,或许能替换掉一半的 NUC 和云服务器,把每月硬成本砍下一大块。省下来的钱,是能多招一个人,还是能让我自己喘口气?

省成本只是第一步。我脑子里已经开始想更野的路子:如果单机性能这么强,我是不是可以尝试把一部分简单的反爬逻辑,从“用更多节点去撞”的思路,改成“在单节点上用更复杂的策略去绕”?比如,用更精细的鼠标移动轨迹模拟,或者本地缓存并动态复用一部分解析过的页面结构?这需要重写一部分核心代码,但值得一试。M1 给我的不是现成的答案,是一个新的可能性空间。我起身又给自己冲了杯浓茶,今晚估计是睡不了了,得把分布式任务队列的配置,针对这三台新家伙重新调优一遍。

© 版权声明
THE END
喜欢就支持一下吧
点赞71 分享