paint-brush
Sử dụng MinIO và Python để tạo các ứng dụng hướng sự kiện có khả năng mở rộng và hiệu quảtừ tác giả@minio
3,783 lượt đọc
3,783 lượt đọc

Sử dụng MinIO và Python để tạo các ứng dụng hướng sự kiện có khả năng mở rộng và hiệu quả

từ tác giả MinIO10m2024/04/25
Read on Terminal Reader
Read this story w/o Javascript

dài quá đọc không nổi

Thông báo sự kiện trong MinIO ban đầu có vẻ không hấp dẫn, nhưng khi bạn khai thác sức mạnh của chúng, chúng sẽ làm sáng tỏ động lực trong bộ nhớ lưu trữ của bạn.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Sử dụng MinIO và Python để tạo các ứng dụng hướng sự kiện có khả năng mở rộng và hiệu quả
MinIO HackerNoon profile picture


Thông báo sự kiện trong MinIO ban đầu có vẻ không hấp dẫn, nhưng khi bạn khai thác sức mạnh của chúng, chúng sẽ làm sáng tỏ động lực trong bộ nhớ lưu trữ của bạn. Thông báo sự kiện là thành phần quan trọng của hệ thống lưu trữ đối tượng chính thức và hiệu quả. Webhooks là công cụ cá nhân tôi yêu thích để tích hợp với MinIO . Chúng giống như một con dao quân đội Thụy Sĩ trong thế giới sự kiện, đưa ra giải pháp chung cho nhiều thách thức khác nhau.


Giao diện người dùng thân thiện với người dùng của MinIO cung cấp dịch vụ liền mạch tích hợp , nhưng chúng tôi sẽ tìm hiểu sâu hơn trong hướng dẫn này. Chúng tôi đang xây dựng các dịch vụ từ đầu bằng Python, sử dụng thông tin xác thực ứng dụng khách của họ để hướng dẫn bạn chi tiết về tích hợp MinIO.


Trong quá trình khám phá, chúng tôi sẽ tập trung vào việc triển khai bằng cách sử dụng docker-compose, một phương pháp cung cấp khả năng điều phối hợp lý và hiệu quả. Cách tiếp cận này sẽ liên quan đến việc thiết lập một môi trường gắn kết cho MinIO và Flask, cho phép chúng tương tác liền mạch. Bằng cách tích hợp dịch vụ MinIO với thông tin đăng nhập và cấu hình phù hợp, chúng tôi mong muốn tạo ra một quy trình làm việc có hệ thống thể hiện hiệu quả ứng dụng thực tế trong việc quản lý và phản hồi các sự kiện nhóm MinIO.


Như mọi khi, khi chúng tôi thiết lập cấu hình máy khách và xác định cấu trúc cho dữ liệu phản hồi, niềm vui thực sự sẽ bắt đầu. Phần trình diễn này sẽ nêu bật một số khía cạnh chính về cách bạn có thể kết nối ứng dụng khách MinIO của mình với ứng dụng Flask nơi dữ liệu thông báo sự kiện có thể được xử lý thêm. Chúng tôi muốn bạn cảm thấy thoải mái khi phát triển hệ thống hướng sự kiện của riêng mình với MinIO, vì vậy hãy sử dụng các dịch vụ chúng tôi đã cung cấp trong tài sản blog/bình-webhook-sự kiện-thông báo tài nguyên được lưu trữ trên Trang GitHub của MinIO .


Chuẩn bị bước vào một thế giới nơi việc xử lý dữ liệu vừa là nghệ thuật vừa là khoa học, được đơn giản hóa hơn với MinIO. Đây là cơ hội để đổi mới, sáng tạo và cách mạng hóa cách ứng dụng của bạn hoạt động với dữ liệu.

MinIO và các dịch vụ tích hợp

