V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pingme
V2EX  ›  程序员

如何实现 Webhooks 投递系统

  •  1
     
  •   pingme · 86 天前 · 1006 次点击
    这是一个创建于 86 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近项目要实现一个开发者平台,我负责 Webhooks 这块,初步构想后应该会需要一个 Webhooks 系统

    需求是这样的:把系统内部的事件根据用户在开发者平台订阅的事件,投递到对应的 HTTP 接口上。而且还要求能重试,后期也要允许用户在投递失败时能手动重试,而且每次重试也要有记录能看到

    • 在设计 Webhooks 系统时,有哪些最佳实践?
    • 怎么确保 Webhooks 的安全性,比如防止恶意攻击
    • 有什么框架或者中间件可以实现?
    8 条回复    2024-08-29 21:46:06 +08:00
    yinmin
        1
    yinmin  
       86 天前 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 之类的消息框架做开发
    kkk9
        2
    kkk9  
       86 天前   ❤️ 1
    最好加上目标服务器 ip 白名单机制,不在白名单 ip 的全部拒绝处理,不然运维会狠狠“谢谢”你的!
    julyclyde
        3
    julyclyde  
       85 天前
    @kkk9 用 IP 白名单,将来迁移的时候,将来的运维会“狠狠谢谢”现在的运维
    kkk9
        4
    kkk9  
       78 天前
    @julyclyde #3 你没做过吗? ip 白名单对运维是最基础的操作。况且,做 ip 白名单配合 iptables(或者安全组)可以从网络层就开始拒绝,直接杜绝了莫名其妙的大流量或者导致 cpu/ram 高
    julyclyde
        5
    julyclyde  
       78 天前
    @kkk9 iptables 加多了之后,绝大多数 cpu 时间都会消耗在内核 netfilter 上
    然后你就会发现进程虽然并不怎么占处理器,但性能就是上不去

    而且应用程序发行、升级的时候,很难对内核的状态同时进行管理
    julyclyde
        6
    julyclyde  
       78 天前
    @kkk9 还有个问题,就是你的通信“对方”发生变化的时候,居然你这边需要更改防火墙策略
    都发生严重的跨系统耦合了!!
    kkk9
        7
    kkk9  
       77 天前
    @julyclyde #6 对,你说的对,哈哈哈哈哈哈
    hiyyq3372
        8
    hiyyq3372  
       76 天前
    把 IP 白名单外包给云主机厂商
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3985 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 04:13 · PVG 12:13 · LAX 20:13 · JFK 23:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.