Целью данного проекта является реализация ETL-скрипта на Python для синхронизации данных из БД PostgreSQL в поисковый движок Elasticsearch. Данные содержат информацию о фильмах и связанных с ними людях. Отказоустойчивость процесса обеспечивается перехватом ошибок падения хранилищ с применением техники backoff, суть которой в снижении потока запросов при восстановлении соединения. Также программа сохраняет состояние системы, чтобы при перезапуске продолжать работу с места остановки, а не начинать процесс заново. Для проверки получения определённых фильмов на заданный запрос написан набор Postman-тестов.
Python
PostgreSQL
Elasticsearch
Redis
Pydantic
Postman
Docker
Клонировать репозиторий и перейти внутри него в директорию /infra
:
git clone https://github.com/8ubble8uddy/postgres-to-elastic.git
cd postgres-to-elastic/infra/
Создать файл .env и добавить настройки для проекта:
nano .env
# PostgreSQL
POSTGRES_DB=movies_database
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
# Elasticsearch
ELASTIC_HOST=elastic
ELASTIC_PORT=9200
# Redis
REDIS_HOST=redis
REDIS_PORT=6379
Развернуть и запустить проект в контейнерах:
docker-compose up
Вместе с Elasticsearch запускается связанный с ним веб-интерфейс для визуализации данных Kibana:
http://127.0.0.1:5601