0Pricing
FastAPI Backend Development Bootcamp · Ders

Hizmetler Arası İletişim

HTTP veya ileti kuyrukları gibi FastAPI mikro hizmetleri arasındaki iletişim için çeşitli kalıpları uygulayın.

Hizmetler Arası İletişim, CoddyKit'te ücretsiz bir FastAPI Backend Development Bootcamp dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, FastAPI Backend Development Bootcamp öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.

Why Services Talk

Mikro hizmet mimarisinde uygulamanız tek bir büyük program değildir. Bunun yerine, birlikte çalışan birçok küçük ve bağımsız hizmetten oluşur. Bu hizmetlerin ortak bir amaca ulaşabilmesi için birbirleriyle iletişim kurmaları gerekir.

Bir e-ticaret sistemi hayal edin: bir hizmet kullanıcı hesaplarını yönetirken, diğeri ürün envanterini yönetir, üçüncüsü ise siparişleri işler. Bir kullanıcı sipariş verdiğinde, sipariş hizmetinin stok durumunu kontrol etmek için envanter hizmetiyle ve ödeme bilgilerini almak için kullanıcı hizmetiyle konuşması gerekir.

HTTP: Direct Conversations

Mikro hizmetlerin iletişim kurmasının en yaygın yolu HTTP istekleridir. Bu, bir hizmetin doğrudan başka bir hizmetin API uç noktasına çağrı yapması gibidir.

  • Senkron: Çağıran hizmet, devam etmeden önce bir yanıt bekler.
  • Basit: Özellikle istek-yanıt kalıpları için anlaşılması ve uygulanması kolaydır.
  • Tanıdık: Web'de gezinirken zaten aşina olduğunuz aynı HTTP protokolünü kullanır.

FastAPI hizmetleri doğal olarak HTTP uç noktalarını dışa aktarır, bu da bunu anlaşılır ve doğrudan bir yöntem haline getirir.

Making an HTTP Request

Python'da requests kütüphanesi, HTTP çağrıları yapmak için mükemmeldir. İşte bir FastAPI servisinin kullanıcı verilerini almak için başka bir servisi nasıl çağırabileceği:

Servis B'nin bir /users/{user_id} uç noktası sunduğunu ve Servis A'nın bunu çağırdığını varsayalım:

import requests

def get_user_from_service_b(user_id: int):
    # In a real scenario, 'service_b_url' would be a config variable
    service_b_url = f"http://localhost:8001/users/{user_id}"
    try:
        response = requests.get(service_b_url)
        response.raise_for_status() # Raises HTTPError for bad responses (4xx or 5xx)
        return response.json()
    except requests.exceptions.RequestException as e:
        print(f"Error calling Service B: {e}")
        return None

if __name__ == "__main__":
    print("Simulating a call to Service B for user 1...")
    user_data = get_user_from_service_b(1)
    if user_data:
        print(f"Received user data: {user_data}")
    else:
        print("Failed to get user data.")
    print("\nNote: For this to truly work, a service B needs to be running at http://localhost:8001.")

Handling HTTP Responses

Bir HTTP isteği gönderdikten sonra, yanıtı uygun şekilde işlemek çok önemlidir. Bu, HTTP durum kodunun kontrol edilmesini ve yanıt gövdesinin ayrıştırılmasını içerir.

  • Durum Kodları: 200 OK başarı, 404 Not Found kaynağın bulunamadığı, 500 Internal Server Error ise sunucu tarafında bir sorun olduğu anlamına gelir.
  • Yanıt Gövdesi: Genellikle response.json() kullanarak ayrıştırabileceğiniz JSON formatında veriler içerir.
  • Hata Yönetimi: Ağ sorunlarını veya sunucu hatalarını yakalamak için isteklerinizi her zaman try-except blokları içine alın.

Resilient HTTP: Timeouts & Retries

Ağ sorunları veya yavaş hizmetler, HTTP çağrılarınızın takılmasına veya başarısız olmasına neden olabilir. İletişiminize dayanıklılık kazandırmak hayati önem taşır.

  • Zaman aşımları (Timeouts): Bir yanıtı beklemek için maksimum süre belirleyin. Hizmet bu süre içinde yanıt vermezse istek başarısız olur ve hizmetinizin süresiz olarak takılması önlenir.
  • Yeniden denemeler (Retries): Bir istek geçici bir hata (örneğin, ağ kesintisi, geçici hizmet aşırı yüklenmesi) nedeniyle başarısız olursa, isteği bir gecikmeyle birkaç kez otomatik olarak yeniden deneyebilirsiniz. tenacity gibi kütüphaneler bunu kolayca uygulamanıza yardımcı olabilir.

Bu stratejiler, mikro hizmetlerinizin sağlamlığını artırır.

Message Queues: Decoupling Services

Bazen doğrudan HTTP çağrıları en uygun çözüm olmayabilir. Anlık yanıt gerektirmeyen görevler için veya hizmetler arasındaki doğrudan bağımlılıkları azaltmak istediğinizde, mesaj kuyrukları oldukça güçlü bir araçtır.

Bir mesaj kuyruğu, bir tüketici hizmeti işlem yapmaya hazır olana kadar mesajları saklayarak bir aracı görevi görür. RabbitMQ ve Apache Kafka bunun popüler örneklerindendir.

  • Asenkron: Gönderici (üretici), alıcının (tüketici) mesajı işlemesini beklemez.
  • Bağımsız (Decoupled): Hizmetlerin birbirlerinin doğrudan ağ konumlarını bilmelerine gerek kalmaz.
  • Ölçeklenebilir: Daha fazla tüketici ekleyerek yükteki ani artışlar kolayca yönetilebilir.

