paint-brush
Ölçeklenebilir ve Verimli Olay Odaklı Uygulamalar Oluşturmak için MinIO ve Python'u Kullanmakile@minio
535 okumalar
535 okumalar

Ölçeklenebilir ve Verimli Olay Odaklı Uygulamalar Oluşturmak için MinIO ve Python'u Kullanmak

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

Çok uzun; Okumak

MinIO'daki etkinlik bildirimleri ilk başta heyecan verici görünmeyebilir, ancak güçlerinden yararlandığınızda depolama gruplarınızdaki dinamikleri aydınlatırlar.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Ölçeklenebilir ve Verimli Olay Odaklı Uygulamalar Oluşturmak için MinIO ve Python'u Kullanmak
MinIO HackerNoon profile picture


MinIO'daki etkinlik bildirimleri ilk başta heyecan verici görünmeyebilir, ancak güçlerinden yararlandığınızda depolama gruplarınızdaki dinamikleri aydınlatırlar. Olay bildirimleri tam teşekküllü, verimli bir nesne depolama sisteminin kritik bileşenleridir. Web kancaları MinIO ile entegrasyon için benim favori aracımdır . Olaylar dünyasında bir İsviçre Çakısı gibidirler ve çeşitli zorluklara evrensel bir çözüm sunarlar.


MinIO'nun kullanıcı dostu kullanıcı arayüzü kusursuz hizmet sağlar entegrasyonlar , ancak bu kılavuzda daha derinlere dalıyoruz. MinIO entegrasyonunun temel noktalarında size yol göstermek için müşteri kimlik bilgilerini kullanarak Python'da sıfırdan hizmetler geliştiriyoruz.


Araştırmamızda, akıcı ve verimli orkestrasyon sunan bir yöntem olan docker-compose'u kullanarak dağıtıma odaklanacağız. Bu yaklaşım, MinIO ve Flask için uyumlu bir ortam kurulmasını ve sorunsuz bir şekilde etkileşime girmelerini sağlayacak. MinIO hizmetini uygun kimlik bilgileri ve yapılandırmalarla entegre ederek, MinIO kova olaylarını yönetme ve bunlara yanıt vermenin pratik uygulamasını etkili bir şekilde gösteren sistematik bir iş akışı oluşturmayı hedefliyoruz.


Her zaman olduğu gibi istemci yapılandırmalarını ayarladığımızda ve yanıt verilerinin yapısını tanımladığımızda gerçek eğlence başlıyor. Bu gösterim, MinIO istemcinizi, olay bildirimi verilerinin daha fazla işlenebileceği bir Flask uygulamasına nasıl bağlayabileceğinize dair birkaç önemli hususu vurgulayacaktır. MinIO ile kendi olay odaklı sistemlerinizi geliştirirken kendinizi rahat hissetmenizi istiyoruz, bu nedenle sunduğumuz hizmetlerden yararlanın. blog varlıkları/şişe-webhook-etkinlik-bildirimleri barındırılan kaynak MinIO'nun GitHub Sayfası .


Veri işlemenin hem sanat hem de bilim olduğu, MinIO ile daha kolay hale geldiği bir dünyaya dalmaya hazırlanın. Bu, uygulamalarınızın verilerle çalışma biçiminde yenilik yapmak, yaratmak ve devrim yapmak için bir fırsattır.

MinIO ve Entegre Hizmetler

MinIO'nun entegrasyon Kubernetes ekosistemi çeşitli bulut teknolojilerine uyarlanabilirliğini örneklendiriyor. Web kancaları çok önemlidir ve geliştiricilere, ister farklı bulut platformlarındaki verileri yönetmek ister yerel ev laboratuvarı kurulumları için olsun, özel entegrasyonlar oluşturma esnekliği sunar.


Bu kılavuz teorik kavramların ötesine geçerek entegrasyonlarınızı oluşturmanız için size pratik, yürütülebilir kod parçacıkları sağlar. Bu, MinIO etkinlik bildirimlerinden yararlanma konusunda yaratıcılığınızın sınırsız potansiyelini keşfetmeniz için bir davettir.

Docker ile Python Uygulamasının Temellerini Atma

Yolculuğumuzun ilk aşaması, sağlam bir Python uygulama ortamı oluşturmak için Docker'ın konteynerleştirme gücünden yararlanmaya adanmıştır. Yaklaşımımız, basitliği ve etkinliği nedeniyle seçilen bir yöntem olan Docker-compose ile dağıtıma odaklanıyor. Bu seçim, yüksek düzeyde işlevsellik sağlarken kullanım kolaylığı ve hızlı dağıtıma öncelik vererek geniş bir geliştirici yelpazesine hitap edecek şekilde tasarlanmıştır.


