paint-brush
Использование MinIO и Python для создания масштабируемых и эффективных приложений, управляемых событиямик@minio
3,783 чтения
3,783 чтения

Использование MinIO и Python для создания масштабируемых и эффективных приложений, управляемых событиями

к MinIO10m2024/04/25
Read on Terminal Reader
Read this story w/o Javascript

Слишком долго; Читать

Уведомления о событиях в MinIO на первый взгляд могут показаться неинтересными, но как только вы используете их возможности, они освещают динамику в ваших сегментах хранилища.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Использование MinIO и Python для создания масштабируемых и эффективных приложений, управляемых событиями
MinIO HackerNoon profile picture


Уведомления о событиях в MinIO на первый взгляд могут показаться неинтересными, но как только вы используете их возможности, они освещают динамику в ваших сегментах хранилища. Уведомления о событиях — важнейшие компоненты полноценной и эффективной системы хранения объектов. Вебхуки — мой любимый инструмент для интеграции с MinIO . Они подобны швейцарскому ножу в мире событий, предлагая универсальное решение самых разных задач.


Удобный пользовательский интерфейс MinIO обеспечивает бесперебойное обслуживание интеграции , но в этом руководстве мы углубимся глубже. Мы создаем сервисы с нуля на Python, используя учетные данные их клиентов, чтобы помочь вам разобраться в тонкостях интеграции MinIO.


В нашем исследовании мы сосредоточимся на развертывании с использованием docker-compose — метода, который предлагает упрощенную и эффективную оркестровку. Этот подход предполагает создание связной среды для MinIO и Flask, обеспечивающей их беспрепятственное взаимодействие. Интегрируя службу MinIO с соответствующими учетными данными и конфигурациями, мы стремимся создать систематический рабочий процесс, который эффективно демонстрирует практическое применение управления событиями сегмента MinIO и реагирования на них.


Как всегда, после того, как мы настроим конфигурации клиента и определим структуру данных ответа, начинается самое интересное. В этой демонстрации будут освещены несколько ключевых аспектов того, как вы можете подключить свой клиент MinIO к приложению Flask, где данные уведомления о событиях могут быть дополнительно обработаны. Мы хотим, чтобы вы чувствовали себя комфортно при разработке собственных систем, управляемых событиями, с помощью MinIO, поэтому воспользуйтесь услугами, которые мы предоставили в разделе блог-активы/flask-webhook-event-notifications ресурс, размещенный на Страница MinIO на GitHub .


Приготовьтесь погрузиться в мир, где обработка данных — это одновременно искусство и наука, которая стала проще с помощью MinIO. Это возможность внедрять инновации, создавать и революционизировать способы работы ваших приложений с данными.

MinIO и интегрированные сервисы

Интеграция MinIO в Экосистема Кубернетеса демонстрирует его адаптируемость к различным облачным технологиям. Веб-перехватчики имеют решающее значение, предлагая разработчикам гибкость в создании индивидуальных интеграций, будь то для управления данными на различных облачных платформах или для локальных домашних лабораторий.


Это руководство выходит за рамки теоретических концепций и предоставляет практические фрагменты исполняемого кода для построения интеграции. Это приглашение раскрыть безграничный потенциал вашего творчества в использовании уведомлений о событиях MinIO.

Закладываем основу для приложения Python с помощью Docker

Начальный этап нашего пути посвящен использованию возможностей контейнеризации Docker для создания надежной среды приложений Python. Наш подход основан на развертывании с помощью Docker-compose — метода, выбранного из-за его простоты и эффективности. Этот выбор предназначен для широкого круга разработчиков, которые отдают предпочтение простоте использования и быстрому развертыванию, обеспечивая при этом высокий уровень функциональности.


Используя Docker-compose, мы создаем удобную для пользователя настройку на основе конфигурации. Эта среда идеально подходит для тех, кто хочет быстрого развертывания, не жертвуя глубиной возможностей своего проекта. Он обеспечивает простой путь для интеграции расширенных функций веб-перехватчика и точной настройки параметров MinIO в соответствии с конкретными требованиями вашего проекта.


