LINUX.ORG.RU

На чем и как вы бы делали систему?

 


2

5

Ситуация следующая: есть написанный proof of concept системы, работает достаточно стабильно для того, чтобы за него можно было посадить специалистов предметников и собирать с них отзывы и предложения по работе системы. Соответственно у меня появилось время подумать над дальнейшей архитектурой и возможно что и переписать некоторые куски.

Дано: система для медиков (хирургов, анестезиологов, реаниматологов), занимается отслеживанием состояния пациента в ходе некоторого процесса (реанимации/операции). Процесс может быть длительным, от пары часов до чуть ли не года и имеет кучу всякого вычислимого состояния. В течении процесса происходит довольно много событий, некоторые из которых надо просто сохранить в базе и показать на клиенте, а некоторые из которых приводят к куче пересчетов текущих показателей процесса. Пример события 1 - пришли от прибора данные по текущему давлению. Их надо просто сохранить в базу и возможно что обновить график на клиенте. Пример события 2 - пациенту поставили капельницу. Надо не просто сохранить событие, а начать пересчитывать энное количество показателей (баланс жидкостей, солевой баланс, общие дозы введенных препаратов, отметить использование расходников итд).

Как сделано сейчас: Написано все на яве. Данные от приборов собираются одним процессом и пихаются в apache kafka. Основной процесс данные оттуда собирает, сохраняет в субд (mongodb) и если надо - распихивает по клиентам через вебсокеты. Так же основной процесс держит кучу rest сервисов, через которые работает веб-клиент и возможно что в дальнейшем - приложения под андроид/иос/винду. Все вычисленное состояние по процессам хранится в zookeeper-e, что в теории дает отказоустойчивость и возможность параллельного запуска нескольких сервисов на разных машинах.

Что напрягает и хочется переделать:

1 - Монга. С одной стороны довольно неплохо подходит для хранения «сырых» данных, с другой стороны приложение работает не только с ними, а еще и с кучей всяких справочников, данных процесса итд,которые довольно сильно перевязаны между собой, что в отсутствии внешних ключей дает кучу геммороя и лишнего кода на сервере.

2 - Кафка. Довольно капризное поделие с неплохой идеей, но вот реализация имхо хромает. Ловил ситуации конфликтов в zk на ровном и не очень месте, проблемы с переподключением consumer-a после разрыва связи и много чего еще. Плюс она требует наличия еще и отдельного zk, т.е. система получается довольно монструозной, минимум 4 отдельных процесса (получатель данных, кафка, zookeeper, основной сервер) + субд. А это сложности с развертыванием, поддержкой итд.

3 - В голове бродят мысли про то, что в такой событийно ориентированной системе вполне возможно что было бы неплохо использовать готовую реализацию акторов (akka?), а не писать свои велосипеды.

Собственно вопрос - как бы вы сами писали такую систему?

★★★★
Ответ на: комментарий от anonymous

Ну, как всегда, чем надежнее тем лучше. Но вообще жестких требований по надежности нет, система скорее вспомогательная, некий агрегатор данных. Т.е. в крайнем случае, при временном выходе из строя, все можно посмотреть и на самих устройствах и записать на бумажке. Но очень нежелательно. Поэтому рассчитывать надо скорее на то, что система как минимум крутится в нескольких экземплярах и прозрачно для пользователя переживает выпадение одного из узлов. Такое поведение можно не реализовывать в первую очередь, но архитектуру надо строить исходя из него.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от eao197

Ведущий разработчик и архитектор. Отдельного человека, который бы занимался только архитектурой на проекте нет.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Nagwal

Ведущий разработчик и архитектор

Странно это все. Если бы в свое время я узнал, что мои архитекторы и ведущие разработчики подобные вещи обсуждают на профильных форумах, то либо уволил бы нафиг, либо понизил в должности. За решение таких задач людям деньги платят, причем более серьезные деньги, чем обычным формоклепателям и тестопускателям.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

А почему бы не обсудить? Секретов из того, что компания занимается разработкой такой системы никто не делает, скорее наоборот. Некоторое видение того, как система в итоге должна выглядеть и функционировать у меня тоже имеется. Но возможно что я что-то упускаю из вида, и люди со стороны смогут подсказать интересные идеи.

Nagwal ★★★★
() автор топика

1. json в постгрес (если что можно потыкать их объектную модель, но хз) - это надежнее

2. нельзя ли это написать самостоятельно?

3. можешь взять jetlang (оно труп зато свежий и там мало кода) или что-то подобное и перепилить под свои нужны

Deleted
()

