Yanıtlar:
Yüzeyde belirsiz bir şekilde benzerler, ancak kullanım durumunuz hangi aracın uygun olduğunu belirleyecektir. IMO, eğer SQS ile başa çıkabiliyorsanız - istediğinizi yapacaksa, daha basit ve daha ucuz olacak, ancak burada her iki araç için uygun kullanım durumlarına örnekler veren AWS SSS'den daha iyi bir açıklama var. karar vermenize yardımcı olun:
Bu cevabın Haziran 2015 için doğru olduğunu unutmayın
Sorunu bir süre inceledikten sonra, aynı soruyu akılda tutarak, mesajların sırası sizin için önemli olmadıkça SQS'nin (SNS ile) çoğu kullanım için tercih edildiğini buldum (SQS, mesajlarda FIFO'yu garanti etmiyor).
Kinesis için 2 ana avantaj vardır:
Her iki avantaj da SNS'yi SQS'ye bir fan olarak kullanarak elde edilebilir. Bu, mesajın üreticisinin SNS'ye yalnızca bir mesaj göndereceği anlamına gelir, O zaman SNS hayranları mesajı her tüketici uygulaması için bir tane olmak üzere birden fazla SQS'ye gönderir. Bu şekilde, kırma kapasitesini düşünmeden istediğiniz kadar tüketiciye sahip olabilirsiniz.
Ayrıca, SNS'ye abone olan ve 14 gün boyunca mesaj tutacak bir SQS daha ekledik. Normal durumda hiç kimse bu SQS'den okumaz, ancak verileri geri sarmamızı sağlayan bir hata durumunda, bu SQS'deki tüm mesajları kolayca okuyabilir ve SNS'ye tekrar gönderebiliriz. Kinesis ise sadece 7 günlük saklama sağlar.
Sonuç olarak, SNS + SQS'ler çok daha kolaydır ve çoğu yetenek sağlar. IMO, Kinesis'i seçmek için gerçekten güçlü bir davaya ihtiyacınız var.
split
içinde SNS split the message to multiple SQSs
o parçalar ama birden fazla hedefe kopyalar o iletileri yıkmak olmadığından.
Kinesis, aynı veri kayıtlarının aynı saatte veya farklı saatlerde farklı saatlerde 24 saat içinde işlenebileceği anlamına gelen çoklu tüketici yeteneklerini destekler, SQS'deki benzer davranış birden fazla kuyruğa yazılarak elde edilebilir ve tüketiciler birden fazla kuyruktan okuyabilir. Ancak tekrar birden fazla kuyruğa yazmak sistemde alt saniye {az milisaniye} gecikme süresi katacaktır.
İkincisi, Kinesis belirli EC2 örnekleri tarafından işlenebilen ve mikro yığın hesaplamasını {Sayma ve toplama} etkinleştirebilen bölüm anahtarını kullanarak farklı parçalara seçici yol veri kayıtlarına yönlendirme yeteneği sağlar.
Herhangi bir AWS yazılımı üzerinde çalışmak kolaydır, ancak SQS ile en kolay olanıdır. Kinesis ile, zamanın ötesinde yeterli kırıkları sağlamaya, başak yükünü yönetmek için kırıntıların sayısını dinamik olarak arttırmaya ve yönetmek için gereken maliyeti düşürmek için azalmaya ihtiyaç vardır. Kinesis'te ağrı, SQS ile böyle bir şeye gerek yok. SQS sonsuz ölçeklenebilir.
Bu teknolojilerin semantiği farklıdır çünkü farklı senaryoları desteklemek üzere tasarlanmıştır:
Farkı örnek olarak anlayalım.
Bir öğenin işlenmesi başka bir öğenin işlenmesinden ayrılamazsa, tüm durumları güvenli bir şekilde ele almak için Kinesis semantiğine sahip olmalıyız.
AWS Belgelerinden Alıntı :
Aşağıdakine benzer gereksinimlere sahip kullanım durumları için Amazon Kinesis Akışlarını öneriyoruz:
İlgili kayıtları aynı kayıt işlemcisine yönlendirme (akış MapReduce'da olduğu gibi). Örneğin, belirli bir anahtar için tüm kayıtlar aynı kayıt işlemcisine yönlendirildiğinde sayma ve toplama daha basittir.
Kayıtların sıralanması. Örneğin, günlük verilerinin sırasını korurken günlük verilerini uygulama ana bilgisayarından işleme / arşiv ana bilgisayarına aktarmak istersiniz.
Birden fazla uygulamanın aynı akışı aynı anda tüketebilmesi. Örneğin, gerçek zamanlı bir gösterge tablosunu güncelleyen bir uygulamanız ve Amazon Redshift'e veri arşivleyen bir uygulamanız var. Her iki uygulamanın da aynı akıştaki verileri aynı anda ve bağımsız olarak tüketmesini istiyorsunuz.
Birkaç saat sonra kayıtları aynı sırayla tüketebilme. Örneğin, bir faturalandırma uygulamanız ve faturalandırma uygulamasının birkaç saat gerisinde çalışan bir denetim uygulamanız var. Amazon Kinesis Streams, verileri 7 güne kadar sakladığından, denetim uygulamasını faturalandırma uygulamasının 7 gününe kadar çalıştırabilirsiniz.
Aşağıdakilere benzer gereksinimlere sahip kullanım durumları için Amazon SQS'yi öneririz:
Mesajlaşma semantiği (mesaj düzeyinde ack / başarısız) ve görünürlük zaman aşımı. Örneğin, bir iş öğesi kuyruğunuz var ve her bir öğenin başarıyla tamamlandığını bağımsız olarak izlemek istiyorsunuz. Amazon SQS ack / başarısızlığı izler, böylece uygulamanın kalıcı bir kontrol noktası / imleç tutması gerekmez. Amazon SQS yapılandırılmış bir görünürlük zaman aşımı süresinden sonra saldırıya uğramış iletileri siler ve başarısız iletileri yeniden gönderir.
Bireysel mesaj gecikmesi. Örneğin, bir iş kuyruğunuz var ve bireysel işleri gecikmeli olarak zamanlamanız gerekiyor. Amazon SQS ile bireysel mesajları 15 dakikaya kadar gecikecek şekilde yapılandırabilirsiniz.
Okuma zamanında eşzamanlılık / işlem hacmini dinamik olarak artırın. Örneğin, bir çalışma kuyruğunuz var ve biriktirme listesi temizlenene kadar daha fazla okuyucu eklemek istiyorsunuz. Amazon Kinesis Streams ile, yeterli sayıda kırığı ölçeklendirebilirsiniz (ancak, önceden yeterli kırıkları sağlamanız gerektiğini unutmayın).
Amazon SQS'nin şeffaf bir şekilde ölçeklendirme yeteneğinden yararlanmak. Örneğin, ara sıra yük artışları veya işletmenizin doğal büyümesi nedeniyle talepleri arabelleğe alırsınız ve yük değişir. Arabelleğe alınan her istek bağımsız olarak işlenebileceğinden, Amazon SQS sizden herhangi bir provizyon talimatı olmadan yükü ele almak için şeffaf bir şekilde ölçeklendirilebilir.
Benim için en büyük avantaj, Kinesis'in tekrarlanabilir bir kuyruk olması ve SQS'nin olmaması. Böylece SQS ile, bir mesaj onaylandıktan sonra, bu kuyruktan çıktığı aynı Kinesis mesajlarından (veya farklı zamanlarda aynı tüketiciden) birden fazla tüketiciniz olabilir. SQS bundan dolayı işçi kuyrukları için daha iyidir.
Başka bir şey: Kinesis bir Lambda'yı tetikleyebilirken, SQS yapamaz. Yani SQS ile ya SQS mesajlarını işlemek için bir EC2 örneği sağlamanız (ve başarısız olursa onunla başa çıkmanız) ya da zamanlanmış bir Lambda'ya sahip olmanız gerekir (bu ölçek büyütülmez veya küçülmez - dakikada sadece bir tane alırsınız) .
Düzenle: Bu cevap artık doğru değil. SQS, Haziran 2018 itibariyle Lambda'yı doğrudan tetikleyebilir
Fiyatlandırma modelleri farklıdır, bu nedenle kullanım durumunuza bağlı olarak biri veya diğeri daha ucuz olabilir. En basit durumu kullanarak (SNS hariç):
Mevcut fiyatları takıp ücretsiz katmanı hesaba katmamakla, maksimum mesaj boyutunda günde 1 GB mesaj gönderirseniz, Kinesis'in maliyeti SQS'den (Kinesis için 10,82 $ / ay, SQS için 0,20 $ / ay) . Ancak günde 1 TB gönderirseniz, Kinesis biraz daha ucuzdur (SQS için aylık 158 $ / 201 $).
Ayrıntılar: SQS, milyon istek başına 0,40 $ (her biri 64 KB) tutarındadır, bu nedenle GB başına 0,00655 dolar. Günde 1 GB ile bu ayda 0.20 doların biraz altında; Günde 1 TB, ayda 201 $ biraz fazla geliyor.
Kinesis milyon istek başına 0,014 dolar (her biri 25 KB) ücret alır, bu nedenle GB başına 0.00059 dolar. Günde 1 GB ile, bu ayda 0.02 $ 'dan azdır; Günde 1 TB, ayda yaklaşık 18 $. Bununla birlikte, Kinesis ayrıca kırk saat başına 0,015 dolar ücret alır. Saniyede 1 MB başına en az 1 parçaya ihtiyacınız vardır. Günde 1 GB, 1 parça bol olacak, böylece ayda toplam 10.82 $ maliyet için günde 0.36 $ daha ekleyecektir. Günde 1 TB'de, ayda toplam 158 ABD doları karşılığında günde 4,68 ABD doları ekleyen en az 13 parçaya ihtiyacınız olacak.
Kinesis, veri akışı için tipik bir harita azaltma senaryosunda harita parçası sorununu çözer. SQS bundan emin değilken. Bir anahtarda toplanması gereken akış verileriniz varsa, kinesis, o anahtarın tüm verilerinin belirli bir parçaya gittiğinden ve parça, anahtar üzerindeki toplama işlemini SQS'ye göre daha kolay hale getiren tek bir ana bilgisayarda tüketilebildiğinden emin olur.
Kimsenin bahsetmediği bir şey daha ekleyeceğim - SQS, birkaç büyüklük sırası daha pahalı.
Kinesis Kullanım Durumları
SQS Kullanım Örnekleri