Skip to content

Commit bde74d2

Browse files
committed
Finish analytics case
* Start working on health_app case
1 parent 20bcbdb commit bde74d2

File tree

3 files changed

+49
-21
lines changed

3 files changed

+49
-21
lines changed

cases/analytics.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
## Описание кейса
2+
Создать бэкенд который принимает 1_000_000 запросов (аналитика) в минуту и должен выдавать отчеты и статистику (аналитика) и давать данные ML-модели.
3+
## Задача
4+
1. Запись в БД должна проходить очень быстро (<=10ms)
5+
2. Данные необязательно должны быть персистентными
6+
3. Данные можно хранить без индексации
7+
4. Должны поддерживаться инкрементальные обновления данных на основе статистики
8+
9+
## На что обращаем внимание
10+
1. Знаком ли с sharding и репликацией БД
11+
2. Знаком ли с колоночными БД
12+
3. Знаком ли с Data Lake, OLAP
13+
4. Знаком ли с решениями по потоковой обработке данных - Apache Spark, Apache Airflow
14+
5. Знаком ли с брокерами сообщений - Apache Kafka, RabbitMQ
15+
6. Знаком ли кандидат с паттернами realtime и batched - обработки данных
16+
7. Знаком ли кандидат с window-функциями (partition by, etc.)
17+
8. Знаком ли кандидат с подходами построения кластера БД - Multi-Master, Primary-Secondary, writes only on primary - reads only on secondary
18+
19+
## Пояснения
20+
1. Почти нереально записывать в СУБД <=10ms потому что может быть сетевой latency, кластер может развалиться и т.д.
21+
2. Можно использовать redis - что нам даст O(1) на insert
22+
3. СУБД дороже в плане инсертов, чем складирование в файлы или в memcache (redis, memcached)
23+
4. Горизонтальное масштабирование (для потоковой обработки) требует детального планирования:
24+
* как именно будем дробить задачу
25+
* как разбираться с падениями воркеров (идемпотентность)
26+
* как мониторить работу воркеров
27+
5. Кандидат должен спросить нужно ли гарантировать уникальность записей в БД?
28+
6. Для поддержки инкрементальных обновлений чаще всего необходимо поднимать отдельный инстанс БД, в котором будет храниться статистика (которая обновлеяется реже чем аналитические запросы будут приходить). Отдельный инстанс не будет испытывать нагрузки, в отличие от БД в которую записываются аналитические запросы.
29+
30+
31+
Есть аналитика, которая шлет 100500 запросов в бек. Бек должен писать в данные в базу, как-то отдавать ML и строить пользовательскую историю.
32+
33+
Проблема в том, что бек принимает запросы и долго пишет в базу. Как можно решить проблему?

cases/draft_analytics.md

Lines changed: 0 additions & 17 deletions
This file was deleted.

cases/health_app.md

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Задача
1+
## Описание задачи
22
We need to build a SaaS product in a healthcare sector, which helps users track their sleep.
33
So, we need 2 applications for users to work with:
44
* Mobile App
@@ -8,7 +8,19 @@ Mobile app should collect data about user's sleep (duration, movement, sounds, e
88
* Preparing stats and analytics
99
* Also, Mobile App and Web App should display analytics and stats to users.
1010

11-
На что обращаем внимание:
12-
1. Умеет ли кандидат с ML-моделями (training, inference)
13-
2. Знает ли про очереди сообщений
11+
## Задача
12+
1.
13+
14+
## На что обращаем внимание:
15+
1. Умеет ли кандидат работать с ML-моделями (training, inference)
16+
2. Знает ли про очереди сообщений - Kafka, RabbitMQ, redis
1417
3. Сталкивался ли с batch/streaming data processing (Apache Spark, Apache Airflow, etc.)
18+
4. Знает ли про объектные хранилища - S3
19+
5. Как кандидат будет делать балансировку нагрузки и как подойдет к масштабированию?
20+
6. Знаком ли кандидат с распределенными вычислениями и оркестрацией (для кейсов когда нужно чейнить несколько сервисов - saga и т.д.)
21+
22+
## Пояснения
23+
1. Лучше статику сразу хранить в s3, потому что огромный массив данных в БД будет тормозить запросы, миграции, бэкапы и т.д.
24+
2. Т.к. МЛ-моделька работать будет не быстро, то всё равно нужно добавлять очереди сообщений, чтобы балансировать нагрузку между воркерами (несколько инстансов МЛ-моделей) и отдавать результаты по мере их готовности (event-driven архитектура)
25+
3. Можно также использовать websocket-ы чтобы не тащить очереди сообщений, но тогда необходимо балансировку нагрузки выносить в отдельный сервис
26+
4.

0 commit comments

Comments
 (0)