1 - А есть препятствия к использования реляционной БД? Т.е. допустим у тебя прёт жсон, большая часть которого тебе в данный момент до лампочки (иначе нафига тебе монга?) ты берёшь этот жсон и пихаешь его в бд. Если нужны выборки, то у тебя 2 варианта: в той же транзакции вытаскивать нужные данные на жаве и писать в дополнительное поле или, как я понимаю, в том же постргесе это можно делать в триггере, т.к. прикрутили жсонб. В плане хранения бессистемных данных разницы не будет, в плане хранения систематизированных - сплошной профит.

2 - Что мешает использовать любой другой брокер? Например тот же активМКУ, если приложение жававское то ЖМС - то что доктор прописал.

3 - Вопрос простой, оно тебе надо? Просто использование такой штуки вынудит многое сильно переписать. Засада в том, что если оно тебе не подойдёт то спрыгивать будет слишком сложно (а обычно такое вещи выясняются достаточно поздно), даже пересесть с одной реализации ЖМС на другую порой бывает непросто, хотя вроде должно быть стандартом.

В любом случае, такие приложения устанавливаются не каждый день, поэтому гоняться за простотой установки/настройки смысла обычно нет.

ya-betmen ★★★★★
()

Хм, молодец.

Обещаю подумать, и в конце недели развёрнуто написать несколько своих мыслей.

Интересуюсь и иногда занимаюсь чем-то похожим, хоть и из другой предметной области.

Deleted
()
Последнее исправление: rht (всего исправлений: 2)
Ответ на: комментарий от ya-betmen

Мне кажется, ТС интересует не сколько инструментарий, сколько идеология, архитектура.

Deleted
()
Ответ на: комментарий от Deleted

json в постгрес (если что можно потыкать их объектную модель, но хз) - это надежнее

Тоже думаю про этот вариант. Судя по тому, что даже с могой все равно придется возиться с буферизацией и batch insert-ами, а так же с кешированием - вполне можеть быть оправданным решением.

нельзя ли это написать самостоятельно?

В принципе можно наверное. Впрос в том что делать с надежностью всей этой штуки и не выйдет ли в итоге вторая кафка со всеми ее проблемами (все таки у меня количество людей и времени не бесконечно).

можешь взять jetlang (оно труп зато свежий и там мало кода) или что-то подобное и перепилить под свои нужны

Ох, вот чего точно не хочется - так это возиться с чужими трупами. А чем та же акка плоха?

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Nagwal

Короче я так понял что если бы вы написали что являетесь простым разработчиком, то он бы написал «Брысь, пусть этим занимается архитектор», что короче сводится к тому что этот вопрос вообще запрещено задавать на форумах. Игнорируйте таких

vertexua ★★★★★
()

По теме - сложно сказать. Дело в том, что все вышеперечисленное в основном используется для веб-приложений под нагрузкой.

Какая тут нагрузка? Не будет ли это все работать с обычными реляционными БД и обычными очередям с поддержкой транзакций? Просто почему бы не перестраховаться лишний раз вместо такого design to scale (за который я бы выступил во многих других случаях) использовать более персистентные, более проверенные решения с более жесткими гарантиями?

vertexua ★★★★★
()
Ответ на: комментарий от Nagwal

Я думаю никто ничего не сможет ответить пока не будут названы числа. Количества пользователей, данных, запросы в секунду, количество запросов на вставку, равномерность нагрузки, количества фронтендов и тд. Это все тыканье пальцем в небо

vertexua ★★★★★
()
Ответ на: комментарий от ya-betmen

А есть препятствия к использования реляционной БД?

Особых нет, кроме производительности. Но я уже отвечал кому-то, что и производительности монги запросто не хватит, т.е. все равно заморачивться с кешированием и буферизацией с batch insert-ами. Так что сам думаю над этим вопросом. Т.е. в данном случае просто хочется услышать другие мнения.

Что мешает использовать любой другой брокер? Например тот же активМКУ, если приложение жававское то ЖМС - то что доктор прописал.

Производительность. Kafka появилась в этом проекте из предыдущего, как наиболее производительное решение. А большинство жмс для persistent сообщений вообще рсубд используют, что далеко не лучшим образом сказывается на throughput

Вопрос простой, оно тебе надо? Просто использование такой штуки вынудит многое сильно переписать.

Ну да, понятно что переписывать порядком. Поэтому и хочу послушать сторонние мнения в том числе.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Harald

бедные-бедные пациенты, мне их уже жалко :)

Ой, другие системы еще хуже. Как тебе например лабораторная система на макросах в экселе написанная? А я это видел и люди этим пользуются.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Harald

надеюсь, система ТС-а никаких решений сама не принимает )

Нет, система только агрегирует данные и предоставляет их виде, удобном для врача.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от vertexua

