我因为软件漏洞而卖掉了我的创业公司:我真希望当时有这个无服务器代码仓库!
2021年,我创办了一家名为Linvo的初创公司,这是一款LinkedIn自动化工具。它盈利颇丰,但资金消耗速度也很快。
我可以告诉你,我年轻创业的时候(完全靠自己白手起家)赔光了大部分积蓄😆
我的系统一直出现故障;我不是世界上最好的程序员,但请允许我详细说明一下。
木偶师会消耗你的记忆力
Linvo 在其发展历程中经历了几次迭代。我使用了我熟悉的技术:React 和 NestJS。
基本上,任何自动化的云端数据抓取都是通过创建任务并解决这些任务来实现的。
它看起来大概是这样的:
- Cron 每 10 分钟运行一次,查找要执行的新任务,并将其发送到队列中。
- 工作人员从队列中领取任务并进行处理。
- 将所有数据保存到数据库。
这是一个非常简单的解决方案,运行在多个 EC2(AWS)和 Redis 实例上。
理论上应该可行——是的,你需要水平缩放工作线程,但这并不是我的问题。
我开始遇到另一种问题——内存泄漏。
您可能知道,Puppeteer(一款基于 Chromium 内核的自动化浏览器)非常占用资源(就像您电脑上的 Chrome 浏览器一样),我当时运行了很多这样的程序——它们不仅占用了大量内存,导致服务器停止工作,还占用了大量的互联网带宽。
需要解决方案
重构听起来像是——是啊,我们来做吧,但是我的 Intercom 支持团队已经积压了大量的支持工单(我已经有很多用户了),我知道我必须进行一些疯狂的重构。
我想到一个解决方案——让我们使用 AWS Lambda。
- Lambda 启动
- 完成这项任务
- 死亡(大多数情况下)
它不会占用你大量的网络资源。
它即使坏了也不会造成内存泄漏。
它的成本略高,因为 Lambda 函数原本就不是设计用来无限期运行的——那样就违背了 Lambda 的初衷,但我当时实在没办法了。(不过好处是你不用考虑规模问题。)
以下是新的基础设施:
- 事件桥接定时任务每 1 分钟运行一次(这是最低频率)。
- Lambda 函数会为队列创建六个事件(使其类似于 cron 每 10 秒运行一次)。
- SQS队列(再见,Redis)
- Lambda 函数自动扩缩容(好耶?)
供应商锁定
正如你可能从上下文中了解到的那样——我现在已经完全投入到 AWS 中了,但我并不介意——我只是想知道如何在我的电脑上测试它。
以前我用过Sam 。它和Serverless差不多,都能快速搭建整个环境。
没错,他们确实提供本地测试服务。他们可以将你的 Lambda 函数转换成端点!太棒了!
但我当时使用的是 Event Bridge、SQS 和 Lambda 函数。这根本不可能。
我接触过LocalStack。它本应帮助我在自己的电脑上构建完整的 AWS 堆栈,但当时很多功能都不支持,例如 Lambda 层。而且,使用它让我感到不知所措。
所以我开始创建自己的基础设施,我在 AWS 上部署了一个“测试”SQS,并用它运行本地代码(一个调用函数的函数),结果很糟糕。
我以前在生产部门工作表现不好;感觉那时候工作环境很压抑。
我当时只想摆脱这个创业项目;我甚至免费提供给别人,把客户都拿走,然后自己也摆脱了这个问题。
简而言之,我成功地以低价卖掉了这套系统,但最近,我发现了一些有趣的事情。
Winglang——一种类似 TypeScript 的云端方言
我想我的痛苦是真实的,虽然如果当时能找到它我会更开心——但我很高兴它今天仍然存在。
Winglang可以帮助你构建和我一样的云基础设施,但它的优点在于:
- 它不需要你使用任何配置文件。你基本上可以用代码定义整个基础架构(你可以查看他们的完整预发布和发布中文档)。
- 您可以在本地运行它——感谢上帝🙏🏻🙏🏻🙏🏻🙏🏻,所有基础设施都已包含在内。
- 你可以把它部署到任何云服务提供商,不一定非得用AWS。他们可以生成任何Terraform或CloudFormation脚本,方便部署。
我和 Winglang 的创始人 Elad(著名 CDK 的开发者)聊过,他说了一些让我感到不安的话。
你甚至可以在飞机上继续你的项目,并编写测试🤯
我自己都无法给他们足够的星星——但请帮我个忙,给他们的代码库点个星,当然,也请在你的下一个项目中使用它。
https://github.com/winglang/wing
结语
我真对Winglang感到生气。我希望他们早点这么做。现在才出现。现在明明都是人工智能啊?
我创建了一个新的 YouTube 频道,主要内容是关于科技、开源和市场营销的 :)
如果您对此感兴趣,欢迎在此订阅:
https://www.youtube.com/@nevo-david? sub_confirmation=1