The Producer-Consumer Model

Mesaj kuyrukları basit bir prensiple çalışır:

  • Üretici (Producer): Bir kuyruğa mesaj oluşturan ve gönderen bir servis. Mesajı "gönderir ve unutur".
  • Kuyruk (Queue): İşlenene kadar mesajları tutan geçici bir depolama arabelleği.
  • Tüketici (Consumer): Bir kuyruğu dinleyen, mesajları alan ve onları işleyen bir servis.

Bu model, özellikle arka plan görevleri veya olay güdümlü mimariler için sağlam, ölçeklenebilir ve hataya dayanıklı bir iletişim sağlar.

Conceptual Message Producer

Tam kapsamlı ve çalıştırılabilir bir mesaj kuyruğu örneği karmaşık olsa da, aşağıda bir servisin kuyruğa nasıl mesaj "gönderebileceğini" gösteren kavramsal bir Python fonksiyonu yer almaktadır. Gerçek bir senaryoda bu işlem, pika (RabbitMQ için) veya confluent-kafka gibi bir istemci kütüphanesi kullanılmasını gerektirir.

Göndericinin mesajın işlenmesini beklemediğine, sadece mesajı kuyruğa yerleştirdiğine dikkat edin.

import json
import time

# This is a simplified, conceptual representation.
# In a real app, 'queue_client' would be an actual library client.

class MockQueueClient:
    def publish(self, queue_name: str, message: dict):
        print(f"[{time.time():.2f}] PRODUCER: Sending message to '{queue_name}'...")
        print(f"  Message content: {json.dumps(message)}")
        # In a real scenario, this would send to a message broker
        print("  (Message sent to broker, producer continues its work)")

def send_new_order_event(order_details: dict):
    queue_client = MockQueueClient()
    queue_client.publish("order_processing_queue", order_details)
    print("PRODUCER: Order event sent successfully.")

if __name__ == "__main__":
    order_info = {"order_id": "ORD001", "item": "Laptop", "quantity": 1}
    send_new_order_event(order_info)
    print("\nPRODUCER: Service continues other tasks while order processes.")

When to Choose HTTP

HTTP iletişimi genellikle şunlar için tercih edilir:

  • Senkron İstekler: Çağıran servisin iş akışına devam edebilmesi için anlık bir yanıt gerektirdiği durumlar (örneğin; kullanıcı profili verilerini alma, siparişi onaylamadan önce stok kontrolü yapma).
  • İstek-Yanıt Modelleri: Basit sorgular, veri getirme işlemleri veya istemcinin doğrudan bir sonuç beklediği işlemler.
  • Sıkı Bağlılığın Kabul Edilebilir Olduğu Durumlar: Servislerin birbirleriyle yakın çalışacak şekilde tasarlandığı ve doğrudan çağrıların verimli olduğu durumlar.
  • Gerçek Zamanlı Kullanıcı Etkileşimleri: Genellikle ön uçtan arka uca iletişim için veya anlık bir arayüz güncellemesinin gerektiği durumlarda kullanılır.

Choosing the Right Tool

Hizmetlerin iletişim kurduğu iki ana yol gördünüz. Her birinin kendi güçlü yanları var. Şu senaryoyu düşünün:

Bir kullanıcı, tamamlanması birkaç dakika sürebilecek karmaşık bir rapor oluşturma isteği gönderiyor. Kullanıcının beklemesine gerek yok ancak işlem tamamlandığında bilgilendirilmek istiyor.

İlk istek gönderimi için hangi iletişim kalıbı en uygunudur?

Recap: Talking Services

Harika iş! Mikro hizmetlerin temel iletişim yollarını keşfettiniz.

  • HTTP: Anlık geri bildirimin gerektiği eşzamanlı, istek-yanıt etkileşimleri için en iyisidir. Doğrudan bir yöntemdir ve requests gibi kütüphaneler kullanılarak kolayca uygulanabilir.
  • Mesaj Kuyrukları: Eşzamansız, ayrıştırılmış iletişim, uzun süren görevlerin yönetimi ve olaya dayalı mimarilerin etkinleştirilmesi için idealdir. Sağlam bir mesaj iletimi için üretici-tüketici modelini kullanırlar.

Doğru modeli seçmek; bağlantı, gecikme ve güvenilirlik konusundaki özel ihtiyaçlarınıza bağlıdır. Bir sonraki derste, bir API Ağ Geçidi (API Gateway) oluşturmanın derinliklerine ineceğiz!

Sıkça Sorulan Sorular

“Hizmetler Arası İletişim” dersi ücretsiz mi?

Evet — “Hizmetler Arası İletişim” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve FastAPI Backend Development Bootcamp kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.

“Hizmetler Arası İletişim” dersinde ne öğreneceğim?

HTTP veya ileti kuyrukları gibi FastAPI mikro hizmetleri arasındaki iletişim için çeşitli kalıpları uygulayın. FastAPI Backend Development Bootcamp ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

FastAPI Backend Development Bootcamp öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te FastAPI Backend Development Bootcamp, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Hizmetler Arası İletişim” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu FastAPI Backend Development Bootcamp dersinde kod yazıp çalıştırabilir miyim?

Evet. Her FastAPI Backend Development Bootcamp dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Mikro hizmet Mimarisi Tasarlama
  2. Hizmetler Arası İletişim
  3. FastAPI ile API Ağ Geçidi Uygulama
  4. Hizmet Keşfi ve Sağlık Denetimleri
← FastAPI Backend Development Bootcamp Sayfasına Dön