Каждый шаг, который мы предпринимаем в создании этой среды, имеет решающее значение. Речь идет не только о запуске и работе служб; речь идет о понимании и использовании компонентов для создания комплексной системы. Разработка собственных систем может стать искрой, которая зажжет ваши инновации, улучшит вашу общую стратегию управления данными и в конечном итоге превратит ваши необработанные данные в полезную и полезную информацию.

Развертывание MinIO и интегрированных сервисов

Развертывание с помощью Docker-Compose: приложение Flask и MinIO

Мы начнем с настройки приложения Python и его среды. Это включает в себя развертывание MinIO с помощью Docker Compose и сервисов, которые необходимо интегрировать. Чтобы настроить MinIO с помощью приложения Flask, мы будем использовать команду git для клонирования репозитория minio/blog-assets в вашу локальную среду:


 git clone https://github.com/minio/blog-assets.git cd flask-webhook-event-notifications docker-compose up


Это позволит клонировать минио/блог-активы репозиторий с GitHub, перейдите к /flask-webhook-event-notifications/ каталог, содержащий docker-compose.yaml файл и запустите службы MinIO и Flask.

Структура каталогов

В этой структуре docker-compose описаны две службы и соответствующие им переменные конфигурации. Для целей визуализации я представил здесь древовидное представление желаемой структуры каталогов:


 /flask-webhook-event-notifications ├── Dockerfile ├── app │ └── main.py └── docker-compose.yaml

Настройка вебхуков в MinIO

Настроить веб-перехватчик в MinIO можно различными способами: с помощью пользовательского интерфейса, с помощью mc (клиентской утилиты MinIO) или с помощью сценариев на различных языках программирования.


MinIO поддерживает множество внешних сервисов для уведомлений о событиях , включая: AMQP (RabbitMQ) , MQTT , NATS , NSQ , Elasticsearch , Kafka , MySQL , PostgreSQL , Redis и службы веб-перехватчиков .


Настройка MinIO для их использования уведомления о событиях включает в себя ряд четко определенных шагов, гарантирующих, что ваш экземпляр MinIO не только захватывает, но и эффективно передает важные данные о событиях в качестве интерактивной и быстро реагирующей части экосистемы вашего приложения.

Понимание структуры данных уведомлений о событиях MinIO

Уведомления о событиях S3 от MinIO включают в себя подробная структура данных JSON , необходимые для всестороннего понимания и эффективного управления событиями. Ниже я перечислил некоторые значения, найденные в данных о событии:


  • Ключ : уникальный идентификатор объекта в сегменте.


  • eTag : идентификатор версии объекта для обеспечения целостности и контроля версий.


  • Размер : Размер объекта в байтах, указывающий его масштаб.


  • Секвенсор : гарантирует обработку событий в той последовательности, в которой они произошли.


  • Тип содержимого : Тип носителя объекта, определяющий способ обработки или отображения файла.


  • Пользовательские метаданные : определяемые пользователем метаданные, прикрепленные к объекту, обеспечивающие дополнительный контекст.


  • Детали ковша :

    • ARN (название ресурса Amazon) : уникальный идентификатор сегмента в AWS.

    • Имя : имя сегмента, в котором хранится объект.

    • Личность владельца : Информация о владельце ведра.


  • s3SchemaVersion : указывает версию используемой схемы уведомления о событиях S3.


  • Ид конфигурации : Идентификатор конкретной конфигурации уведомлений, вызвавшей это событие.


Эта структура особенно эффективна для Приложения для колб , обеспечивающий систематическую регистрацию, анализ и анализ взаимодействия с ведром MinIO.

Настройка MinIO для веб-перехватчиков и операций, управляемых событиями

После развертывания docker-compose.yaml , описанного выше, продолжайте использовать клиент MinIO, mc , утилиту командной строки. Эта настройка включает в себя создание псевдонима в MinIO, настройку конечной точки и настройку уведомлений сегмента.


Мы будем работать внутри интерактивного терминала для контейнера «минио» , который мы можем создать, выполнив одну команду:


docker exec -it minio /bin/sh


Причина запуска команд mc из этой оболочки заключается в том, что в образе Docker minio/minio уже установлен и готов к работе mc .


