
一切始于「免费」二字
两周前,我们做了一个决定:推出免费模式,让更多用户体验 Reverie。
那天晚上,团队开了几罐百事可乐庆祝。(对,必须是百事。)
我们举着易拉罐碰杯,一边实时盯着用户注册数据往上涨。有人拉出了增长预测曲线图。气氛挺好的。
72 小时后,我们终于理解了为什么有经验的创始人总是看起来有点累。
接下来发生的事情,堪比游戏里的 Boss Rush——只不过我们是在被打的过程中学习机制。
但首先,最重要的事:您的账号数据、对话记录、个人信息,从未泄露,现在安全,将来也会安全。 我们有专门的安全团队 24/7 监控,这些攻击针对的是我们的资源和钱包,不是您的数据。攻击者想要的是我们的带宽和钱——您和 AI 角色的对话从未处于风险之中。
好了,让我们讲讲发生了什么。
第一劫:爬虫大军
发生了什么
免费开放第二天。早会。工程师随口说了一句:「诶,我们的角色 API 昨天请求量涨了几百倍。」
我们:「哇,免费版效果真好!」
工程师:「……但 DAU 基本没动。」
尴尬的沉默。
我们扎进日志里,发现了爬虫正在系统性地收割我们的公开角色数据。名称、简介、头像——这些公开可见的信息。全都被机器人吸走。
需要说明的是:角色的核心描述、性格设定等私密内容从未被暴露——只有创作者自己能看到这些。但即使只是公开信息被大规模爬取,对于想要建设健康平台的我们来说,也是挺让人沮丧的。
我们怎么应对的
- 对角色发现功能实施分页限制(你可以浏览,但不能把整个库下载走)
- 部署了智能限流,能区分「热情的用户」和「肯定是机器人」
- 建立行为分析来检测和阻断爬虫模式
- 给确认的坏家伙们准备了一些……姑且称之为「创意回应」
学到了什么
「开放平台」不等于「自助餐随便吃」。即使是公开可见的内容,也应该有合理的访问边界。我们希望用户发现角色——而不是有人一夜之间建起一个竞品数据库。
第二劫:流量刺客
发生了什么
爬虫的洞刚补上,第二波就来了。这次直奔钱包。
有人找到了我们的媒体资源 URL,开始批量下载平台上的每一张图片和每一个视频。角色头像、生成的视频。只要有文件后缀的东西,全都被以最大速度拉走。
我们用的是某大厂云的 OSS 服务。按流量计费。当时觉得挺合理的。
周一早上。财务打开云控制台。账单页面开始加载。
他的表情:😐
页面加载完成:😮
看到实际数字:😱
「那个……我们现在的带宽账单比三个月的跑道都高。」
Slack 群里突然变得很安静。有人紧张地建议干脆把 CDN 关掉。另一个人指出那样整个平台也就关了。
我们怎么应对的
紧急迁移。目的地:Cloudflare R2 和 Cloudflare Stream。
在这里,我们必须正式感谢 Cloudflare —— R2 的零出口流量费政策救了我们。当你看着账单每小时涨几百美金的时候,「零出口流量费」就变得非常、非常实际了。
迁移花了 30 个小时。睡眠变成可选项。凌晨 3 点的代码审查有一种冥想的气质。
值得吗?绝对值得。我们的带宽成本下降了 90% 以上,攻击者的批量下载现在基本不花我们一分钱。
学到了什么
选择基础设施的时候,不要只问「它有多快?」还要问:「如果明天有人攻击我,我还付得起房租吗?」
这个基础设施规划的维度在大多数教程里都不会出现。但它应该出现。
第三劫:DDoS 驾到
发生了什么
我们终于稳定了带宽的事情。团队士气正在恢复。早会上甚至有人开了个玩笑。一切都在好转。
然后 DDoS 来了。
想象一下用消防水管对着一个纸杯喷。我们的数据库连接池就是那个纸杯。每秒数千个请求,全都要求新鲜数据,全都拒绝用缓存,全都打在需要数据库查询的端点上。
我们的监控大屏看起来像心脏病发作的心电图。响应时间从 200ms 涨到 20 秒。然后变成超时。用户开始报告错误。我们的 AWS 账单开始了那种每隔几分钟就刷新出一个更大数字的表演。
数据库连接池达到了上限。查询开始排队。队列开始积压。经典的级联故障,在我们眼前实时发生。
我们怎么应对的
我们把知道的每一种缓存技术都扔了上去:
- ISR(增量静态再生) — 热门页面现在在边缘节点预渲染。数据库根本不知道这些请求的存在。
- 多层缓存 — 响应缓存、查询缓存、连接池优化。如果数据不是绝对需要实时的,就缓存起来。
- 数据库查询优化 — 一些以前要 500ms 的查询现在只要 50ms。持有连接的时间越短 = 可用连接越多。
- Cloudflare 的 DDoS 防护 — 终于把那些我们一直「以后再配」的安全功能全都启用了
- 智能限流 — 正常用户畅通无阻;攻击流量请出门左转
核心哲学:如果一个请求可以不碰数据库就回应,那它就应该不碰数据库。
学到了什么
缓存不只是性能优化——它是安全架构。当攻击来临时,缓存响应吸收冲击。数据库得到保护。网站保持在线。
还学到了:「安全配置以后再说」是一种很快就会过时的哲学。
第四劫:薅羊毛专业户
发生了什么
这一波没有直接威胁我们的基础设施。它威胁的是我们的预算。
我们构建了这么多美好的免费 AI 功能:
- AI 创建角色 — 描述你的角色,AI 生成完整资料
- AI 生成 Moment — 用 AI 辅助创建动态故事片段
- AI 创建插件 — 用自然语言构建角色插件
我们的愿景很美好:降低创作门槛。让每个人都能体验 AI 辅助创作的魔力。让平台更加普惠。
但有人的愿景不一样:「免费 API?让我写个脚本调用它一万次。」
我们看着 AI token 消耗仪表盘往上涨。涨。涨。图表看起来像一根曲棍球杆,只不过这根曲棍球杆是用我们银行账户流出的钱做的。
每次 AI 生成都是实打实的成本——调用语言模型的 API 不是免费的。看着成千上万的自动请求烧掉我们的 AI 预算,感觉就像看着一辆兜圈子的出租车的计价器。你知道它会很贵,而且它永远不会停下来。
最糟糕的是?这些甚至不是真正的用户在创造真正的内容。只是……有人在测试他们能榨取多少免费资源。生成的角色全是乱码。Moment 毫无意义。纯粹的浪费。
我们怎么应对的
带着沉重的心情,我们给这些 AI 功能加上了积分要求。
这个决定真的很痛。我们花了好几周专门为了让创作更普惠而构建这些工具。现在我们不得不给它们标价——不是因为我们想这样,而是因为无限免费正在被武器化来对付我们。
我们尽量做得公平:
- 正常使用的积分成本很低
- 新用户会获得免费积分
- 核心聊天体验保持免费
- 只有资源密集型的 AI 生成需要积分
但还是。感觉像是给一扇我们想保持敞开的门装上了锁。
学到了什么
「免费」是一种商业模式,不是一种道德立场。
我们仍然相信普惠。我们仍然想降低门槛。但「对所有人无限免费」只有在所有人都善意行事的情况下才能运作。当坏人利用慷慨时,慷慨的系统就变得不可持续——然后谁都得不到任何东西。
合理的限制不是对用户的不信任。它是对服务所有用户的生态系统的保护。替代方案——彻底关闭这些功能——对所有人都更糟。
有时候保护公地意味着建一些围栏。
您的数据是安全的(让我们说得绝对清楚)
我们想毫不含糊地说明这一点:
这些攻击针对的是资源,不是数据。 攻击者想要的是:
- ✅ 我们的带宽(用来下载内容)
- ✅ 我们的算力(用来压垮服务器)
- ✅ 我们的钱(用来榨干 AI 预算)
他们没有获取到:
- ❌ 用户账号
- ❌ 对话记录
- ❌ 个人信息
- ❌ 支付详情
- ❌ 任何私人数据
我们有专门的安全团队 24/7 监控真正的安全威胁。用户数据在静态和传输时都经过加密。访问控制严格。认证机制健壮。那些不会成为精彩博客文章素材的、枯燥但重要的安全工作——我们全都在做。
零用户数据被泄露。 我们可以自信地说这一点,因为我们记录了一切、分析了一切、验证了一切。攻击者从我们这里得到的是带宽账单和头疼。他们从您那里什么都没得到。
您的角色、您的对话、您的创作——全部安全,全部完整,全都在它们应该在的地方。
为什么要公开说这些
你可能会问:为什么要公开分享这些?这不是显得很脆弱吗?
我们仔细想过这个问题。
透明建立信任
我们在请求用户信任我们来承载一些有意义的东西——他们的创作、他们与 AI 角色的情感连接、他们的对话。这种信任需要我们对面临的挑战保持诚实。
老套路是把问题藏着掖着直到爆发,然后发一份含糊的「我们遇到了技术困难」声明。我们更愿意坦诚相待:发生了什么,我们怎么处理的,我们学到了什么。
其他创业者可以借鉴
我们不是第一个推出免费功能后被攻击的小团队,也不会是最后一个。如果我们花钱买来的教训能帮助其他人更好地准备,那对整个生态都是好事。
就当是我们对「创业学校里不教的东西」课程的贡献吧。
您有权知道
有些用户在这几周注意到了响应变慢。有些注意到了某些功能现在需要积分。您应该得到一个解释——不是企业公关话术,而是真实的故事。
我们一直在战斗,努力保持平台运行。我们在压力下做了艰难的决定。其中一些决定影响了您的体验。您应该知道为什么。
接下来会怎样
我们不只是在补漏洞——我们在构建一个更有韧性的平台:
已经完成的:
- 边缘优先架构的多层缓存(您的请求更快了,而且我们更难被攻击)
- 带行为分析的智能限流(机器人被阻断,人类用户无感)
- Cloudflare 完整安全套件(终于正确配置了,不是「以后再说」)
- 资源密集型 AI 功能的积分制访问(可持续的慷慨)
即将到来的:
- 增强的异常检测(更早发现攻击)
- 地理优化(让所有地方的用户都更快)
- 更复杂的滥用预防(领先坏人一步)
不会改变的:
- 我们会尽力维持免费层访问——但它可能不稳定或随时调整
- 用户数据隐私和安全——永远是最高优先级
- 透明沟通——如果出了问题,您会知道
给同行的几点建议
如果你也在做一个开放平台,这是我们用真金白银(和真实的压力)换来的教训:
- Rate Limiting 不是可选项——从第一天就要有,不是等到被攻击的那天
- 选择抗攻击的基础设施——Cloudflare 是真的好用;出口流量费会毁掉你
- 激进地使用缓存——它是性能和安全的双重盾牌
- 免费功能需要边界——无限的善意会被无限的坏人利用
- 监控一切——越早发现异常,损失越小
- 留点应急预算——你永远不知道下一波攻击什么时候来
还有可能最重要的:
- 不要太骄傲而不愿求助——独立开发者社区比你想象的更愿意互相帮助
希望你不用像我们一样付出昂贵的代价才学到这些。但如果你不幸遇到了,要知道你不是一个人。
致我们的用户
被攻击是一种奇怪的体验。
就像你花了好几个月装修了一个温馨的客厅,把家具摆得恰到好处,摆好零食,给所有朋友发了邀请。开幕夜到了。朋友们来了——太好了!
但同时:一群你从未见过的人开着搬家卡车出现了,试图拆掉你的沙发,给你房子的每个角落拍照,而且不知道怎么还在厨房里放了几把小火。
我们有选择。我们可以把门焊死。改成邀请制。让每个人在看到任何东西之前先证明他们不是机器人。
我们没有这样做。
相反,我们装了更好的锁。雇了更聪明的保安。建立了合理的访客规则。因为绝大多数来到 Reverie 的人都是来创作、交流、享受的。 我们不会因为少数人的行为而惩罚多数人。
派对继续。门保持敞开。我们只是更擅长识别那些开着搬家卡车的人了。
感谢
感谢每一位在响应变慢和积分要求中坚持陪伴我们的用户:谢谢你们。
感谢每一位报告问题而不是直接离开的用户:谢谢你们。
感谢分享建议和战斗故事的独立开发者社区:谢谢你们。
感谢 Cloudflare:谢谢你们。 🙏
我们现在更强了。更有韧性了。经过了战斗的考验。从这些攻击中走出来的平台比走进去的那个更好。
下次我们写信给你们,希望是宣布一个令人兴奋的新功能。
而不是又一个我们打败的 Boss。
不过话说回来——如果又有 Boss 出现,我们也能搞定。
下次更新见。💙
Reverie 团队
2025 年 12 月