Sự tích hợp của MinIO vào Hệ sinh thái Kubernetes minh họa khả năng thích ứng của nó trên các công nghệ đám mây khác nhau. Webhooks đóng vai trò quan trọng, mang đến cho các nhà phát triển sự linh hoạt trong việc tạo ra các tiện ích tích hợp tùy chỉnh, cho dù để quản lý dữ liệu trên các nền tảng đám mây khác nhau hay để thiết lập phòng thí nghiệm tại nhà ở địa phương.


Hướng dẫn này vượt xa các khái niệm lý thuyết, cung cấp cho bạn các đoạn mã thực tế, có thể thực thi được để xây dựng các tiện ích tích hợp của bạn. Đó là lời mời khám phá tiềm năng sáng tạo vô biên của bạn trong việc tận dụng các thông báo sự kiện MinIO.

Đặt nền tảng cho ứng dụng Python với Docker

Giai đoạn đầu trong hành trình của chúng tôi là dành riêng cho việc khai thác sức mạnh của khả năng chứa trong Docker để tạo ra một môi trường ứng dụng Python mạnh mẽ. Cách tiếp cận của chúng tôi xoay quanh việc triển khai với Docker-compose, một phương pháp được chọn vì tính đơn giản và hiệu quả của nó. Lựa chọn này được thiết kế để phục vụ nhiều nhà phát triển, ưu tiên tính dễ sử dụng và triển khai nhanh chóng trong khi vẫn đảm bảo chức năng ở mức độ cao.


Bằng cách sử dụng Docker-compose, chúng tôi tạo ra một thiết lập dựa trên cấu hình, thân thiện với người dùng. Môi trường này hoàn hảo cho những ai muốn triển khai nhanh chóng mà không phải hy sinh chiều sâu khả năng của dự án. Nó cung cấp một lộ trình đơn giản để tích hợp các tính năng webhook nâng cao và tinh chỉnh cài đặt MinIO, đáp ứng các yêu cầu cụ thể của dự án của bạn.


Mỗi bước chúng tôi thực hiện trong việc thiết lập môi trường này đều rất quan trọng. Đó không chỉ là việc thiết lập và vận hành các dịch vụ; đó là sự hiểu biết và tận dụng các thành phần để tạo ra một hệ thống toàn diện. Việc phát triển hệ thống của riêng bạn có thể là tia lửa khơi dậy sự đổi mới của bạn, nâng cao chiến lược quản lý dữ liệu tổng thể của bạn và cuối cùng biến dữ liệu thô của bạn thành thông tin sâu sắc, có thể thực hiện được.

Triển khai MinIO và Dịch vụ tích hợp

Triển khai với Docker-Compose: Flask App và MinIO

Chúng ta sẽ bắt đầu bằng việc thiết lập một ứng dụng Python và môi trường của nó. Điều này liên quan đến việc triển khai MinIO với docker soạn thảo và các dịch vụ sẽ được tích hợp. Để thiết lập MinIO bằng ứng dụng Flask, chúng tôi sẽ sử dụng lệnh git để sao chép kho lưu trữ tài sản minio/blog vào môi trường cục bộ của bạn:


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


Điều này sẽ nhân bản tài sản minio/blog kho lưu trữ từ GitHub, điều hướng đến /flask-webhook-sự kiện-thông báo/ thư mục chứa docker-compose.yaml tập tin và khởi động dịch vụ MinIO và Flask.

Cấu trúc thư mục

Cấu trúc docker-compose này phác thảo hai dịch vụ và các biến cấu hình tương ứng của chúng. Với mục đích trực quan hóa, tôi đã cung cấp chế độ xem dạng cây của cấu trúc thư mục mong muốn tại đây:


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

Thiết lập Webhooks trong MiniIO

Việc định cấu hình webhook trong MinIO có thể được thực hiện thông qua nhiều phương pháp khác nhau, từ sử dụng giao diện người dùng, bằng cách sử dụng mc (tiện ích máy khách MinIO) hoặc bằng cách viết tập lệnh bằng nhiều ngôn ngữ lập trình khác nhau.


