Skip to content

Commit 56ce22a

Browse files
committed
using local redis instead of centralized redis (#1979)
Earlier we were using local caffine cache and syncing the changes to centralized redis. Now we are using local redis only Assumption is now that we get all the data for particular user key on one machine. This will be handled by producer
1 parent fe90061 commit 56ce22a

File tree

5 files changed

+72
-137
lines changed

5 files changed

+72
-137
lines changed

apps/threat-detection/pom.xml

-5
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,6 @@
9595
<version>6.4.0.RELEASE</version>
9696
</dependency>
9797

98-
<dependency>
99-
<groupId>com.github.ben-manes.caffeine</groupId>
100-
<artifactId>caffeine</artifactId>
101-
<version>2.9.3</version>
102-
</dependency>
10398
<dependency>
10499
<groupId>com.fasterxml.jackson.core</groupId>
105100
<artifactId>jackson-databind</artifactId>

apps/threat-detection/src/main/java/com/akto/threat/detection/Main.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ public static void main(String[] args) {
5757
.setValueSerializer(Serializer.BYTE_ARRAY)
5858
.build();
5959

60-
new MaliciousTrafficDetectorTask(trafficKafka, internalKafka, createRedisClient()).run();
60+
RedisClient localRedis = createLocalRedisClient();
61+
62+
new MaliciousTrafficDetectorTask(trafficKafka, internalKafka, localRedis).run();
6163
new FlushSampleDataTask(
6264
sessionFactory, internalKafka, KafkaTopic.ThreatDetection.MALICIOUS_EVENTS)
6365
.run();
@@ -67,8 +69,8 @@ public static void main(String[] args) {
6769
new CleanupTask(sessionFactory).run();
6870
}
6971

70-
public static RedisClient createRedisClient() {
71-
return RedisClient.create(System.getenv("AKTO_THREAT_DETECTION_REDIS_URI"));
72+
public static RedisClient createLocalRedisClient() {
73+
return RedisClient.create(System.getenv("AKTO_THREAT_DETECTION_LOCAL_REDIS_URI"));
7274
}
7375

7476
public static void runMigrations() {

apps/threat-detection/src/main/java/com/akto/threat/detection/cache/RedisBackedCounterCache.java

-126
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.akto.threat.detection.cache;
2+
3+
import io.lettuce.core.RedisClient;
4+
import io.lettuce.core.api.StatefulRedisConnection;
5+
6+
public class RedisCounterCache implements CounterCache {
7+
8+
static class Op {
9+
private final String key;
10+
private final long value;
11+
12+
public Op(String key, long value) {
13+
this.key = key;
14+
this.value = value;
15+
}
16+
17+
public String getKey() {
18+
return key;
19+
}
20+
21+
public long getValue() {
22+
return value;
23+
}
24+
}
25+
26+
private final StatefulRedisConnection<String, Long> redis;
27+
28+
private final String prefix;
29+
30+
public RedisCounterCache(RedisClient redisClient, String prefix) {
31+
this.prefix = prefix;
32+
this.redis = redisClient.connect(new LongValueCodec());
33+
}
34+
35+
private String addPrefixToKey(String key) {
36+
return new StringBuilder().append(prefix).append("|").append(key).toString();
37+
}
38+
39+
@Override
40+
public void increment(String key) {
41+
incrementBy(key, 1);
42+
}
43+
44+
@Override
45+
public void incrementBy(String key, long val) {
46+
redis.async().incrby(addPrefixToKey(key), val);
47+
}
48+
49+
@Override
50+
public long get(String key) {
51+
return redis.sync().get(addPrefixToKey(key));
52+
}
53+
54+
@Override
55+
public boolean exists(String key) {
56+
return redis.sync().exists(addPrefixToKey(key)) > 0;
57+
}
58+
59+
@Override
60+
public void clear(String key) {
61+
redis.async().del(addPrefixToKey(key));
62+
}
63+
64+
}

apps/threat-detection/src/main/java/com/akto/threat/detection/tasks/MaliciousTrafficDetectorTask.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import com.akto.test_editor.execution.VariableResolver;
2727
import com.akto.test_editor.filter.data_operands_impl.ValidationResult;
2828
import com.akto.threat.detection.actor.SourceIPActorGenerator;
29-
import com.akto.threat.detection.cache.RedisBackedCounterCache;
29+
import com.akto.threat.detection.cache.RedisCounterCache;
3030
import com.akto.threat.detection.constants.KafkaTopic;
3131
import com.akto.threat.detection.kafka.KafkaProtoProducer;
3232
import com.akto.threat.detection.smart_event_detector.window_based.WindowBasedThresholdNotifier;
@@ -82,14 +82,14 @@ public MaliciousTrafficDetectorTask(
8282

8383
this.windowBasedThresholdNotifier =
8484
new WindowBasedThresholdNotifier(
85-
new RedisBackedCounterCache(redisClient, "wbt"),
85+
new RedisCounterCache(redisClient, "wbt"),
8686
new WindowBasedThresholdNotifier.Config(100, 10 * 60));
8787

8888
this.internalKafka = new KafkaProtoProducer(internalConfig);
8989
}
9090

9191
public void run() {
92-
this.kafkaConsumer.subscribe(Collections.singletonList("akto.api.logs"));
92+
this.kafkaConsumer.subscribe(Collections.singletonList("akto.api.logs2"));
9393
ExecutorService pollingExecutor = Executors.newSingleThreadExecutor();
9494
pollingExecutor.execute(
9595
() -> {

0 commit comments

Comments
 (0)