业务分析:考虑到存在恶意用户频繁访问系统,采用nginx限制ip的访问!
描述:用户请求浏览器,经过后台的nginx层,路由到gateway网关层,由网关对应到后端的微服务。其中nginx层可以统计用户请求的日志信息,例如用户的请求ip,地址,请求的url,参数,时间等。日志信息会存储到access.log,考虑到高并发场景,通过flilebeat的日志分析,将分析的日志数据通过kafka的生产者发送出去,由kafka的消费者消费日志消息,如果日志消息需要持久化,可以将日志消息存储到elasticsearch、redis、clickhouse中,此时不考虑关系型数据库mysql,因为性能不高,影响系统的使用,数据库崩溃,请求超时,日志消息数据通过flink进行流式处理,分组,统计,开窗,聚合等,统计出ip对应的数据在指定开窗的范围下请求的次数,把数据作为redis的key和value的形式存储到redis中。Key=ip,value=次数。有效期可以设置30分钟,然后通过Openresty+lua或xxl-job定时从redis中取数据,对于黑白名单的数据(每分钟大于1万次请求被认为是黑名单),筛选出来存放到blacklist.conf文件中,内容格式:deny 192.168.1.101;最后在通过nginx重新加载配置就会生效!