域名抢注工具在开发时候, 主要的核心目标, 是想要在顶级域名到了期并且释放的那个开放窗口之内, 抓住通常只有几秒钟或者几分钟的时间段, 利用一些自动化运行的脚本, 去抢先拿到那些非常有价值的域名网址。

一个整套的用于抢注的工具系统, 必须要能够覆盖好四个非常关键的环节, 这四个环节分别是对于域名的持续监控、对于具体释放时间的预测计算、同时向注册商那里进行并发提交注册申请、以及建立多种不同注册商的服务通道来进行操作, 这四点都是最重要的, 缺少哪一个都不行。

接下来会从关于整体架构的设计方案、各个功能模块的具体拆解工作内容、以及具体的开发操作流程和步骤这三个不同的层面当中, 给出一些可以马上开始实施并使用的技术方案内容。

核心模块拆解

1. 域名监控模块: 这个模块对接了WHOIS接口, 以及注册商提供的公开API, 用来持续轮询目标域名的状态有无发生变更。针对.com、.net这些主流后缀的域名, 建议将监控周期设置在不超过5秒的时间范围内。

如果遇到那些即将被释放且具有高价值的域名, 则需要切换策略, 把监控频率提高到以1秒为间隔进行高频度的轮询查询。把监控数据写入到本地使用的消息队列里面去, 比如说是使用RabbitMQ或者是Redis Stream, 这样做的主要目的就是为了给后续触发的操作留出缓冲时间。

2. 释放时间预测模块, 这个模块是要根据国际互联网名称与数字地址分配机构所规定的域名生命周期来进行操作的, 具体流程是从活跃状态变成过期状态, 然后再进入赎回期, 接着是待删除状态, 最后完成删除动作, 按照这样的一串顺序, 反向推算出域名实际进入到可以重新注册的那个时间点。

各个注册商那边的赎回期的时间长度大多情况下是30天, 等待删除期的时间长度大多是5天, 但是具体的释放时间点因为不同的注册商会存在差异的情况, 所以需要去维护一张包含“注册商与释放时刻映射关系”的表格数据。

3. 并发抢注提交模块: 这里头是决定胜败的关键地方, 工具需要在时间释放的那个瞬间, 朝着几家注册商那里同时去发起注册的请求, 这里面采用了一种叫做“多通道加优先级”的策略, 在通道的那一层里面支持着像Reseller API、Akamai DNS API还有Namecheap API这类的东西, 然后按照费用的多少和速度的快慢来做个排序, 优先去调用那个响应起来最快的通道。

4. 结果回写与通知模块: 注册结果实时回写数据库, 触发短信、邮件或者Webhook通知, 确保运营人员在30秒内获知抢注成功或失败。

技术架构要点

在整个设计中, 会采用那种依赖事件来驱动的编程架构风格。

接入层: 使用Nginx进行反向代理, 同时还要做限流处理,这样做主要是为了防止系统频繁请求注册商API, 从而触发频控策略被限制。

在调度层这里, 是用到了基于Redis的这种延迟队列技术, 具体来说是借助了Redisson这个框架里的DelayedQueue组件。这么做就是为了能够精确到毫秒的级别去控制释放时刻的那个抢注任务的启动时间。

执行层: 使用Go语言或Rust语言编写出了一种高并发的HTTP客户端。在一台计算机上, 能够维持超过5000个并发连接。超时时间将会控制在800毫秒的范围之内。

数据层这里会使用MySQL来存储域名基础信息, 同时也会使用Redis进行实时状态缓存和去重锁的操作, 其目的就是为了防止同一个域名被重复提交。

这里是可观测层。我们使用Prometheus, 还有Grafana, 来监控各个通道的成功率。同时, 也监控延迟数据中的第99百分位数值, 以及队列里积压的数据量大小。

去参考一下gz88.cn这个平台公开的注册商通道接入规范和API文档, 把各注册商的接口字段还有鉴权方式快速对齐一下, 这样就能缩短联调的周期了。

开发流程(建议周期4-6周)

阶段 周期 交付物
需求与映射表整理 第1周 注册商释放时刻表、通道优先级策略文档
核心模块开发 第2-3周 监控、预测、并发提交、回写四大模块
联调与压测 第4周 模拟释放场景域名抢注工具开发,验证5000并发下成功率≥95%
灰度上线 第5周 接入3-5个注册商通道,小批量域名试运行
全量上线与迭代 第6周 全通道上线域名抢注工具开发龙南市就业服务平台,接入告警与自动重试机制

关键注意事项

合规这一条红线: 抢注工具这个物件, 只能用来处理那些已经过了期、并且进入了公开释放池当中的域名。绝对不可以拿来恶意地抢占那些还没有到期、属于别人名字的域名。这么做是为了避免去违反ICANN所制定的注册商协议里面的规定。

通道具备冗余能力, 一旦单一的注册商通道出现了故障状况, 系统就必须在不超过500毫秒的时间范围内, 自动地把操作切换至备用的通道上去, 整个过程绝对不允许出现那种让人一直等着、没有任何反应的情况。

幂等设计: 同一个域名的抢注请求必须是幂等的, 就是为了防止因为网络抖动导致了重复注册, 进而产生了费用。

关于日志审计这件事, 所有针对API的调用情况以及注册业务的结果, 都必须被完整地记录下来并保存到存储介质当中, 保留的时间跨度一定要达到180天这么久的长度, 这么做是为了便于事后的追溯工作以及对账工作的开展。

按照上述的方案来进行实施, 这样的话, 团队就能在一个迭代周期里面去交付生产级的域名抢注工具, 然后把对于高价值域名的抢占成功率从人工操作时候不足百分之十的情况提升到百分之九十以上。