Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по архитектуре отказоустойчивой системы. / 20 сообщений из 20, страница 1 из 1
27.04.2017, 19:32
    #39445725
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
Добрый день .

До этого все приложения были не "кластерные" вопросов таких не было ... но появилась вот такая архитектура :


Фронтом идет nginx - за ним кластер из двух docker контейнеров в них jetty в нем webapp за ними кластер MariaDB

сессия пользователя хранится в базе так http://projects.spring.io/spring-session/



так вот смущает такой кейс :

nginx - отправляет запросы на ноды по принципу роундробина - с get запросами все ок (я не вижу подводных камней) !

вопрос с не идемпотентными запросами?

Вот пришел на node1 jetty1 post запрос и нода умерла в этот момент (2 вариант успела положить в сессию что то и не успелва)-

Этот запрос потерян или нет?

Сейчас пользователь в браузере висит и ничего не происходит ( в момент отправки POST / GET ) положили ноду ...

все что он делает это - жмет F5 - и продолжает работать - его даже не выбросит на логин итд ...


Вопросы :

1) чем потенциально опасна такая схема ?
2) Как ретраить не идемпотентные запросы ?
3) не лучше ли организовать stick на nginx ? - чтобы один пользователь работал с одной нодой - если она упадет перешел на другую
4) jetty - работают ничего не знаю о том что они в докере - Это не jetty cluster
5) proxy_next_upstream - спасение ?
6) http://nginx.org/ru/docs/http/ngx_http_upstream_module.html#sticky

Цель не потерять ни одной транзакции :)


ps

если сессия в базе это плохо - то будет кластер на Redis
...
Рейтинг: 0 / 0
27.04.2017, 19:52
    #39445733
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
Atum1вопрос с не идемпотентными запросами?

Не делать их.
Не проблема сделать все операции изменения идемпотентными.
Кластерная система это не просто "ап" и готово. Это именно что изменение всего подхода.
...
Рейтинг: 0 / 0
27.04.2017, 20:11
    #39445737
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
Я тут новенький, но вот читал, что одно из достоинств ЕЕ - это как раз масштабируемость в ширину без дополнительных заморочек в коде. Дополнительные затраты сил только на настройку серверов в домене. Почему бы не пойти этим путем?
...
Рейтинг: 0 / 0
27.04.2017, 20:21
    #39445744
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
HettЯ тут новенький, но вот читал, что одно из достоинств ЕЕ - это как раз масштабируемость в ширину без дополнительных заморочек в коде. Дополнительные затраты сил только на настройку серверов в домене. Почему бы не пойти этим путем?

На ЕЕ можно. Но там все медленнее.
...
Рейтинг: 0 / 0
28.04.2017, 11:10
    #39445941
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
Hettчто одно из достоинств ЕЕ
Всё сбалансировано. Почитай про недостатки EE.
Поэтому изучай в паре - EE и не EE.
Кстати, тут на форуме, EE на мой imho взгляд - 10%.
...
Рейтинг: 0 / 0
28.04.2017, 11:21
    #39445953
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
Atum1вопрос с не идемпотентными запросами?
Вопросительный знак есть, а вопроса нет.

Atum1Вот пришел на node1 jetty1 post запрос и нода умерла в этот момент (2 вариант успела положить в сессию что то и не успелва)-
Этот запрос потерян или нет?
Очень много размытой терминологии.
Если сессию реплицировать синхронно, то это капец как дорого.
Если сессию реплицировать асинхронно, то таки да, после положительного отклика, но до репликации можно потерять запрос.

Atum11) чем потенциально опасна такая схема ?
Проблемами с репликацией сессии, которая отъедает кучу ресурсов кластера.

Atum12) Как ретраить не идемпотентные запросы?
Повторять запросы может только клиент. Решения два вижу я. Либо коммитить транзакцию после сихронизации, либо валидировать транзакции дополнительными запросами.

Atum13) не лучше ли организовать stick на nginx ? - чтобы один пользователь работал с одной нодой - если она упадет перешел на другую
sticky session вполне себе нормальное решение. Никто особо не старается одного юзера раскидать на все ноды.

