Внедрение БД Cassandra

Компания «Найтек» — это стартап в сфере телемедицины. Основная идея и цель — предоставлять широкому кругу пользователей доврачебную оценку текущего состояния здоровья. Система предлагает пользователю обратиться к врачу, если выявлена какая-либо угроза, либо успокоить и показать что все в порядке тем людям, которые напрасно тревожатся о состоянии здоровья.

 

Основной продукт заказчика — услуга «ЭКГ по телефону», представляющая собой сервис по автоматизированной обработке биосигналов высокой емкости.

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

 

 

Постановка задачи проекта:

Обеспечить пропускную способность облачного хранилища в 1000 запросов (загрузок кардиограмм).

 

Решение:

В проекте мы имеем дело с данными большого объема, которые, ко всему прочему, нуждаются в оперативной обработке. Для этих целей хорошо подходит СУБД NoSQL Cassandra за счет высокой производительности, линейной масштабируемости и отказоустойчивости.

Архитектура системы представляет собой следующее:

— База с данными пользователей (имя, возраст, анамнез, принимаемые лекарства) — эти данные обновляются нечасто;

— База с биосигналами от пользователей.

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

 

Таким образом, данные пользователей отделяются в отдельную базу, которую реализовали на Postgress, для каждой записи пользователя идет привязка к кластеру Cassandra, в котором хранятся данные биосигналов.

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

 

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

Cassandra отличается тем, что не имеет единой точки отказа, кроме этого, имеет встроенную систему отказоустойчивости и репликации данных. Таким образом, в случае роста нагрузки риск потери данных — крайне мал. Система устроена достаточно просто (ключ пользователя + все данные пользователя во времени), поэтому легко обеспечить линейную масштабируемость. Если пропускная способность облачного хранилища перестанет справляться с возросшей нагрузкой — достаточно будет просто добавить серверных мощностей без перестройки архитектуры системы.

 

Результат:

Текущая конфигурация системы построена на кластере Cassandra из 14 узлов.

Нагрузочные тесты показали, что система спроектирована даже с запасом — она легко справляется с потоком данных в 4000-5000 запросов в секунду.

 

 

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

 

Несколько лет мы создаём сервис для удаленной обработки кардиограмм. Мы сделали работающий прототип сервиса и нашли инвестора, финансирующего запуск сервиса в массовую эксплуатацию. Инвестор поставил задачу поднять пропускную способность нашего сервиса.
Компания Git in Sky сначала проконсультировала нас по возможным вариантам решений, устойчивым к нагрузке, а потом взялась воплотить их в жизнь, переписав часть нашей модели под работу с масштабируемой СУБД.
Работа в разгаре!

Игорь Палатник, Генеральный директор Niteq, LLC.