Ya göreviniz küçüktür ya da onu daha küçük görevlere bölebilirsiniz. Ve küçük bir görev, bir mikro hizmet için mükemmel bir seçimdir.
Yazılım tasarımı, yazılım geliştirmede önemli bir aşamadır. Tasarım yaklaşımı, tüm projeyi ve farklı gereksinimleri nasıl ele aldığınızı etkileyebilir.
Geliştiriciler, genellikle tüm yazılım bileşenlerini tek bir modülde toplayan yekpare bir mimari kullanmışlardır. Ancak bu yaklaşım, özellikle daha büyük uygulamalar için verimsiz olabilir.
Mikro hizmetler bu sınırlamaları ele almayı amaçlar. Mikro hizmet, belirli işlevleri yerine getiren küçük, modüler bir uygulamadır. Yekpare uygulamalardan farklı olarak, mikro hizmetler bağımsız dağıtım ve ölçeklendirmeye izin verir. Sonuç olarak, daha esnektirler ve bakımları daha kolaydır.
Mikro Hizmet Mimarisi
Mikro hizmet mimarisi, büyük bir uygulamayı her biri belirli bir iş gereksinimini karşılamak üzere tasarlanmış bağımsız hizmetlere bölen bir yazılım tasarım yaklaşımıdır.
Bu hizmetler, ayrı veritabanı eşgörünümleri ve bilgi işlem gücü dahil olmak üzere özel olarak ayrılmış kaynaklar üzerinde çalışır. Yekpare sistemlerin aksine, mikro hizmet uygulamaları daha fazla esneklik sağlayacak şekilde gevşek bir şekilde birleştirilmiştir.
Dağıtılmış bir sistemde, sunucu düğümleri mikro hizmet uygulamalarını ayrı olarak dağıtır ve yürütür. süreçler—HTTP gibi iletişim protokollerini kullanarak veya mesaj simsarları aracılığıyla birbirleriyle iletişim kurma RabbitMQ gibi.
Esasen bu mimari yaklaşım, servislerin yazılım sistemi içinde etkin bir şekilde çalışırken birbirlerinden bağımsız olmalarını sağlar.
Bu eğitimde, Flask ve PostgreSQL kullanarak kullanıcı verilerini yöneten basit bir kullanıcı mikro hizmetinin uygulanmasında size rehberlik edeceğiz.
PostgreSQL Veritabanı Kurma
Başlamak için PostgreSQL'i kurun. PostgreSQL kurulu değilse, öğrenebilirsiniz. PostgreSQL'i Windows'a nasıl kurarım veya macOS'ta PostgreSQL nasıl kurulur.
Alternatif olarak, bir uzak PostgreSQL veritabanı misal.
Bu kılavuz, bir PostgreSQL veritabanı kurmak için Render'ın ücretsiz katmanını kullanacaktır. Render'da bir PostgreSQL veritabanı örneğini döndürmek için şunları izleyin:
- Başını aşmak Render'ın web sitesi, bir hesap için kaydolun ve hesabınızda oturum açın. Gösterge Paneli sayfa.
- Pano sayfanızda, görüntülenen hizmetler listesinden PostgreSQL hizmetini seçin.
- Veritabanı ayarları sayfasında, gerekli ayrıntıları doldurun ve seçtiğinizden emin olun. ücretsiz katmanve son olarak tıklayın Veritabanı yarat.
Bu projenin kodunu burada bulabilirsiniz. GitHub deposu.
Bir Flask Mikro Hizmeti Oluşturun
- Terminalinizde yeni bir dizin oluşturun ve değiştirin:
mkdir flask-mikro hizmet
cd flask-mikro hizmet - Ardından, yükleyin sanal ortam, yalıtılmış bir sanal geliştirme ortamı oluşturmak için.
pip kurulum virtualenv
- Projenizde bir sanal ortam oluşturun:
sanalenv venv
- Son olarak sanal ortamı etkinleştirin.
# Pencereler:
.\venv\Komut Dosyaları\etkinleştir
# Unix veya MacOS:
kaynak venv/bin/etkinleştir
Gerekli Paketleri Kurun
- Yeni bir tane oluştur gereksinimler.txt kök dizindeki dosya ve şu paketleri ekleyin:
matara
psycopg2-ikili
sqlalchemy - Ardından, paketleri kurun.
pip kurulumu -r gereksinimleri.txt
Bir Flask Sunucusu Oluşturun
Kök dizinde yeni bir dosya oluşturun: hizmet.pyve aşağıdaki kod:
- Aşağıdaki içe aktarmaları yapın:
itibaren matara içe aktarmak Şişe, istek, jsonify
itibaren sqlalchemy içe aktarmak create_engine, Sütun, Tamsayı, Dizgi
itibaren sqlalchemy.orm içe aktarmak oturum görevlisi
itibaren sqlalchemy.ext.declarative içe aktarmak bildirim_tabanlı
içe aktarmak psikopat2 - Flask örneğini oluşturun ve veritabanı bağlantısını yapılandırın.
Kopyala harici veritabanı URL'si Render'ın veritabanı ayarları sayfasında. biz kullanacağız SQLAlchemy create_engine yöntem ve Psikopg2 veritabanı bağlantısını yapılandırmak için. Yukarıdaki koddaki veritabanı URL'sini güncellediğinizden ve yukarıda belirtilen biçimle eşleşen kendi PostgreSQL örneğinizin URL'siyle değiştirdiğinizden emin olun. URL biçimi yanlışsa, kod bir hata atar.uygulama = Şişe (__name__)
motor = yarat_motor("postgresql+psycopg2://flask_service_fe0v_user: 4785MhjfkdjfhjfjyUx67O2Nuzjchb2MQIP@dpg-chffjfjdkgfk54d6mb7860-a.oregon-postgres.render.com/flask_service_fe0v")
- Veritabanı için bir SQLAlchemy modeli oluşturun.
Kod, kullanıcıların tablosu için bir veri modeli tanımlar. Modeli tanımladıktan sonra, kullanarak tabloyu oluşturur. SQLAlchemy create_all veritabanını alan yöntem bağlantı motoru nesnesi parametre olarak. Son olarak, örneğini oluşturur oturum yapıcı veritabanıyla etkileşimleri etkinleştirmek için aynı motor nesnesini kullanma.Temel = bildirimsel_temel()
sınıfkullanıcı(Temel):
__tablename__ = 'kullanıcılar'
id = Sütun (Tamsayı, birincil_anahtar=Doğru)
isim = Sütun (Dize(50))
Base.metadata.create_all (motor)
Yazdır("Kullanıcılar tablosu başarıyla oluşturuldu.")
Oturum = oturum oluşturucu (motor) - Son olarak, mikro hizmet için API yollarını tanımlayın.
@app.route("/api/user", method=["POST"])
kesinlikleKullanıcı oluştur():
veri = request.get_json()
ad = veri["isim"]
denemek:
oturum = Oturum()
new_user = Kullanıcı (isim=isim)
oturum.add (yeni_kullanıcı)
session.commit()
geri dönmek {"İD": yeni_kullanıcı.id, "isim": yeni kullanıcı adı, "İleti": f"Kullanıcı {isim} yaratıldı."}, 201
hariç İstisna gibi e:
Yazdır(f"hata"{e}' olmuş.")
geri dönmek {"hata": "Kullanıcı oluşturulurken bir hata oluştu."}, 500
@app.route("/api/user", method=["GET"])
kesinlikleget_all_users():
denemek:
oturum = Oturum()
kullanıcılar = session.query (Kullanıcı).all()
eğer kullanıcılar:
sonuç = []
için kullanıcı içinde kullanıcılar:
sonuç.ekleme({"İD": Kullanıcı kimliği, "isim": Kullanıcı adı})
geri dönmek jsonify (sonuç)
başka:
geri dönmek jsonify({"hata": f"Kullanıcılar bulunamadı."}), 404
hariç İstisna gibi e:
Yazdır(f"hata"{e}' olmuş.")
geri dönmek {"hata": "Tüm kullanıcılar alınırken bir hata oluştu."}, 500
eğer __isim__ == "__ana__":
app.run (hata ayıklama=Doğru, ana bilgisayar="0.0.0.0")
Mikro hizmeti test edin
Yukarıdaki kod, PostgreSQL veritabanına veri ekleyen ve alan basit bir kullanıcı verisi mikro hizmetini göstermektedir. İdeal olarak, mikro hizmetler REST API mimarisi web hizmetleri oluşturmak için esnek bir yaklaşıma izin verdiği için bu mimari, mikro hizmetlerin tasarım modeline çok iyi uyar.
Bununla birlikte, mikro hizmetlerin, sistemin özel gereksinimlerine bağlı olarak diğer tasarım yaklaşımlarını ve iletişim protokollerini de kullanabileceğini belirtmek önemlidir.
Hizmeti test etmek için geliştirme sunucusunu çalıştırın ve tanımlanan uç noktalara HTTP istekleri yapmak için Postman'a gidin.
flask --app hizmet çalıştırması
Postman'da, kullanıcı verilerini eklemek için bir POST isteği yapın.
Docker ile Mikro Hizmetleri Konteyner Haline Getirmek
Docker, uygulamaları ve bağımlılıklarını kapsayıcılarda paketler. Bu yaklaşım, bir üretim ortamında mikro hizmetlerin geliştirilmesini, devreye alınmasını ve yönetilmesini kolaylaştırır her hizmet bağımsız olarak çalışabildiğinden ve yapılandırılmış iletişimi kullanarak diğer hizmetlerle iletişim kurabildiğinden protokol.
Başlamadan önce, aşağıdaki adımları izleyerek Docker'ı yüklemeniz gerekir. Liman işçisi web sitesi. Ardından, uygulamayı bir kapsayıcıda çalıştırmak için gerekli bağımlılıkları ayarlamak için gerekli talimatları içeren bir Docker dosyasından bir Docker görüntüsü oluşturun.
- Proje klasörünüzün kök dizininde bir Dockerfile oluşturun ve şu talimatları ekleyin:
İTİBAREN piton:3.9-alp
İŞ YÖNÜ /app
KOPYALA gereksinimler.txt ./
KOŞMAK pip kurulumu -r gereksinimleri.txt
KOPYALA. .
ORTAYA ÇIKARMAK5000
CMD ["piton", "./hizmet.py"] - Docker görüntüsünü oluşturmak için aşağıdaki komutu çalıştırın.
docker build -t flask-microservice .
- Son olarak, Docker kapsayıcısını çalıştırın.
docker run -p 5000:5000 şişe mikro hizmeti
Bu, Flask mikro hizmetini çalıştıran bir Docker kapsayıcısını başlatacak ve kapsayıcıdaki bağlantı noktası 5000'i kullanarak web tarayıcınızdan veya Postman'dan HTTP istekleri yapmanıza izin veren ana makinedeki 8000 numaralı bağlantı noktası URL http://localhost: 5000.
Mikro Hizmet Mimarisini Benimseme
Mikro hizmet mimarisi, ölçeklenebilir ve sağlam yazılım uygulamaları geliştirmek için popüler bir yaklaşım haline geldi. Uygulamayı küçük, bağımsız olarak dağıtılabilen hizmetlere bölen mikro hizmet mimarisi, sistemin bakımını ve ölçeklendirilmesini kolaylaştırır.
Bu mimarinin potansiyel faydaları olsa da, tüm kullanım durumları için uygun değildir. Her durumda, projenin özel iş gereksinimleri öncelikle benimsenen tasarım yaklaşımını etkilemelidir.