Задача - разработать прототип распределенного приложения для бронирования комнат (квартир, апартаментов, ...)
Ключевые сущности:
- клиент (id, имя)
- комната (id, адрес, описание, набор атрибутов)
- бронь (id комнаты, id клиента, даты бронирования, статус бронирования).
Сценарии:
- Бронирование комнаты. Клиент после выбора комнаты и дат бронирования, нажимает "бронировать", бронь сохраняется в MongoDB, комната блокируется в Hazelcast. После оплаты (символически), статус брони меняется на "оплачено", комната разблокируется в Hazelcast.
- Поиск свободных комнат (OpenSearch). Поиск по описанию, адресу и датам бронирования. Для удобства поиска по датам, при сохранении брони в MongoDB в ElasticSearch можно индексировать свободные даты.
План работы:
- Обсудить предметную область, детально описать модель хранимых данных.
- Разработка
- Заполнить тестовыми данными MongoDB (Клиент, комната)
- Разработать класс-сервис бронирования с методом предварительного бронирования (с распределенной блокировкой в Hazalcast)
- Расширить сервис бронирования индексированием данных в OpenSearch
- Реализовать метод оплаты (фиксация бронирования, обновления OpenSearch индекса и снятия блокировки)
- Интеграция и тестирование
- Комнаты можно взять отсюда http://insideairbnb.com/get-the-data.html. http://data.insideairbnb.com/united-kingdom/england/london/2017-03-04/data/listings.csv.gz содержит более 140 000 записей
- Клиентов - пользователей stackoverflow
- брони - сгенерировать
- Подготовить данные (порядка десятков тысяч клиентов, десятков тысяч комнат, миллионов броней)
- Функциональное тестирование и исправление ошибок
- Протестировать поведение системы при отключении одного и более узлов