Масштабирование веб-сокета при весенней загрузкеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Масштабирование веб-сокета при весенней загрузке

Сообщение Anonymous »

Мы используем простые веб-сокеты для подключения к мобильным клиентам. Наше приложение запускается с использованием трех реплик в файле Deployment.yaml в K8s.
Когда мы перешли на мультипод с настройки одного модуля, мы ожидали проблемы с масштабированием. Мы применили блокировки Redis с помощью Redisson для код, который используется для получения данных учетной записи, в код, который идентифицирует лицо при входе в магазин.
Мы также использовали API K8s для отправки событий веб-сокета всем модулям, чтобы события не терялись. . Мы также выступаем в качестве клиента веб-сокета и подключаемся к серверу веб-сокетов за пределами сервера через прокси-сервер с использованием веб-сокетов Jetty.
Я уверен, что этой информации недостаточно, и код не является минимальным кодом. для запуска и отладки.
Будут ли эти подходы работать при масштабировании количества модулей?
Блокировка Redisprivate RedisAccountDTO getAccountNoFromRedis(String AccountNo) {

logger.info("Inside getAccountNoFromRedis with EAN:: {}", AccountNo);

String key = AccountNo + "LK";

RLock rLock = redissonClient.getLock(key);

RBucket bucket = null;

RedisAccountDTO redisAccountDTO = null;

String shoppingSessionStatus = null;

try {

logger.info("Acquiring lock for key:: {}", key);

logger.info("lockExpiryTime:ssss: {}", lockExpiryTime);

rLock.lock(Long.parseLong(lockExpiryTime), TimeUnit.MILLISECONDS);

logger.info("Lock accuired for key:; {}", key);

bucket = redissonClient.getBucket(AccountNo);

if (bucket != null) {

shoppingSessionStatus = bucket.get();

logger.info("shoppingSessionStatus:: {}", shoppingSessionStatus);

if (shoppingSessionStatus == null) {

logger.info("Setting shoppingsession as Active");

bucket.set(Constants.ACTIVE);

bucket.expire(Long.parseLong(bucketExpiryTime), TimeUnit.SECONDS);

}

redisAccountDTO = new RedisAccountDTO();

redisAccountDTO.setAccountNo(AccountNo);

redisAccountDTO.setIsShoppingSessionActive(shoppingSessionStatus);

}

} finally {

rLock.unlock();

logger.info("Lock Reld");

}

logger.info("RedisAccountDTO:: {}", redisAccountDTO);

return redisAccountDTO;

}

Мероприятия для наших мобильных клиентов
private void broadCastEventRest(String sessionVariableValue, String AccountNo, Event response) {

logger.info("Inside broadCastEventRest...");

try {

List podsIP = kubeClientAPIImpl.getPodsIP();

logger.info("podsIP:: {}", podsIP);

List runnables = new ArrayList();

if (!(podsIP == null || podsIP.isEmpty())) {

for (String podIp : podsIP) {

runnables.add(() -> pushEventRest(podIp, sessionVariableValue, AccountNo, response));

}

}

logger.info("runnables::{}",runnables);

runnables.stream().map(CompletableFuture::runAsync).collect(Collectors.toList()).stream()

.forEach(CompletableFuture::join);

} catch (Exception e) {

logger.info("fed in broadcasting event");

e.printStackTrace();

}

logger.info("Successfully broadcasted event");

}

private String pushEventRest(String podIp, String sessionVariableValue, String AccountNo, Event response) {

logger.info("Inside pushEventRest...");

String uri = baseProtocol + podIp + "/api/v1/" + "/pushEvent/" + sessionVariableValue;

logger.info("uri:: {}", uri);

HashMap header = getHttpHeaders();

RestResponse RestResponse = RestClient.doPost(uri, header, response,

String.class, AccountNo, "");

if (RestResponse != null && RestResponse.getHttpStatusCode() == 200) {

logger.info("Event Pushed Successfully");

return RestResponse.getResponseBody();

} else {

logger.info("Fed in pushing event");

}

return null;

}


Подробнее здесь: https://stackoverflow.com/questions/784 ... pring-boot
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»