MinIO hỗ trợ một nhiều dịch vụ bên ngoài để thông báo sự kiện , bao gồm: AMQP (RabbitMQ) , MQTT , NATS , NSQ , Elaticsearch , Kafka , MySQL , PostgreSQL , Rediscác dịch vụ webhook .


Thiết lập MinIO để sử dụng những thứ này thông báo sự kiện bao gồm một loạt các bước được xác định rõ ràng, đảm bảo rằng phiên bản MinIO của bạn không chỉ nắm bắt mà còn truyền đạt hiệu quả dữ liệu sự kiện quan trọng như một phần tương tác, phản hồi trong hệ sinh thái ứng dụng của bạn.

Tìm hiểu cấu trúc dữ liệu của thông báo sự kiện MinIO

Thông báo sự kiện S3 từ MinIO bao gồm cấu trúc dữ liệu JSON chi tiết , cần thiết cho sự hiểu biết toàn diện và quản lý hiệu quả các sự kiện. Dưới đây tôi đã liệt kê một số giá trị được tìm thấy trong dữ liệu sự kiện:


  • Chìa khóa : Mã định danh duy nhất của đối tượng trong nhóm.


  • thẻ điện tử : Mã định danh phiên bản của đối tượng để đảm bảo tính toàn vẹn và kiểm soát phiên bản.


  • Kích cỡ : Kích thước của đối tượng tính bằng byte, biểu thị tỷ lệ của nó.


  • Trình sắp xếp thứ tự : Đảm bảo các sự kiện được xử lý theo trình tự chính xác mà chúng đã xảy ra.


  • Loại nội dung : Loại phương tiện của đối tượng, chỉ định cách xử lý hoặc hiển thị tệp.


  • Siêu dữ liệu người dùng : Siêu dữ liệu do người dùng định nghĩa được đính kèm với đối tượng, cung cấp ngữ cảnh bổ sung.


  • Chi tiết nhóm :

    • ARN (Tên tài nguyên của Amazon) : Mã định danh duy nhất cho nhóm trong AWS.

    • Tên : Tên của thùng nơi đối tượng được lưu trữ.

    • Danh tính chủ sở hữu : Thông tin về chủ sở hữu của xô.


  • s3SchemaPhiên bản : Cho biết phiên bản của lược đồ thông báo sự kiện S3 được sử dụng.


  • Id cấu hình : Mã định danh cho cấu hình thông báo cụ thể đã kích hoạt sự kiện này.


Cấu trúc này đặc biệt hiệu quả đối với Ứng dụng bình , cho phép ghi nhật ký, phân tích cú pháp và phân tích các tương tác một cách có hệ thống với nhóm MinIO.

Thiết lập MinIO cho Webhooks và hoạt động theo hướng sự kiện

Sau khi triển khai docker-compose.yaml được nêu ở trên, hãy tiếp tục bằng cách sử dụng tiện ích dòng lệnh MinIO Client, mc . Thiết lập này bao gồm việc tạo bí danh trong MinIO, định cấu hình điểm cuối và cài đặt thông báo nhóm.


Chúng ta sẽ làm việc bên trong một thiết bị đầu cuối tương tác dành cho vùng chứa “minio” , chúng ta có thể tạo ra vùng chứa này bằng cách chạy một lệnh duy nhất:


docker exec -it minio /bin/sh


Lý do để chạy các lệnh mc của chúng tôi từ bên trong shell này là vì Docker minio/minio image đã được cài đặt mc và sẵn sàng hoạt động.