Docker-compose'u kullanarak kullanıcı dostu, konfigürasyona dayalı bir kurulum oluşturuyoruz. Bu ortam, projelerinin yeteneklerinin derinliğinden ödün vermeden hızlı dağıtım arayanlar için mükemmeldir. Projenizin özel gereksinimlerini karşılayarak gelişmiş web kancası özelliklerini entegre etmek ve MinIO ayarlarında ince ayar yapmak için basit bir yol sağlar.


Bu ortamı oluşturmak için attığımız her adım çok önemlidir. Bu sadece hizmetleri çalışır duruma getirmekle ilgili değil; kapsamlı bir sistem oluşturmak için bileşenleri anlamak ve bunlardan yararlanmakla ilgilidir. Kendi sistemlerinizi geliştirmek, inovasyonunuzu ateşleyen, genel veri yönetimi stratejinizi geliştiren ve sonunda ham verilerinizi eyleme geçirilebilir, anlayışlı bilgilere dönüştüren kıvılcım olabilir.

MinIO ve Entegre Hizmetlerin Dağıtılması

Docker-Compose ile dağıtın: Flask Uygulaması ve MinIO

Bir Python uygulaması ve ortamını kurarak başlayacağız. Bu, MinIO'nun docker compose ile dağıtılmasını ve entegre edilecek hizmetleri içerir. MinIO'yu bir Flask uygulamasıyla kurmak için minio/blog-assets deposunu yerel ortamınıza kopyalamak üzere git komutunu kullanacağız:


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


Bu klonlayacak minio/blog varlıkları GitHub'dan depoya gidin /flask-webhook-olay-bildirimleri/ içeren dizin docker-compose.yaml Dosyayı açın ve MinIO ve Flask hizmetlerini başlatın.

Dizin Yapısı

Bu docker-compose yapısı, iki hizmeti ve bunların ilgili yapılandırma değişkenlerini ana hatlarıyla belirtir. Görselleştirme amacıyla, istenen dizin yapısının ağaç görünümünü burada sağladım:


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

MinIO'da Web Kancalarını Ayarlama

MinIO'da bir web kancasını yapılandırmak, kullanıcı arayüzünü kullanmak, mc (MinIO istemci yardımcı programı) kullanmak veya çeşitli programlama dilleriyle komut dosyası yazmak gibi çeşitli yöntemlerle gerçekleştirilebilir.


MinIO şunları destekler: etkinlik bildirimleri için çeşitli harici hizmetler AMQP (RabbitMQ) , MQTT , NATS , NSQ , Elasticsearch , Kafka , MySQL , PostgreSQL , Redis ve webhook hizmetleri dahil.


Bunları kullanmak için MinIO'yu ayarlama etkinlik bildirimleri MinIO örneğinizin uygulama ekosisteminizin etkileşimli, duyarlı bir parçası olarak önemli olay verilerini yalnızca yakalamakla kalmayıp aynı zamanda etkili bir şekilde iletmesini sağlayan bir dizi iyi tanımlanmış adımı içerir.

MinIO Olay Bildirimlerinin Veri Yapısını Anlamak

MinIO'dan gelen S3 olay bildirimleri şunları içerir: ayrıntılı JSON veri yapısı Olayların kapsamlı bir şekilde anlaşılması ve etkili bir şekilde yönetilmesi için gereklidir. Etkinlik verilerinin içerisinde bulunan değerlerden bazılarını aşağıda listeledim:


  • Anahtar : Paketteki nesnenin benzersiz tanımlayıcısı.


  • eTag : Bütünlük ve sürüm kontrolü için nesnenin sürüm tanımlayıcısı.


  • Boyut : Nesnenin bayt cinsinden boyutu, ölçeğini gösterir.


  • Sıralayıcı : Olayların tam olarak oluştukları sırayla işlenmesini sağlar.


  • İçerik türü : Dosyanın nasıl işleneceğini veya görüntüleneceğini belirten nesnenin ortam türü.


  • Kullanıcı Meta Verileri : Ek bağlam sağlayan, nesneye eklenen kullanıcı tanımlı meta veriler.


  • Kova Detayları :

    • ARN (Amazon Kaynak Adı) : AWS'deki paketin benzersiz tanımlayıcısı.

    • İsim : Nesnenin depolandığı paketin adı.

    • Sahip Kimliği : Kovanın sahibi hakkında bilgi.


  • s3SchemaVersion : Kullanılan S3 olay bildirim şemasının sürümünü belirtir.


  • Yapılandırma Kimliği : Bu etkinliği tetikleyen belirli bildirim yapılandırmasının tanımlayıcısı.