Короче я так понял что если бы вы написали что являетесь простым разработчиком, то он бы написал «Брысь, пусть этим занимается архитектор», что короче сводится к тому что этот вопрос вообще запрещено задавать на форумах. Игнорируйте таких

Вангуете хреново.

Для того, чтобы дать вменяемые ответы на поставленные в теме вопросы, нужно иметь намного больше информации. Например, количество и разнообразие датчиков, которые нужно опрашивать. Требования к хранению снятой с датчиков информации (сколько хранить, насколько критична потеря одного-двух-... сэмплов данных, нужно ли разделение доступа к данным для различных категорий юзеров и т.д.). Сколько и каких клиентов будут ходить за данными, как часто, нужно ли разделять доступ к данным в зависимости от типа клиента или имени/категории юзера на клиенте. Является ли это решение кастомным для одного конкретного заказчика или это «коробка». Сколько народу в команде у ТС, какая у них квалификация. Какие сроки, в каком вообще состоянии все находится. И т.д. и т.п.

Если начать вникать в это все получится, что нужно делать часть работы, за которую, как я понимаю, ТС платят, а форумчанам — нет.

Если же ТС интересуют набросы вроде Mongo херня, она жрет память и не может делать сложные запросы, поэтому бери MySQL, а если нужно чего-то посолиднее, что PostgreSQL... Ну тогда другое дело. Правда, какой интерес в разгребании всего этого дерьма для ТС — не понятно.

eao197 ★★★★★
()
Ответ на: комментарий от vertexua

ХАБА же ) Если в испанском варианте читать

Harald ★★★★★
()
Ответ на: комментарий от eao197

Если же ТС интересуют набросы вроде Mongo херня

Монга не херня, это ТС был упорот в хлам, когда её выбирал для своего проекта.

anonymous
()
Ответ на: комментарий от vertexua

Я думаю никто ничего не сможет ответить пока не будут названы числа. Количества пользователей, данных, запросы в секунду, количество запросов на вставку, равномерность нагрузки, количества фронтендов и тд. Это все тыканье пальцем в небо

Ох, если бы я сам был в курсе, система все таки предполагает некоторую тиражируемость. Т.е. в каждом конкретном случае все может варьироваться. Для пилотного внедрения показатели такие:

Количество одновременно запущенных веб клиентов - порядка 150-200. Около 20-ти операционных + около сотни коек в реанимации + зашедшие что то посмотреть врачи.

Количество приборов - тоже примерно около 200 штук, а вот общее количество сообщений от них величина неизвестная. Все зависит от конкретного призводителя, качества драйверов итд. Можно условно принять, что в среднем 1 сообщение от прибора в секунду, но может быть больше. Плюс что-то периодически вводится руками пользователями, но это мелочи.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Nagwal

Это похоже на очень маленькие числа. Если там действительно будет очередь, то она будет легко сглаживать нагрузку даже при скачках на порядки от этого

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

На нормальном форуме так и говорят - скажи числа. Задали вопрос ТСу. Ждем ответа

Тут два момента. Во-первых, мне в свое время приходилось решать, оправдывает человек свою должность или нет, и сколько ему нужно платить за то, что он умеет делать. Так вот, если бы я узнал, что мой подчиненный, которому поставлена подобная задача и который имеет доступ ко всей необходимой информации, полез за помощью на форум, то мне бы пришлось сделать соответствующие выводы не в пользу этого подчиненного.

Во-вторых, обмен информацией на форумах, на мой взгляд, должен быть взаимовыгодным. Здесь, имхо, выгодополучателем является ТС. Было бы совсем другое дело, если бы ТС рассказал, что у него была вот такая задача, он выбрал такие-то и такие-то инструменты по таким-то и такими-то причинам, в итоге получилось вот так, при этом пришлось пройтись по таким-то граблям, то ситуация бы изменилась. Тогда бы каждый из участников разговора мог бы вынести для себя что-нибудь полезное.

eao197 ★★★★★
()
Последнее исправление: eao197 (всего исправлений: 1)
Ответ на: комментарий от eao197

Я часто задаю вопросы на форумах вне зависимости от того что параллельно работаю над решением сам. Ответы на форумах не принимаю за чистую монету, но там могут часто назвать такие решения о которых я даже не слышал и я потом могу их тоже исследовать поподробнее. Сразу увольнять?

обмен информацией на форумах, на мой взгляд, должен быть взаимовыгодным. Здесь, имхо, выгодополучателем является ТС.

Не согласен. Обмен информацией на форумах всегда взаимовыгоден. Задающему вопросы - ответы. Отвечающим - поболтать. Разве нет?

