|
|
|
Как сделать задачи независимыми друг от друга с т.з. ресурсов и fault-tolerance?
|
|||
|---|---|---|---|
|
#18+
Всем пятницы! Есть приложение, которое выполняет несколько довольно однотипных задач. Оно соединяется с какими-то ресурсами, стягивает с них данные, проверяет, куда-то кладет. Это легко сделать в одном приложении с частично общей codebase, и так оно и есть. Однако возникает вопрос устойчивости. Нам не хочется, чтобы при каких-либо проблемах с одним источником пострадали другие. Какой список проблем? 1. ошибки 2. блокирующие операции 3. переполнение памяти 4. другие кроме 3 ошибки JVM 5. предельная нагрузка на одном источнике которая блокирует другие 6. что-то еще? Как решить? 1) Просто многопоточное приложение. ОК для обработки исключений и блокирующих операций, однако все остальные проблемы не решаются. 2) Запускать три разных процесса. 3) Запускать один процесс приема данных и отдельные процессы на "опасные" части работы. 4) Использовать сервер приложений. Какой, поможет ли. Что посоветуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2015, 15:47 |
|
||
|
Как сделать задачи независимыми друг от друга с т.з. ресурсов и fault-tolerance?
|
|||
|---|---|---|---|
|
#18+
DymytryОднако возникает вопрос устойчивости. Нам не хочется, чтобы при каких-либо проблемах с одним источником пострадали другие. если исходить из того что мы на sql_ru, то СУБД как раз обеспечивает откат транзакции, атомарность транзакции и т.д. и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2015, 16:42 |
|
||
|
Как сделать задачи независимыми друг от друга с т.з. ресурсов и fault-tolerance?
|
|||
|---|---|---|---|
|
#18+
Dymytry, 2) Запускать три разных процесса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2015, 17:40 |
|
||
|
Как сделать задачи независимыми друг от друга с т.з. ресурсов и fault-tolerance?
|
|||
|---|---|---|---|
|
#18+
Dymytry, твой вопрос - на мильон багсов и на целый курс обучения. Есть шаблон проектирования. Он касается реакции системы в целом на временно-недоступный датасорс к примеру. Обычное (99%) шаблонное решение - это повтор операции. Который в сетевых условиях приводит к финализации размера пулов и в забивании "листенера" бесполезными попытками. И как следствие - приводит к долгим трудно устранимым условиям на "другой стороне". Это - неправильный шаблон. И его нельзя использовать. По хорошему нужен глобальный евент который оповещает вашу систему о том что не стоит DDOS-ить свою-же БД до тех пор пока неисправность не будет целиком устранена. Я буквально недавно был на семинаре посвящённом этим шаблонам вобщем если вспомню - расскажу хотя-бы его название. По поводу 3х потоков. Это решение решает столько-же проблем сколько и создаёт новых. К сожалению достатчно только сказать что оно "умножает" количество состояний системы и вводит новый уровень недетермизима который раньше с 1 поточным приложением вам не грозил в принципе. Оно трудно тестируемо (практически я скажу что его никто не тестирует). Из коробочных решений можно вобщем-то брать любой сервер приложений и в режиме кластера считать что вы порешали ошибки (3) и (4). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2015, 18:49 |
|
||
|
Как сделать задачи независимыми друг от друга с т.з. ресурсов и fault-tolerance?
|
|||
|---|---|---|---|
|
#18+
mayton, спасибо за интересный ответ! Честно говоря, не совсем понятно что плохого в варианте с тремя потоками. Тут кстати о чем мы говорим - о трех процессах (трех запущенных JVM) или о трех потоках (три Thread)? Какой вариант лучше? Еще было бы интересно увидеть любые ссылки на материалы по шаблонам проектирования. Может книги, еще что-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2015, 13:03 |
|
||
|
Как сделать задачи независимыми друг от друга с т.з. ресурсов и fault-tolerance?
|
|||
|---|---|---|---|
|
#18+
Развели тут хайлоад ... Ресурсы более-менее современного компьютера таковы, что в 64-разрядных системах, при хоть сколько-нибудь пряморуком программировании, одна-единственная JVM в состоянии сделать всё, что нужно на большинстве задач. Поэтому пишете "стандартное многопоточное приложение" и решаете проблемы по мере их поступления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2015, 16:08 |
|
||
|
Как сделать задачи независимыми друг от друга с т.з. ресурсов и fault-tolerance?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, ресурсов должно хватить. Вопрос в надежности - чтобы какой-то крэш одного процесса не вызывал остановки остальных. Правда, может решать этот вопрос неким контролером состояния процесса который будет переподнимать его после отсутствия heartbeat. В таком случае действительно нет разницы один процесс или три, в общем-то, ну переподнимет все три в одном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2015, 17:59 |
|
||
|
Как сделать задачи независимыми друг от друга с т.з. ресурсов и fault-tolerance?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovРазвели тут хайлоад ... Ресурсы более-менее современного компьютера таковы, что в 64-разрядных системах, при хоть сколько-нибудь пряморуком программировании, одна-единственная JVM в состоянии сделать всё, что нужно на большинстве задач. Поэтому пишете "стандартное многопоточное приложение" и решаете проблемы по мере их поступления. Я-бы просто добавил к тезису что если мы решаем проблемы потенциального краша процесса jvm по причине утечек объектов ОС (сокеты, хендлы мьютексы) то нужно строить структуру из многих уровней. Должен быть мастер-процесс или мастер-демон который делает heartbeat и контролирует uptime всех workers. Нужно также более строгое (основанное на цифрах) и на теории надёжности систем доказательство того что данный бутерброд из технологий будет БОЛЕЕ надёжен чем простой однопоточный софт. Если у нас таких цифр нет и всё базируется на гипотезах то может ну его нафих. Лучше следовать принципу KISS и делать простой 1-поточный последовательный демон. А когда будет статистика по авариям - то обсуждать возможную декомпозицию задачи на независимые части. Анализировать ЧТО. ПОЧЕМУ. КАК ФИКСИТЬ. и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2015, 19:26 |
|
||
|
Как сделать задачи независимыми друг от друга с т.з. ресурсов и fault-tolerance?
|
|||
|---|---|---|---|
|
#18+
Перезапуск упавшего сервиса в винде - пара галочек в настройках. В хрюниксах, надо полагать, аналогично. И вообще - нахрена решать проблему, которая ещё даже не возникла? И вообще - не факт, что возникнет. P.S. Нет, я не спорю, что чтение "списка исправленных ошибок" может напугать самых храбрых, но ... Вот реально, на практике, вы сталкивались с ошибкой "JVM упала из-за ошибок JVM/OS" и при этом точно знаете , что ошибки были именно в JVM/OS, а не вашем приложении? Хорошо, сталкивались. А сколько раз? А за какой интервал? И что, в промежутках между этими траблами не было никаких других проблем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 17:32 |
|
||
|
Как сделать задачи независимыми друг от друга с т.з. ресурсов и fault-tolerance?
|
|||
|---|---|---|---|
|
#18+
DymytryВсем пятницы! Есть приложение, которое выполняет несколько довольно однотипных задач. Оно соединяется с какими-то ресурсами, стягивает с них данные, проверяет, куда-то кладет. Это легко сделать в одном приложении с частично общей codebase, и так оно и есть. Ну я бы сделал для каждого ресурса своего клиента, с общей кодовой базой. Т.е. общие части выделил в библиотеку которую подключал бы к этим проектам. Сами бы приложения сделал простыми консольными. Запускал бы по шедулеру с записью в текстовый лог. slf4j-simple удобная вещь, она еще логи бьет по частям (по дням то есть) Т.о. вы все проблемы либо не возникнут, либо будут решатся не программистами ;-). Если какое-то из приложений будет сильно нагружать сервер, то его запуск можно сместить по времени, либо вынести на выделенный сервер (благо никто не мешает нарезать виртуалок сколько надо). Программистам лишь нужно будет сделать клиента. :-) Единственное, что при таком подходе удобнее использовать Spring. А вот CDI уже будет затруднительно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 08:29 |
|
||
|
Как сделать задачи независимыми друг от друга с т.з. ресурсов и fault-tolerance?
|
|||
|---|---|---|---|
|
#18+
Dymytrymayton, спасибо за интересный ответ! Честно говоря, не совсем понятно что плохого в варианте с тремя потоками. Тут кстати о чем мы говорим - о трех процессах (трех запущенных JVM) или о трех потоках (три Thread)? Какой вариант лучше? Еще было бы интересно увидеть любые ссылки на материалы по шаблонам проектирования. Может книги, еще что-то? Вроде это. http://www.slideshare.net/IzzetMustafaiev/ Презентация называется Fault Tolerance ... e.t.c. Паттерны Circuit Braker и библиотеки и фреймворки jrugged, Hystrix. По библиотекам я вряд-ли что-то толковое расскажу т.к. сам их только изучаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2015, 11:43 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2124830]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 464ms |

| 0 / 0 |