Bu yapı özellikle aşağıdakiler için etkilidir: Şişe uygulamaları MinIO grubuyla etkileşimlerin sistematik günlüğe kaydedilmesine, ayrıştırılmasına ve analizine olanak tanır.

Web Kancaları ve Olay Odaklı İşlemler için MinIO'yu Ayarlama

Yukarıda özetlenen docker-compose.yaml dosyasını dağıttıktan sonra MinIO Client, mc komut satırı yardımcı programını kullanarak devam edin. Bu kurulum, MinIO'da bir takma ad oluşturmayı, uç noktayı yapılandırmayı ve paket bildirimlerini ayarlamayı içerir.


Tek bir komut çalıştırarak oluşturabileceğimiz "minio" konteyneri için etkileşimli bir terminalin içinde çalışacağız:


docker exec -it minio /bin/sh


Mc komutlarımızı bu kabuğun içinden çalıştırmamızın nedeni, Docker minio/minio görüntüsünün zaten mc kurulu ve kullanıma hazır olmasıdır.


Konteynerin etkileşimli terminaline girdikten sonra, MinIO İstemcisini (mc) kullanarak MinIO'yu olay bildirimleri için yapılandırma işlemi aşağıdaki temel adımları içerir:


  1. MinIO Takma Adını Ayarlama : İlk adım, MinIO İstemcisini (mc) kullanarak MinIO sunucunuz için bir takma ad oluşturmayı içerir. Bu takma ad, MinIO sunucunuzun bir kısayoludur ve sunucunun adresini ve erişim kimlik bilgilerini tekrar tekrar belirtmenize gerek kalmadan diğer mc komutlarını kolayca yürütmenize olanak tanır. Bu adım, MinIO sunucunuzun istemci aracılığıyla yönetimini basitleştirir.

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

  2. Webhook Uç Noktasını MinIO'ya Ekleme : MinIO'da yeni bir web kancası hizmeti uç noktası yapılandırın. Bu kurulum, uç nokta URL'si, güvenlik için isteğe bağlı bir kimlik doğrulama belirteci ve güvenli bağlantılar için istemci sertifikaları gibi önemli parametreleri tanımladığınız ortam değişkenleri veya çalışma zamanı yapılandırma ayarları kullanılarak yapılır.

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


  3. MinIO Dağıtımını Yeniden Başlatma : Ayarları yapılandırdıktan sonra değişikliklerin etkili olmasını sağlamak için MinIO dağıtımınızı yeniden başlatın.

    mc admin service restart myminio

    Beklemek:

    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. Paket Bildirimlerini Yapılandırma : Bir sonraki adım mc event add komutunun kullanılmasını içerir. Bu komut, yeni yapılandırılan Webhook hizmetini bu bildirimlerin hedefi olarak ayarlayarak yeni paket bildirim etkinlikleri eklemek için kullanılır.

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

    Beklemek:

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


  5. Pakete Abone Olunan Etkinlikleri Listeleme : myminio/mybucket'e atanan olayı listelemek için bu komutu çalıştırın:

    minio mc event list myminio/mybucket

    Beklemek:

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


  6. Pakete Atanan Olayları Listeleme (JSON'da) : myminio/mybucket'e atanan olayı JSON formatında listelemek için bu komutu çalıştırın:

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

    Beklemek:

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

Flask Tarafından Alınan Olay Bildirimi Verilerinin Yapısı

Oluşturduğunuz hizmetlere veya entegrasyona bağlı olarak, Flask uygulamanızdan event_data'yı tanımlamanız gerekebilir ve bu, etkinliğinizin sağladığı verilerin iyi anlaşılmasını gerektirir.


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


Bu adımları izleyerek MinIO olay bildirimlerinden etkili bir şekilde yararlanarak veri iş akışı süreçlerini önemli ölçüde otomatikleştirebilirsiniz. Daha ayrıntılı rehberlik ve bilgi için lütfen MinIO belgelerine bakın. Paket Bildirimleri Ve Kova ve Nesne Olaylarını İzleme .


MinIO'yu PostgreSQL ile kurmakla ilgileniyorsanız, şu adrese göz atın: MinIO ve PostgreSQL ile Veri Olaylarını Kolaylaştırma MinIO'nun kapsamlı yapılandırmasını ve veri olaylarının yönetimini ele aldığım yer. Bu yapılandırmalar, kullanıcı dostu bir grafik arayüz için MinIO Konsolunun kullanılmasından, daha ayrıntılı, komut dosyası oluşturulabilir bir kurulum için mc komut satırı aracına kadar uzanır. Blog yazısı, PostgreSQL'in MinIO kullanıcı arayüzünde doğru şekilde yapılandırılmasının önemini ve değişikliklerin geçerli olması için MinIO sunucusunu yeniden başlatmanın önemini vurgulayarak konuyu daha iyi anlamanızı sağlar.


Etkinlik Bildirimlerini Almak için Flask ile Web Kancası Geliştirme

Ortamımızın konuşlandırılmasının ardından artık odak noktamızı, veri işleme ve işleme sistemimizin önemli bir yönü olan MinIO'nun Python ile entegrasyonuna kaydırıyoruz. Bu entegrasyon, MinIO'nun Flask ile sorunsuz bir şekilde işbirliği yapabileceği uyumlu bir ekosistem oluşturma açısından çok önemlidir.

Gerekli Paketlerin İçe Aktarılması

Gösterim kodumuzda, uygulamanın işlevselliğinin amaçlanan amaca uygun olmasını sağlamak için Python içe aktarmalarını dikkatli bir şekilde seçiyoruz. flask paketi, gelen HTTP isteklerini işlemek için uç noktaları tanımlayarak web sunucusu altyapısını oluşturur. Daha sonra uygulama, MinIO olay bildirimlerini istenilen şekilde işleyecek şekilde kodlanabilir.


 from flask import Flask, jsonify, request


Bu içe aktarmalar toplu olarak uygulamanın temelini oluşturarak MinIO olay bildirimlerini almasına ve işlemesine olanak tanır.

Python'da Flask Uygulaması ve Olay İşleme Uç Noktası

Bir Flask uygulaması başlatılır ve /minio-event yolunda POST isteklerini işlemek için bir uç nokta ayarlanır. Flask, Python'da web uygulamalarını ve API uç noktalarını ayarlamak için ideal bir mikro web çerçevesidir.


 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


Flask uygulamasındaki handle_minio_event işlevi, MinIO olay verilerini içeren POST isteklerini işler ve MinIO olay bildiriminden alınan event_data döndürür.


Bu yaklaşım, gerçek zamanlı işlemeyi ve depolama olaylarına yanıt vermeyi kolaylaştırarak MinIO depolama sistemi ile Flask uygulaması arasında dinamik etkileşimi mümkün kılar.

Python Komut Dosyası aracılığıyla Hizmetleri MinIO Bucket Olaylarıyla Bütünleştirme

Bu blog gönderisi, MinIO kova olay bildirimlerinin gücünü ve esnekliğini göstermek için Docker ortamında MinIO ve Python'u kullandı ve ölçeklenebilir, verimli olay odaklı uygulamalar oluşturmaya yönelik stratejik bir yaklaşımı ortaya koydu.


Docker'ın konteynerizasyon teknolojisiyle kullanılması, MinIO ve Flask gibi bileşenlerin bağımsız ancak uyumlu bir şekilde çalışmasına olanak sağlamasıyla öne çıkıyor. Elbette bu konteynerleştirilmiş bulut yerel kurulum, çatışmaları ve bağımlılıkları en aza indirerek Docker ve Docker konteynerlerinin modern yazılım mimarisindeki önemini vurguluyor.


MinIO webhook olay bildirimlerine ilişkin araştırmamızın sonucunda, dinamik programlama dilinin sinerjisi ile MinIO'nun müthiş gücünün benzersiz bir araç seti sunduğuna ikna oldum. Bu eşleştirme, uygulama geliştirmede sınırsız fırsatların önünü açıyor. Bize yalnızca yenilik yapma ve düzene koyma gücü vermekle kalmıyor, aynı zamanda olağanüstü verimlilik ve uyarlanabilirlik ile yeteneklerimizi genişletme gücü veriyor.


Bu kılavuz, Python kullanarak API geliştirmenin basitliğini ve etkinliğini göstererek, devam eden inovasyon ve sürekli değişen talepleri karşılamak için sağlam bir temel oluşturmuştur. Hem veri yönetiminde hem de uygulama geliştirmenin evriminde sürekli ilerleme için gerekli olan uyarlanabilirliğin altını çiziyor. Bu yaklaşım sadece bir metodoloji değildir; teknolojik çabalarımızı geleceğe hazır hale getirmenin bir yoludur.