Внутри интерактивного терминала контейнера процесс настройки MinIO для уведомлений о событиях с помощью клиента MinIO (mc) включает в себя следующие ключевые шаги:


  1. Настройка псевдонима MinIO : Первый шаг включает создание псевдонима для вашего сервера MinIO с помощью клиента MinIO (mc). Этот псевдоним представляет собой ярлык вашего сервера MinIO, позволяющий вам легко выполнять дальнейшие команды mc без повторного указания адреса сервера и учетных данных для доступа. Этот шаг упрощает управление вашим сервером MinIO через клиент.

    mc alias set myminio http://localhost:9000 minio minio123

  2. Добавление конечной точки Webhook в MinIO : Настройте новую конечную точку службы веб-перехватчика в MinIO. Эта настройка выполняется с использованием либо переменных среды, либо параметров конфигурации среды выполнения, где вы определяете важные параметры, такие как URL-адрес конечной точки, дополнительный токен аутентификации для безопасности и клиентские сертификаты для безопасных соединений.

    mc admin config set myminio notify_webhook:1 endpoint="http://flaskapp:5000/minio-event" queue_limit="10"


  3. Перезапуск развертывания MinIO : после настройки параметров перезапустите развертывание MinIO, чтобы изменения вступили в силу.

    mc admin service restart myminio

    Ожидать:

    Restart command successfully sent to myminio. Type Ctrl-C to quit or wait to follow the status of the restart process....Restarted myminio successfully in 1 seconds


  4. Настройка уведомлений сегмента : Следующий шаг предполагает использование команды добавления события mc. Эта команда используется для добавления новых событий уведомлений сегмента, устанавливая вновь настроенную службу Webhook в качестве цели для этих уведомлений.

    mc event add myminio/mybucket arn:minio:sqs::1:webhook --event put,get,delete

    Ожидать:

    Successfully added arn:minio:sqs::1:webhook


  5. Получение списка событий сегмента с подпиской : Запустите эту команду, чтобы получить список событий, назначенных myminio/mybucket:

    minio mc event list myminio/mybucket

    Ожидать:

    arn:minio:sqs::1:webhook s3:ObjectCreated:*,s3:ObjectAccessed:*,s3:ObjectRemoved:* Filter:


  6. Получение списка событий, назначенных сегменту (в формате JSON) : Запустите эту команду, чтобы получить список событий, назначенных myminio/mybucket, в формате JSON:

    minio mc event list myminio/mybucket arn:minio:sqs::1:webhook --json

    Ожидать:

    { "status": "success", "id": "", "event": ["s3:ObjectCreated:","s3:ObjectAccessed:", "s3:ObjectRemoved:*"], "prefix": "", "suffix": "", "arn": "arn:minio:sqs::1:webhook"}

Структура данных уведомления о событии, полученных Flask

В зависимости от сервисов или интеграции, которые вы создаете, вам может потребоваться идентифицировать event_data из вашего приложения Flask, а это требует хорошего понимания данных, которые предоставляет ваше событие.


 { "s3": { "bucket": { "arn": "arn:aws:s3:::mybucket", "name": "mybucket", "ownerIdentity": { "principalId": "minio" } }, "object": { "key": "cmd.md", "eTag": "d8e8fca2dc0f896fd7cb4cb0031ba249", "size": 5, "sequencer": "17A9AB4FA93B35D8", "contentType": "text/markdown", "userMetadata": { "content-type": "text/markdown" } }, "configurationId": "Config", "s3SchemaVersion": "1.0" }, "source": { "host": "127.0.0.1", "port": "", "userAgent": "MinIO (linux; arm64) minio-go/v7.0.66 mc/RELEASE.2024-01-11T05-49-32Z" }, "awsRegion": "", "eventName": "s3:ObjectCreated:Put", "eventTime": "2024-01-12T17:58:12.569Z", "eventSource": "minio:s3", "eventVersion": "2.0", "userIdentity": { "principalId": "minio" }, "responseElements": { "x-amz-id-2": "dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8", "x-amz-request-id": "17A9AB4FA9328C8F", "x-minio-deployment-id": "c3642fb7-ab2a-44a0-96cb-246bf4d18e84", "x-minio-origin-endpoint": "http://172.18.0.3:9000" }, "requestParameters": { "region": "", "principalId": "minio", "sourceIPAddress": "127.0.0.1" } }