vertexua ★★★★★
()
Ответ на: комментарий от Nagwal

По надежности требования я уже где то писал. В идеале - чем надежнее, тем лучше. На практике задержка в пол минуты например от момента получения сообщения до показа на экране это приемлемо, хоть и неприятно. С потерей данных ситуация еще сложнее, поскольку в некоторых случаях мы их вообще можем не писать часами (состояние стабильное, показатели не менялись), а в некотрых потеря какого то всплеска/изменения - это уже плохо-плохо.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от vertexua

Ответы на форумах не принимаю за чистую монету, но там могут часто назвать такие решения о которых я даже не слышал и я потом могу их тоже исследовать поподробнее. Сразу увольнять?

Сильно зависит. Например, в таком виде, как сделал ТС — да, сразу.

Если бы вопрос был разбит на несколько отдельных (например, отдельно по способам опроса датчиков, отдельно по СУБД для хранения подобного рода информации, отдельно по обеспечению масштабируемости и отказоустойчивости), да еще с более подробной информацией об условиях, тогда совсем другое дело.

А так, складывается впечатление, что ТС ждет того, что заказчикам предоставляется в виде документов под названием vision или high-level architecture при выполнении обследования объекта автоматизации (а в подготовке таких документов задействуются и БА, и архитекторы, и внедренцы). В общем, нехилый такой кусок работы, на самом-то деле.

eao197 ★★★★★
()
Ответ на: комментарий от anonymous

Монга не херня, это ТС был упорот в хлам, когда её выбирал для своего проекта.

Она в этот проект мигрировала из предыдущего, где была крайне оправдана. Для скорейшего выпуска прототипа на пощупать. Сейчас же вопрос стоит - оставлять ее или нет, пока кода не так много и переписывать не придется годами.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Nagwal

Сейчас же вопрос стоит - оставлять ее или нет

Конечно нет. Заменить на реляционную БД пока не поздно.

anonymous
()
Ответ на: комментарий от vertexua

Это похоже на очень маленькие числа. Если там действительно будет очередь, то она будет легко сглаживать нагрузку даже при скачках на порядки от этого

По идее да, но на практике например мы уже напоролись, что один из китайских приборов порядка 200 снимаемых и вычисляемых внутри показателей скидывает каждую секунду в виде 200-та бинарных сообщений по udp. Сейчас мы на уровне драйвера прибора это обошли, т.е. все это собирается в одно большое сообщение и пихается в очередь одним куском. Всегда ли возможно будет так сделать - х.з.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Nagwal

я уже отвечал кому-то, что и производительности монги запросто не хвати

У тебя проблема в том, что уже есть зависимые данные, т.е. монга тебе уже не подходит и дело не в скорости.

Производительность. Kafka появилась в этом проекте из предыдущего, как наиболее производительное решение. А большинство жмс для persistent сообщений вообще рсубд используют, что далеко не лучшим образом сказывается на throughput

Обычно такое решается масштабированием: спереди вебсервис (можно жсон) за ним балансер, за ним какой нить ЖМС, а потом со всех инстансов выгребаем данные: можно сложить их куда-нить, можно прямо из жмс, можно сразу пихать в БД (реплику). Вебсервис естественно опционален, но http в некотором роде проще в балансировке.

ya-betmen ★★★★★
()
Ответ на: комментарий от Harald

Я там уже одному анонимусу ответил, из предыдущего проекта она пришла. Для скорейшего выпуска прототипа, который предметники смогут пощупать руками. Сейчас прикидываю - стоит ли ее оставлять или переписать десяток классов пока не поздно.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от vertexua

Ну, сейчас так и сделали. Во всех ли случаях получится так завернуть - фиг знает. На самом деле там довольно много вопросов еще надо прорабатывать. Например что делать с нечисловыми данными (картинки, видео). Гнать их через ту же очередь либо как то отдельно.

Nagwal ★★★★
() автор топика

занимается отслеживанием состояния пациента в ходе некоторого процесса (реанимации
Написано все на яве

Вот, блин, а потом врачи - убийцы.

entefeed ☆☆☆
()
Ответ на: комментарий от Nagwal

лабораторная система на макросах в экселе написанная

Ну для лаборатории может и годится. Если нет особых требований и эксель годится.

Deleted
()
Ответ на: комментарий от Nagwal

Ну обычно их выкладывают на диск (лучше в распределенную ФС, но если простой не важен, то можно просто в RAID). Если реальное время не нужно, то можно просто сканировать новые поступающие каталоги (например если они называются 2015.03.09_10h). Или можно сразу уведомления в очередь слать о появлении файлов

vertexua ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.