给一个 isMaliciousIP api, design a system to catch malicious IP
如何ban掉一些 malicious ip address, 问了很多data partition, table design,sql no sql的问题,staff问的
Design Blacklist service, 提供一个isMalicious(ip)的API,设计系统防止恶意攻击。主要难点在于sync各个server的blacklist,initialize new added server…
functional/non-functional requirements 假设一天1Billion访问量,5%是malicious ip造成的,估算下QPS和storage,可以跟面试官negotiate. High level LB layer, app server layer 然后request manager,ip要是没见过直接调用api,然后存进数据库。
请问老师,这个有什么大概思路或者设计图嘛?非常感谢
1 个赞
logic
2021 年9 月 18 日 05:58
2
这道题的 non-functional requirement 跟 ratelimiter 比较像,需要比较高的性能,因为每个 request 都要过一遍这个 API,所以不想额外加太多的延迟。
系统的核心就是存储一个黑名单,一旦 isMalicious 返回 true,就加进黑名单。处理 request 的时候发现在黑名单就直接 block request,否则 call isMalicious API。
这个黑名单用 noSQL DB 来满足较高的读写 QPS(读大于写),用 master-slave 或者 consistent hashing,enable cross-region replication。同时用 LRU Query Cache,对于常见的坏IP就直接在 Cache 里读就可以了。
多谢,那问题来了。request来的时候是先过API还是先去cache或者databse去检查呢?
我的理解是先查cache,没有的再去API,更新cache,如果这里只用Redis是否可以嘛?要不然就要用cache write through,这样保证cache的数据总是最新的,另外用那个noSQL呢
logic
2021 年9 月 20 日 05:41
4
你可以把 Cache + DB 考虑成一个整体,我倾向于使用 Write-back Cache,因为性能优先于一致性。只用 Redis 有更高的丢数据的危险。
DB 使用 Wide-column(比如 Cassandra)或者 persistent key-value store (比如 RocksDB) 都可以。
您好,问个小细节,请问cache+DB的worflow是怎样进行的?如楼上所说如果request先去cache如果cache没有再call api再更新cache,这个流程走下来好像没DB什么事啊
logic
2021 年12 月 29 日 07:44
10
Cache 收到更新以后会 async 写到 DB。一旦 Cache 当机了,会用 DB 里的版本恢复。
想问下老师,这个high level design图里的Denylist lib的主要是用来做什么的?感觉整个flow都用不到
logic
2022 年2 月 11 日 06:58
13
Denylist Lib 确实不需要。不太确定 @Li_Fuxian 是什么意图。
请问如果有LRU cache,对于已经在db存入过的但并不是最近使用过的ip,我们需要再去call api吗?
我想的流程是这样的:
if ( ip is in cache) {
return true/ false;
} else if(ip is in db) {
reutrn true/ false
} else {
call API;
Async update cache & db;
return true
}
先去cache查,查到即返回
cache没有去db查,查到返回
db没有就直接放行,然后callAPI,异步更新cache和数据库
请老师评价一下 谢谢!
logic
2022 年2 月 26 日 00:38
16
可以这么考虑。Agent 含义我也不清楚,图不是我画的,我猜就是个 service 的意思。
cc_66
2022 年5 月 7 日 16:41
17
@logic 大神,请问怎么让其他cluster和同cluster的其他机器知道,有新的ip加入了呢? 是统一通过黑名单对吗?直接去查找nosql db?谢谢
请问老师,blacklist和rate limiter最主要的区别是什么?我的理解对吗:
rate limiter需要用cache存每一个ip对应的bucket状态,不需要persist
blacklist用cache存总的black ip list,需要persist。可能要考虑cache和db data inconsistency的问题,也可以提到DB sharding, hot partition, consistent hashing, replication。可以再提一下cache invalidation?
这个全吗?有别的可以扩展的点吗?
logic
2022 年6 月 24 日 06:35
20
已经很全了。Cache Invalidation 好像用不到吧,assuming black list 只增不减。