https://github.com/chnb128/red-machine-test-task
Test task for Red Machine company
https://github.com/chnb128/red-machine-test-task
example nodejs redis testing
Last synced: 8 days ago
JSON representation
Test task for Red Machine company
- Host: GitHub
- URL: https://github.com/chnb128/red-machine-test-task
- Owner: CHNB128
- License: mit
- Created: 2019-02-16T08:24:23.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2019-02-17T10:45:23.000Z (about 7 years ago)
- Last Synced: 2025-04-02T03:34:30.791Z (about 1 year ago)
- Topics: example, nodejs, redis, testing
- Language: JavaScript
- Homepage:
- Size: 53.7 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Red-Machine-test-task
Test task for Red Machine company
## Задача
Разработать Node-приложение, которое взаимодействует с Redis и может как генерировать сообщения, так и принимать. Одновременно может быть запущено сколько угодно node-приложений
## Детали
* Обмен информацией между node-приложениями может быть только через Redis;
* Из всего кол-ва текущих запущенных node-приложений только одно - является генератором, остальные являются слушателями и всегда должны быть готовы принимать сообщения из Redis;
* Все сообщения должны быть обработаны только один раз и только одним слушателем;
* Генератором может быть только одно node-приложение, каждое из запущенных приложений может стать генератором;
* Если текущий генератор принудительно завершится(например, отключили из розетки), то один из слушателей(любой) должен сразу стать генератором. Для определения, кто генератор, нельзя использовать средства ОС(так же node-приложения не могут общаться друг с другом напрямую) - предположительно приложения могут общаться друг с другом находясь в разных ДЦ из разных стран;
* Сообщения генерируются раз в 500ms;
* Сообщение может быть любым(но от 80 до 100 символов);
* Слушателем с вероятностью 5% считает полученное сообщение ошибочным;
* Ошибочное сообщение нужно поместить в Redis для дальнейшего изучения;
* Если запустить приложение с параметром getErrors: оно заберет из Redis все сохраненные сообщения, выведет их на экран и завершится. При этом сами сообщения из Redis удаляются;
* Проверить, что приложение может обработать 1000000 сообщений;
## Что еще надо
* Опишите, почему вы выбрали именно такую реализацию и как еще можно было решить эту задачу?
* Опишите, как вы избегаете условий гонки в условиях взаимодействия можества Node-процессов?