Atum14) jetty - работают ничего не знаю о том что они в докере - Это не jetty cluster

И вопрос в чем?

Atum1Цель не потерять ни одной транзакции :)

Мы за ценой не постоим? А цель кластера какая?

Atum1если сессия в базе это плохо - то будет кластер на Redis
Есть 100500 способов реплицировать сессию. Общая база, это таки single point of failure.
...
Рейтинг: 0 / 0
28.04.2017, 11:24
    #39445960
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
Alexey TominНа ЕЕ можно. Но там все медленнее.
JEE никак не регламентирует кластеризацию и сопутствующие плюшки. Просто требует чтобы оно было. Можно взять GlassFish и получить не работающее решение. Можно взять JBoss, но когда начинутся проблемы в кластеризации придётся либо самому её переделать, либо платить за саппорт.
И если вдруг захочется чтобы оно просто работало, придётся раскошелится на WebLogic.
В итоге раскошелится придётся в любом случае, что с JEE, что без.
...
Рейтинг: 0 / 0
28.04.2017, 14:04
    #39446121
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
BlazkowiczAtum1вопрос с не идемпотентными запросами?
Вопросительный знак есть, а вопроса нет.

Atum1Вот пришел на node1 jetty1 post запрос и нода умерла в этот момент (2 вариант успела положить в сессию что то и не успелва)-
Этот запрос потерян или нет?
Очень много размытой терминологии.
Если сессию реплицировать синхронно, то это капец как дорого.
Если сессию реплицировать асинхронно, то таки да, после положительного отклика, но до репликации можно потерять запрос.

Atum11) чем потенциально опасна такая схема ?
Проблемами с репликацией сессии, которая отъедает кучу ресурсов кластера.

Atum12) Как ретраить не идемпотентные запросы?
Повторять запросы может только клиент. Решения два вижу я. Либо коммитить транзакцию после сихронизации, либо валидировать транзакции дополнительными запросами.

Atum13) не лучше ли организовать stick на nginx ? - чтобы один пользователь работал с одной нодой - если она упадет перешел на другую
sticky session вполне себе нормальное решение. Никто особо не старается одного юзера раскидать на все ноды.

Atum14) jetty - работают ничего не знаю о том что они в докере - Это не jetty cluster

И вопрос в чем?

Ну якобы можно делать репликацию сессии средствами самого jetty

Atum1Цель не потерять ни одной транзакции :)

Мы за ценой не постоим? А цель кластера какая?

Atum1если сессия в базе это плохо - то будет кластер на Redis
Есть 100500 способов реплицировать сессию. Общая база, это таки single point of failure.

Спасибо

Да

один Post Запрос с транзакцией мы можем потерять видимо - это как раз и будет наше SLA 99.95

ибо шаг в 99.999 - где будет репликация всего и вся это стоимость решения вырастает на порядок или два.



Там более у нас фронтальная система - за ней по мимо базы еще стоит некоторый бэкенд на rest api



и с нашей системы есть определенны правила работы с этим бэкендом : не получив от него ответа (получив 500 )
мы ретраем пост запрос до него по оговоренной логике .
...
Рейтинг: 0 / 0
28.04.2017, 14:07
    #39446124
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
BlazkowiczЕсть 100500 способов реплицировать сессию. Общая база, это таки single point of failure.


там кластер ,но точка одна.
...
Рейтинг: 0 / 0
29.04.2017, 09:51
    #39446467
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
Atum1Цель не потерять ни одной транзакции :)Предлагаю взглянуть на проблему с другой стороны.

Запись в сессию и в рабочую БД - это не одна транзакция. Как можно гарантировать, что выполняя две транзакции, данные не придут в несогласованное состояние? Ответ - никак.

Так что выхода два:
1. Использовать распределенные транзакции. Это дорого.
2. Использовать по минимуму механизм сессий. По-крайней мере для критичных операций.

В этом случае можно без проблем просто повторить запрос, завершившийся ошибкой.
...
Рейтинг: 0 / 0
03.05.2017, 15:19
    #39447934
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
WGAAtum1Цель не потерять ни одной транзакции :)Предлагаю взглянуть на проблему с другой стороны.