Выполнив эти шаги, вы сможете эффективно использовать уведомления о событиях MinIO, значительно автоматизируя процессы обработки данных. Более подробные инструкции и информацию можно найти в документации MinIO на Уведомления сегмента и Мониторинг событий сегментов и объектов .


Если вы заинтересованы в настройке MinIO с PostgreSQL , взгляните на Оптимизация событий данных с помощью MinIO и PostgreSQL , где я рассмотрел обширную настройку MinIO и управление событиями данных. Эти конфигурации варьируются от использования консоли MinIO для удобного графического интерфейса до инструмента командной строки mc для более подробной настройки с использованием сценариев. Сообщение в блоге дополняет ваше понимание темы, подчеркивая важность правильной настройки PostgreSQL в пользовательском интерфейсе MinIO и важность перезапуска сервера MinIO, чтобы изменения вступили в силу.


Разработка веб-перехватчика с Flask для получения уведомлений о событиях

После развертывания нашей среды мы теперь переключаем внимание на интеграцию MinIO с Python, ключевого аспекта нашей системы обработки и обработки данных. Эта интеграция имеет решающее значение для создания целостной экосистемы, в которой MinIO может беспрепятственно сотрудничать с Flask.

Импорт необходимых пакетов

В нашем демонстрационном коде мы тщательно выбираем импорт Python, чтобы гарантировать соответствие функциональности приложения его предполагаемому назначению. Пакет flask создает инфраструктуру веб-сервера, определяя конечные точки для обработки входящих HTTP-запросов. Затем приложение можно закодировать для обработки уведомлений о событиях MinIO любым желаемым способом.


 from flask import Flask, jsonify, request


Этот импорт в совокупности составляет основу приложения, позволяя ему получать и обрабатывать уведомления о событиях MinIO.

Приложение Flask и конечная точка обработки событий в Python

Создается экземпляр приложения Flask, и настраивается конечная точка для обработки запросов POST по маршруту /minio-event . Flask — это микровеб-фреймворк на Python, идеально подходящий для настройки веб-приложений и конечных точек API.


 app = Flask(__name__) @app.route('/minio-event', methods=['POST']) def handle_minio_event(): event_data = request.json app.logger.info(f"Received MinIO event: {event_data}") return jsonify(event_data), 200


Функция handle_minio_event в приложении Flask обрабатывает запросы POST, содержащие данные о событии MinIO, и возвращает event_data , полученное из уведомления о событии MinIO.


Этот подход облегчает обработку и реагирование на события хранилища в реальном времени, обеспечивая динамическое взаимодействие между системой хранения MinIO и приложением Flask.

Интеграция сервисов с событиями сегмента MinIO с помощью сценариев Python

В этом сообщении блога MinIO и Python используются в среде Docker, чтобы продемонстрировать мощь и гибкость уведомлений о событиях корзины MinIO, а также демонстрирует стратегический подход к созданию масштабируемых и эффективных приложений, управляемых событиями.


Использование Docker с его технологией контейнеризации позволяет таким компонентам, как MinIO и Flask, работать независимо, но слаженно. Конечно, эта контейнерная облачная установка сводит к минимуму конфликты и зависимости, подчеркивая важность Docker и контейнеров Docker в современной архитектуре программного обеспечения.


Завершая наше исследование уведомлений о событиях веб-перехватчика MinIO, я убежден, что синергия динамического языка программирования и огромной силы MinIO представляет собой беспрецедентный набор инструментов. Это сочетание открывает путь к безграничным возможностям в разработке приложений. Это дает нам возможность не только внедрять инновации и оптимизировать, но и расширять наши возможности с поразительной эффективностью и адаптируемостью.


Это руководство продемонстрировало простоту и эффективность разработки API с использованием Python, заложив прочную основу для постоянных инноваций и удовлетворения постоянно меняющихся требований. Это подчеркивает адаптируемость, необходимую для дальнейшего развития как в управлении данными, так и в развитии разработки приложений. Этот подход — не просто методология; это путь к обеспечению будущего наших технологических начинаний.