价格公开的 Cloudflare Bot Management 替代方案
Cloudflare 的机器人产品很强,而它的价格是一场对话。不把整个站点放到代理后面,你会失去什么,又能拿回什么。
你实际上在比较什么
这两个产品形态不同,假装它们相同对谁都没有好处。
Cloudflare Bot Management 是反向代理的一部分。你的 DNS 指向 Cloudflare,全部流量从中经过,机器人评分只是途中所做的众多事情之一——与缓存、WAF、DDoS 吸收和 TLS 终止并列。它的识别确实出色,依托的是任何独立厂商都拿不到的那一份全球 Web 流量。
Karma 是一项评分服务。代码片段和你的网关送出信号,判定返回,由你自己的基础设施据此行动。你的流量路径没有任何变化。没有代理、不用搬 DNS、没有 CDN。
所以诚实的问题不是「谁识别得更好」,而是:你希望机器人识别成为你网络边缘的一项属性,还是成为你现有边缘去咨询的一项服务。
Cloudflare 领先的地方,直说
四点,没有一点是小事。
- 观测规模。Cloudflare 看到相当大一部分互联网。只要某个僵尸网络碰过其中任何一处,它在抵达你之前就已经为对方所知。我们看到的是我们客户所看到的,这个窗口小得多。
- 它不止是机器人识别。如果你同时还需要 CDN、WAF 和 DDoS 吸收,从一家厂商作为一个产品买下来,比拼装三个更便宜也更省事。
- 拦截本来就在那里。决定就在做出它的那一跳被执行,你的技术栈里不需要任何集成工作。
- 成熟度。更多的部署、更多已经遇到过的边缘情况、更多由比你先踩坑的人写下的文档。
约束一:站点不能放到代理后面
Bot Management 要求流量经过 Cloudflare。对许多团队这没问题。对一部分团队不行,而原因通常是结构性的,而非偏好问题。
受监管的数据驻留。如果监管机构或客户合同要求流量在指定司法辖区终止,那么关于「经由全球 anycast 网络路由」的讨论,你未必能赢。
TLS 终止。Cloudflare 终止 TLS 以检查请求。有些组织无法交出私钥,也无法接受加密路径中出现中间方,任何合同层面的保证都改变不了这一点。
你已经有了边缘。如果你自己运行负载均衡器、自己的 WAF 和自己的 TLS,在它们前面再加一个代理不是小改动,而是一次带着自身故障模式的架构重整。
Karma 站在你已有之物的旁边。信号出去,判定回来,请求路径分毫未动。
约束二:你得在通话之前就知道价格
Bot Management 属于 Enterprise 功能。价格取决于你的流量、你的合同和你的谈判,而你要通过与销售交谈才能知道。
对大型组织这是一种正当的销售方式,对其他所有人则是实实在在的障碍。一个只想知道答案是每月 50 美元还是 5000 美元的团队,得先约一次通话才能弄清楚;等弄清楚时,两周已经过去了。
Karma 的价格都在定价页上,全部,包括最高一档。计费单位是判定——一次真正做出了决定的完整会话——免费档是每月 25,000 次判定,永久有效,无需绑卡。
你大概九十秒就能知道这个产品是否在预算之内:也就是读完这一页的时间。
约束三:你需要能解释一次拦截
Cloudflare 返回 1 到 99 的 bot score,在 Enterprise 上还会给出一些关于哪个识别引擎产生了它的细节。这比大多数产品更可解释,但归根结底仍是在别人系统内部算出的一个数字。
当客户打电话来说结不了账,你需要的不是一个分数。你需要看到是哪些信号产生了这个判定,才能判断这次拦截是否正确;如果不正确,才能修好导致它的那条规则。
Karma 在面板里展示每一次判定背后的信号。这个说法比「识别更好」谦逊,而在客服队列里更有用。
并排对比
各自的位置:
| Cloudflare Bot Management | Karma | |
|---|---|---|
| 部署方式 | 代理——DNS 指向 Cloudflare | 代码片段 + 你的网关;流量路径不变 |
| TLS | 由 Cloudflare 终止 | 仍归你自己 |
| 识别语料 | 全球 Web 流量的很大一部分 | Karma 客户所看到的 |
| 拦截执行 | 在 Cloudflare 的边缘 | 在你自己的网关上 |
| 决定是否可解释 | 分数,Enterprise 另有引擎细节 | 每次判定展示信号 |
| 还提供 | CDN、WAF、DDoS 吸收 | 仅机器人判定 |
| 价格 | Enterprise,需联系销售 | 已公开,每月 25,000 次判定内免费 |
| 合同 | 通常按年 | 按月或按年,随时取消 |
两者同时使用
这不是二选一,对许多团队来说合理的最终状态是两者兼有。
把 Cloudflare 留给它无可匹敌的事情:吸收洪泛攻击、缓存、拦下显而易见的东西。在你需要一个自家应用能够据以推理的判定处加上 Karma——结账、登录、给合作方的 API——以及在你需要看清某个具体访客为什么被拦下的地方。
代码片段在代理后面工作良好。请确保网关转发原始客户端地址,否则判定针对的将是 Cloudflare 的边缘而不是访客;并在启用任何拦截之前,把 Cloudflare 自身的探测请求加入放行名单。