最近项目要实现一个开发者平台,我负责 Webhooks 这块,初步构想后应该会需要一个 Webhooks 系统
需求是这样的:把系统内部的事件根据用户在开发者平台订阅的事件,投递到对应的 HTTP 接口上。而且还要求能重试,后期也要允许用户在投递失败时能手动重试,而且每次重试也要有记录能看到
1
yinmin 96 天前 via iPhone 2
1. 系统有自动重试机制,5 秒、30 秒、2 分钟、5 分钟、10 分钟、30 分钟、1 小时,之后每小时自动重试一次直到 24 小时
2. 每个 webhooks 有 1 个唯一 id ( 64 位 int ),在网络不稳定的情况下,客户程序会多次接收到 webhooks ,客户程序应根据唯一 id 避免重复处理同一个 webhooks 3. 如果同一客户的传输数量条目比较多,设计 webhooks 数据包时,支持一次 https 请求能携带多条记录(最多 1 次 200 条),能大幅提升效率 4. 非金融类的,可以 https 头部携带一个 apikey 做认证;金融类的,建议基于证书做数字签名。 5. 可以基于 rabbitmq 之类的消息框架做开发 |
2
kkk9 96 天前 1
最好加上目标服务器 ip 白名单机制,不在白名单 ip 的全部拒绝处理,不然运维会狠狠“谢谢”你的!
|
4
kkk9 87 天前
@julyclyde #3 你没做过吗? ip 白名单对运维是最基础的操作。况且,做 ip 白名单配合 iptables(或者安全组)可以从网络层就开始拒绝,直接杜绝了莫名其妙的大流量或者导致 cpu/ram 高
|
5
julyclyde 87 天前
@kkk9 iptables 加多了之后,绝大多数 cpu 时间都会消耗在内核 netfilter 上
然后你就会发现进程虽然并不怎么占处理器,但性能就是上不去 而且应用程序发行、升级的时候,很难对内核的状态同时进行管理 |
8
hiyyq3372 86 天前
把 IP 白名单外包给云主机厂商
|