Khi đã ở trong thiết bị đầu cuối tương tác của vùng chứa, quy trình định cấu hình MinIO cho thông báo sự kiện bằng MinIO Client (mc) bao gồm các bước chính sau:


  1. Thiết lập bí danh MinIO : Bước đầu tiên liên quan đến việc tạo bí danh cho máy chủ MinIO của bạn bằng MinIO Client (mc). Bí danh này là lối tắt đến máy chủ MinIO của bạn, cho phép bạn dễ dàng thực hiện các lệnh mc tiếp theo mà không cần chỉ định nhiều lần địa chỉ máy chủ và thông tin xác thực truy cập. Bước này giúp đơn giản hóa việc quản lý máy chủ MinIO của bạn thông qua máy khách.

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

  2. Thêm điểm cuối Webhook vào MinIO : Định cấu hình điểm cuối dịch vụ webhook mới trong MinIO. Thiết lập này được thực hiện bằng cách sử dụng biến môi trường hoặc cài đặt cấu hình thời gian chạy, trong đó bạn xác định các tham số quan trọng như URL điểm cuối, mã thông báo xác thực tùy chọn để bảo mật và chứng chỉ ứng dụng khách cho kết nối an toàn.

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


  3. Khởi động lại triển khai MinIO : Sau khi bạn đã định cấu hình cài đặt, hãy khởi động lại quá trình triển khai MinIO của mình để đảm bảo các thay đổi có hiệu lực.

    mc admin service restart myminio

    Trông chờ:

    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. Định cấu hình thông báo nhóm : Bước tiếp theo liên quan đến việc sử dụng lệnh thêm sự kiện mc. Lệnh này được sử dụng để thêm các sự kiện thông báo nhóm mới, đặt dịch vụ Webhook mới được định cấu hình làm mục tiêu cho các thông báo này.

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

    Trông chờ:

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


  5. Danh sách các sự kiện đã đăng ký trong nhóm : Chạy lệnh này để liệt kê sự kiện được gán cho myminio/mybucket:

    minio mc event list myminio/mybucket

    Trông chờ:

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


  6. Liệt kê các sự kiện được chỉ định trong nhóm (bằng JSON) : Chạy lệnh này để liệt kê sự kiện được gán cho myminio/mybucket ở định dạng JSON:

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

    Trông chờ:

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

Cấu trúc của dữ liệu thông báo sự kiện mà Flask nhận được

Tùy thuộc vào dịch vụ hoặc tiện ích tích hợp mà bạn đang xây dựng, bạn có thể cần xác định event_data từ ứng dụng Flask của mình và điều này đòi hỏi bạn phải hiểu rõ về dữ liệu mà sự kiện của bạn cung cấp.


 { "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" } }


Bằng cách làm theo các bước này, bạn có thể sử dụng hiệu quả các thông báo sự kiện MinIO, tự động hóa đáng kể các quy trình xử lý dữ liệu. Để biết thêm hướng dẫn và thông tin chi tiết, vui lòng tham khảo tài liệu MinIO trên Thông báo nhóm Giám sát các sự kiện của nhóm và đối tượng .


Nếu bạn quan tâm đến việc thiết lập MinIO với PostgreSQL , hãy xem qua Hợp lý hóa các sự kiện dữ liệu với MinIO và PostgreSQL , trong đó tôi đã đề cập đến cấu hình mở rộng và quản lý các sự kiện dữ liệu của MinIO. Các cấu hình này bao gồm từ việc sử dụng Bảng điều khiển MinIO để có giao diện đồ họa thân thiện với người dùng cho đến công cụ dòng lệnh mc để thiết lập tập lệnh chi tiết hơn. Bài đăng trên blog làm tròn thêm sự hiểu biết của bạn về chủ đề này bằng cách nhấn mạnh tầm quan trọng của việc định cấu hình PostgreSQL đúng cách trong giao diện người dùng MinIO và tầm quan trọng của việc khởi động lại máy chủ MinIO để các thay đổi có hiệu lực.


Phát triển Webhook bằng Flask để nhận thông báo sự kiện

