AWS SQS (Simple Queue Service) ve AWS SNS (Simple Notification Service), bulut tabanlı uygulamalarda mesajlaşma ve olay bildirimi için yaygın kullanılan iki AWS servisidir. İkisi de dağıtık sistemlerde gevşek bağlı mimariler kurmak için kritik öneme sahiptir, ancak iletişim modelleri ve kullanım senaryoları açısından belirgin şekilde ayrışırlar. Bu yazıda, SQS ve SNS arasındaki temel farkları, avantaj ve dezavantajları karşılaştırmalı olarak inceleyecek ve hangi durumda hangi servisi tercih etmeniz gerektiğine dair pratik ipuçları sunacağız.
SQS ve SNS’nin Temel Çalışma Prensibi
AWS SQS, tam yönetilen bir mesaj kuyruğu servisidir. Üreticiler (producer) mesajları bir kuyruğa gönderir ve tüketiciler (consumer) bu mesajları kuyruktan alır. Mesajlar, bir tüketici tarafından başarıyla işlenene kadar kuyrukta kalır. Bu model, “noktadan noktaya” (point-to-point) iletişim sağlar. AWS SNS ise tam yönetilen bir pub/sub (yayınla/abone ol) servisidir. Bir yayıncı (publisher) mesajı bir konuya (topic) gönderir ve bu mesaj, konuya abone olan tüm uç noktalara (SQS kuyruğu, Lambda fonksiyonu, HTTP/HTTPS endpoint’i, e-posta vb.) dağıtılır. Bu model “bire çok” (fan-out) iletişim sağlar.
Karşılaştırma Tablosu: SQS vs SNS
| Özellik | AWS SQS | AWS SNS |
|---|---|---|
| İletişim Modeli | Noktadan noktaya (kuyruk) | Pub/Sub (yayınla/abone ol) |
| Mesaj Teslimatı | En az bir kez teslimat; tüketici silene kadar kuyrukta bekler | En az bir kez teslimat (standart) veya tam olarak bir kez (FIFO konu); tüm abonelere dağıtılır |
| Mesaj Sıralaması | Sıralı (FIFO kuyruk) veya sırasız (standart) | Sıralı yalnızca FIFO konularda; standart konularda sıra garantisi yok |
| Mesaj Süresi | Varsayılan 4 gün, maksimum 14 gün | Anında dağıtım; mesaj kalıcı değildir (abone alamazsa kaybolur) |
| Tüketici Sayısı | Tek tüketici (bir mesaj bir kez işlenir) | Çok sayıda abone (fan-out) |
| Kullanım Senaryosu | Görev kuyrukları, iş yükü dengeleme, decoupling | Olay bildirimi, uyarılar, çoklu sistemlere dağıtım |
Ne Zaman SQS Kullanmalısınız?
SQS, bir mesajın yalnızca bir tüketici tarafından işlenmesi gerektiği durumlar için idealdir. Örneğin, bir web uygulamasına gelen siparişleri işlemek için bir kuyruk oluşturup, birden fazla işçi (worker) instance’ının bu kuyruktan mesaj tüketmesini sağlayabilirsiniz. Bu sayede yük dengeleme ve hata toleransı elde edilir. SQS, ayrıca AWS Lambda Cold Start sorununu hafifletmek için Lambda ile birlikte kullanılabilir: Lambda fonksiyonları SQS’den mesajları batch halinde alarak çalışma süresini optimize eder. Eğer işlem sırası önemliyse, FIFO (First-In-First-Out) kuyruklarını tercih edebilirsiniz.
Ne Zaman SNS Kullanmalısınız?
SNS, aynı olayın birden fazla sisteme bildirilmesi gerektiğinde kullanılır. Örneğin, bir dosyanın S3’e yüklendiğini hem bir veritabanı işlemini tetiklemek hem de bir e-posta bildirimi göndermek için SNS konusu kullanabilirsiniz. SNS, fan-out mimarisi için mükemmeldir: bir mesajı yüzlerce SQS kuyruğuna, Lambda fonksiyonuna ve HTTP endpoint’ine aynı anda dağıtabilir. Ayrıca mobil push bildirimleri, SMS ve e-posta göndermek için de yaygın olarak kullanılır.
Sık Yapılan Hatalar ve Dikkat Edilmesi Gerekenler
- Mesaj kaybı: SNS standart konularında mesaj kalıcı değildir. Abone alamazsa mesaj kaybolur. Kritik veriler için SQS aboneliği veya ölü mektup kuyruğu (DLQ) kullanmalısınız.
- Yanlış model seçimi: SQS’yi broadcast (yayın) için kullanmaya çalışmak (her abone için ayrı kuyruk oluşturmak) yönetilebilirliği zorlaştırır. Bunun yerine SNS + SQS kombinasyonu daha uygundur.
- FIFO sınırlamaları: FIFO SQS ve SNS konuları yalnızca aynı bölgede çalışır ve saniyede 3000 mesaj veya 3000 batch ile sınırlıdır. Yüksek iş hacmi gerekiyorsa standart kuyruk veya konu tercih edilmelidir.
Pratik Bir Örnek: SNS + SQS Birleşimi
Çoğu gerçek dünya senaryosunda SNS ve SQS birlikte kullanılır. Örneğin, bir e-ticaret sitesinde stok güncellemeleri için bir SNS konusu oluşturup, bu konuya hem envanter servisini (SQS kuyruğu) hem de bildirim servisini (Lambda + e-posta) abone edebilirsiniz. Bu sayede stok düştüğünde hem arka uç işlemleri başlatılır hem de yöneticilere e-posta gönderilir. AWS Fargate vs Amazon ECS karşılaştırmasında da belirtildiği gibi, konteyner tabanlı iş yüklerinde de bu mesajlaşma mimarisi yaygındır.
Hangi Servisi Seçmelisiniz?
Karar vermek için temel soru şudur: Mesajınızın yalnızca bir alıcı tarafından mı işlenmesini istiyorsunuz, yoksa birden fazla alıcıya mı ulaşmasını? İlki için SQS, ikincisi için SNS doğru seçimdir. Eğer her iki duruma da ihtiyacınız varsa, SNS konusuna SQS kuyruklarını abone ederek hibrit bir çözüm kurabilirsiniz. Ayrıca, mesajların kalıcı olması, sıralama gereksinimleri ve iş hacmi gibi faktörleri de göz önünde bulundurmalısınız. Unutmayın: SNS ve SQS birbirini tamamlayan servislerdir; doğru mimaride birlikte kullanıldıklarında çok güçlü hale gelirler.
Sonuç
AWS SQS ve AWS SNS, bulut mimarilerinde gevşek bağlılık sağlamak için iki temel araçtır. SQS, mesajları güvenli bir şekilde kuyruğa alıp işleyen güvenilir bir yapı sunarken; SNS, olayları hızlı ve kolay bir şekilde birden fazla hedefe dağıtır. İkisi arasındaki temel farkı anlamak, uygulamanızın ölçeklenebilirliği ve dayanıklılığı için kritiktir. Doğru seçimi yapmak için iş gereksinimlerinizi netleştirin ve gerektiğinde her iki servisi bir arada kullanmaktan çekinmeyin.
Sık Sorulan Sorular
SQS ve SNS arasındaki temel fark nedir?
SQS noktadan noktaya mesaj kuyruğu modeli kullanır; her mesaj bir tüketici tarafından işlenir. SNS ise pub/sub modeliyle mesajları birden fazla aboneye dağıtır.
SNS'de mesaj kaybı yaşanır mı?
Standart SNS konularında mesajlar kalıcı değildir; abone alamazsa mesaj kaybolur. Kritik veriler için SQS aboneliği veya ölü mektup kuyruğu kullanılmalıdır.
SQS FIFO kuyruğu ile SNS FIFO konusu arasındaki fark nedir?
Her ikisi de sıralı teslimat sağlar, ancak SNS FIFO konusu mesajı tüm abonelere sıralı olarak iletirken, SQS FIFO kuyruğu mesajı bir tüketiciye sıralı olarak iletir.
Hangi durumda SQS ve SNS birlikte kullanılır?
Bir olayın birden fazla sisteme bildirilmesi ve aynı anda işlenmesi gerektiğinde fan-out mimarisi için SNS konusuna SQS kuyrukları abone edilir. Örneğin, bir S3 olayını hem veritabanı işlemi hem de e-posta bildirimi için dağıtmak.






