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