Sau khi triển khai môi trường, giờ đây chúng tôi chuyển trọng tâm sang tích hợp MinIO với Python, một khía cạnh quan trọng trong hệ thống xử lý và xử lý dữ liệu của chúng tôi. Sự tích hợp này đóng vai trò then chốt trong việc tạo ra một hệ sinh thái gắn kết, nơi MinIO có thể cộng tác liền mạch với Flask.

Nhập các gói cần thiết

Trong mã trình diễn của chúng tôi, chúng tôi chọn cẩn thận các thao tác nhập Python để đảm bảo chức năng của ứng dụng phù hợp với mục đích đã định. Gói flask tạo cơ sở hạ tầng máy chủ web, xác định điểm cuối để xử lý các yêu cầu HTTP đến. Sau đó, ứng dụng có thể được mã hóa để xử lý các thông báo sự kiện MinIO theo bất kỳ cách nào mong muốn.


 from flask import Flask, jsonify, request


Các hoạt động nhập này cùng nhau tạo thành nền tảng của ứng dụng, cho phép ứng dụng nhận và xử lý các thông báo sự kiện MinIO.

Điểm cuối xử lý sự kiện và ứng dụng Flask trong Python

Ứng dụng Flask được khởi tạo và điểm cuối được thiết lập để xử lý các yêu cầu POST tại tuyến /minio-event . Flask là một micro web framework bằng Python, lý tưởng để thiết lập các ứng dụng web và điểm cuối 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


Hàm handle_minio_event trong ứng dụng Flask xử lý các yêu cầu POST chứa dữ liệu sự kiện MinIO và trả về dữ event_data nhận được từ thông báo sự kiện MinIO.


Cách tiếp cận này tạo điều kiện thuận lợi cho việc xử lý và phản hồi theo thời gian thực đối với các sự kiện lưu trữ, cho phép tương tác động giữa hệ thống lưu trữ MinIO và ứng dụng Flask.

Tích hợp dịch vụ với các sự kiện nhóm MinIO thông qua Python Scripting

Bài đăng trên blog này đã sử dụng MinIO và Python trong môi trường Docker để chứng minh sức mạnh và tính linh hoạt của thông báo sự kiện nhóm MinIO, đồng thời thể hiện cách tiếp cận chiến lược để tạo các ứng dụng hướng sự kiện hiệu quả, có thể mở rộng.


Việc sử dụng Docker, với công nghệ container hóa, nổi bật trong việc cho phép các thành phần như MinIO và Flask hoạt động độc lập nhưng gắn kết. Tất nhiên, thiết lập dựa trên nền tảng đám mây được chứa trong bộ chứa này giúp giảm thiểu xung đột và sự phụ thuộc, làm nổi bật tầm quan trọng của bộ chứa Docker và Docker trong kiến trúc phần mềm hiện đại.


Khi kết thúc quá trình khám phá thông báo sự kiện webhook của MinIO, tôi tin rằng sức mạnh tổng hợp của ngôn ngữ lập trình động và sức mạnh đáng gờm của MinIO mang lại một bộ công cụ tuyệt vời. Sự kết hợp này mở đường cho vô số cơ hội trong phát triển ứng dụng. Nó cho phép chúng tôi không chỉ đổi mới và hợp lý hóa mà còn mở rộng khả năng của mình với hiệu quả và khả năng thích ứng vượt trội.


Hướng dẫn này đã chứng minh tính đơn giản và hiệu quả của việc phát triển API bằng Python, đặt nền tảng vững chắc cho sự đổi mới liên tục và đáp ứng nhu cầu luôn thay đổi. Nó nhấn mạnh khả năng thích ứng cần thiết cho sự tiến bộ liên tục trong cả quản lý dữ liệu và sự phát triển của phát triển ứng dụng. Cách tiếp cận này không chỉ là một phương pháp luận; đó là con đường dẫn đến những nỗ lực công nghệ của chúng ta trong tương lai.