Не могли бы вы помочь мне с одной вещью?Представьте, что у меня есть простой микросервер RESTful с одним GET
методом, который просто отвечает случайным образом String
.
Я собираю все строки в ConcurrentHashSet<String>
, который содержит все ответы.
Ниже приведена небрежная реализация, главное, что Set<String>
является отказоустойчивым и может быть изменен одновременно.
@RestController
public class Controller {
private final StringService stringService;
private final CacheService cacheService;
public Controller(final StringService stringService, final CacheService cacheService) {
this.stringService = stringService;
this.cacheService = cacheService;
}
@GetMapping
public String get() {
final String str = stringService.random();
cacheService.add(str);
return str;
}
}
public class CacheService {
private final Set<String> set = ConcurrentHashMap.newKeySet();
public void add(final String str) {
set.add(str);
}
}
Пока вы читаете эту строку, моя конечная точка используется на 1 миллиардлюди.Я хочу осквернить кеш.Поскольку моя система сильно загружена, я не могу хранить все строки на одном сервере.Я хочу иметь 256 серверов / экземпляров и равномерно распределить свой кэш, используя функцию str.hashCode()%256
, чтобы определить на каждом сервере / экземпляре, должна ли храниться строка.
Не могли бы вы сказать, что мне делать дальше?Предположим, что в настоящее время я запускаю только приложение Spring Boot локально.