不准访问
- 积分
- 262
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2021-10-2
- 最后登录
- 1970-1-1
|
本帖最后由 小亩_4186c0d 于 2021-12-13 23:53 编辑
简单说一下我的思路。
既然这是一个IP black list service,那么就会有white list 功能;系统还要区分用途和处于OSI/TCPIP哪一层:应用内置黑名单,CDN防火墙,VPN防火墙和网站/机房防火墙。一般IP黑名单不追求强一致性,即不追求拉黑即生效阻断连接或线上交易等或者拉黑即推送到每台前置机器,所以预设场景:允许IP被拉黑了延迟10秒推送到前置服务器,最后再讨论拉黑即生效的强一致性方案。
数据结构有四种可能的方案:
1,int,将ip字符串转换为int存储数字;
2,bit,一个int可以标识32个点位,即32个IP是黑/白名单,如果只是IPV4,或者有限区间的IPV6地址,可以尝试。
3,int/long数字区间,因为IP通常都是按区间分配给ISP的,可以采用黑/百名单区间配合int/bit提升性能节约空间。
4,IP分级,需要给IP分类分级别允许进入哪些服务,触发了什么审计则降级限制服务,登入了账户则升级。
无论怎么设计,都不可能有存储xx.xx.xx.xx的可能。
数据量预估:
找Internet Assigned Numbers Authority等机构了解IP的规划,搞清楚一定封锁的预定义IP库;
然后是机构IP库和消费IP库,这部分应该不会很大,而且是连续IP,也是黑名单的热点库,大多数都是1-7天封锁。所以可以确定的是这个库不会很大。
初步估算,仅IPV4,则地址数为4,294,967,296(2^32)个;使用int&bit,则有4294967296个位可表示黑白名单,即占用512M的空间,可以直接利用缓存了。
数据库可以用MySQL或者其他,甚至可以用Mysiam,但是分布式的技术环节比较多,需要额外的DBA人员搭建和维护主从同步,不推荐。
NoSQL支持分布式同步数据,应该首选;自行设计文件数据结构则越少的存储,越高的性能;具体设计来说,IP黑名单系统可以避免使用ID主键,采用提交系统唯一ID+UUId为主键,这样可以主从互相同步互不冲突。10秒的时间,足够应付跨区域的数据更新同步了。
整体系统层面,单点故障用负载均衡,有LVS,DNS等方案;大流量采用限流降级访问,或者考虑采购ECS等弹性计算平台,当流量达到峰值可能需要应付突发的大量访问。
数据同步有NoSQL先在机房或者区域中心之间更新数据,然后由消息队列把数据从机房或者区域中心推送到下属负责处理IP的子系统,这里假设各子系统之间并不互相连接。
消息队列解偶数据库和子系统,子系统只接入机房或者区域中心数据库防止区域挂掉整体崩溃。
追求拉黑即生效的强一致性方案损失性能,可以采取补偿措施,即允许黑名单IP的数据短暂性的进入系统,但在最终业务系统时访问到中心IP数据库再做验证。
最后,既然是做IP黑名单,请买好 DDoS防火墙。 |
|