Запись в сессию и в рабочую БД - это не одна транзакция. Как можно гарантировать, что выполняя две транзакции, данные не придут в несогласованное состояние? Ответ - никак.



Тут не понял . можно пояснить ?
...
Рейтинг: 0 / 0
03.05.2017, 15:29
    #39447948
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
Atum1WGAпропущено...
Предлагаю взглянуть на проблему с другой стороны.

Запись в сессию и в рабочую БД - это не одна транзакция. Как можно гарантировать, что выполняя две транзакции, данные не придут в несогласованное состояние? Ответ - никак.



Тут не понял . можно пояснить ?WGA наверное имел в виду, что сессии тоже хранятся в БД
...
Рейтинг: 0 / 0
09.08.2017, 14:19
    #39502605
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
Usman,

Добрый день .



Есть ещё вопрос : в классической схеме все вроде бы ясно:

Сессия в базе и таким образом запрос идёт из браузера на haproxy и может быть обработан любым аппсервером так как у него сессионный ключ в базе ( имеется кластер jetty docker контейнеров )


А как быть если клиент работает через websocket? В такой схеме соединение двухсторонне и постоянное через wss, нужно каким то образом его поддерживать ??? Или оно будет каждый раз перестанавливаться?
...
Рейтинг: 0 / 0
09.08.2017, 14:42
    #39502628
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
Atum1А как быть если клиент работает через websocket? В такой схеме соединение двухсторонне и постоянное через wss, нужно каким то образом его поддерживать ??? Или оно будет каждый раз перестанавливаться? Проксирование WebSocket

WebSocket Security
...
Рейтинг: 0 / 0
09.08.2017, 14:46
    #39502632
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
Atum1А как быть если клиент работает через websocket? В такой схеме соединение двухсторонне и постоянное через wss, нужно каким то образом его поддерживать ??? Или оно будет каждый раз перестанавливаться?а можно и просто продлять сессию http. при каждом сообщении серверу.
...
Рейтинг: 0 / 0
09.08.2017, 14:54
    #39502640
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
вадяAtum1А как быть если клиент работает через websocket? В такой схеме соединение двухсторонне и постоянное через wss, нужно каким то образом его поддерживать ??? Или оно будет каждый раз перестанавливаться?а можно и просто продлять сессию http. при каждом сообщении серверу.

Решение нужно для вебсокетов .
...
Рейтинг: 0 / 0
09.08.2017, 14:59
    #39502647
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
Atum1Решение нужно для вебсокетов .именно для них и предложено и практичеки используется.
...
Рейтинг: 0 / 0
09.08.2017, 15:09
    #39502664
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
Atum1,
тут есть ещё одна фишка с использование ws - возможность сервере вести "передачу по своей инициативе"
кода http сессия оканчивается -переводить клиента на страницу входа/авторизации
для этого достаточно отловить окончание сессии http и отправить клиенту нужное сообщение.
N секунд(минут,часов) бездействия (без обращения к серверу) и переход на страницу входа.
...
Рейтинг: 0 / 0
10.08.2017, 08:39
    #39503057
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
вадяAtum1,
тут есть ещё одна фишка с использование ws - возможность сервере вести "передачу по своей инициативе"
кода http сессия оканчивается -переводить клиента на страницу входа/авторизации
для этого достаточно отловить окончание сессии http и отправить клиенту нужное сообщение.
N секунд(минут,часов) бездействия (без обращения к серверу) и переход на страницу входа.


Не совсем понял , есть пример кода на github e ?
...
Рейтинг: 0 / 0
10.08.2017, 12:58
    #39503285
qi_ip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по архитектуре отказоустойчивой системы.
При запросе клиента по вебсокету к серверу, сервер проверяет, как долго пользователь был не активен. Если больше определенного какого-то временного интервала, то сервер по WS посылает команду DISCONNECT или просто закрывате вебсокет. На клиентской стороне это событие отлавливается и пользователя перенаправляет на страницу авторизации.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по архитектуре отказоустойчивой системы. / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]