Pulsar
Makine çevirisidir!
Pulsar, bulut tabanlı, dağıtık, açık kaynaklı bir yayın-abone mesajlaşma ve akış platformudur. Yahoo! tarafından geliştirilmiş ve 2016'da Apache Software Foundation (ASF) tarafından desteklenmeye başlanmıştır.
Pulsar, geleneksel bir mesajlaşma sisteminin (RabbitMQ gibi) en iyi özelliklerini, Apache Kafka gibi bir yayın-abone sistemine özgü yeteneklerle birleştirir.
Açık Kaynaklı Pub-Sub Mesajlaşma Sistemi Nedir?
Pub-Sub, yayın-abone anlamına gelir. Pub-Sub'ta mesaj gönderenler veya yayıncılar, mesajları belirli alıcı veya abonelere göndermez. Bunun yerine, mesaj tüketicileri ilgisini çeken konulara veya konulara abone olur. Belirli bir konuyla ilgili bir mesaj yayınlandığında, tüm aboneler hemen alır.
Yayıncılar abonelerin kim olduğunu veya hangi konulara abone olduklarını bilmez, aboneler ise yayıncının bilgisi olmadan ilgili mesajları alır. Bu, bağımsız iletişimi sağlar. Pub-Sub'un asenkron yapısı, gevşek bağlantı ve ölçeklenebilirlik sağlayarak dağıtık uygulamalar, sunucusuz ve mikroservis mimarileri için mükemmel bir seçenek yapar.
Pulsar diğer mesajlaşma sistemleriyle, Apache Kafka dahil, karşılaştırıldığında nasıl bir performans sergiler?
Birçok diğer etkin akış platformunun aksine, Apache Pulsar bulut tabanlıdır, yüksek ölçeklenebilirliğe sahiptir ve çoklu veri merkezi ile aktif-aktif konfigürasyonları destekler.
Pulsar'ın Kafka'ya göre birkaç avantajı vardır:
- Maliyet
- Performans
- Dağıtım Kolaylığı
- Coğrafi Çoğaltma
- Ölçeklenebilirlik
- Mimarisi (Pulsar, katmanlı depolama, bağımsız hesaplama ve depolama, çok kiracılığı içerir)
- Kuyruklama
- MQ tabanlı çözümlerin iletişim semantiği desteği
GigaOm adlı bir pazar araştırma şirketinin analizine göre, Pulsar fiyat ve performans açısından üstün bir performans sergilemektedir. Pulsar'ın avantajlarını vurgulayan rapordan bazı bulgular şunlardır:
- Kafka'ya göre %81 daha düşük maliyet (3 yıl boyunca)
- %35 daha yüksek performans
- Karmaşık senaryolar için %73 tasarruf
- Yüksek veri hacimleri için %81 tasarruf
Apache Pulsar Yapısal Temelleri
Apache Pulsar'ın yapı taşlarına bir göz atalım.
Bulut Tabanlı Mimarisi
Apache Pulsar, broker'ı (hesap makinesi) depolamadan (BookKeeper) ayıran çok katmanlı bir yaklaşım kullanarak bulut altyapılarına uygun bir sistemdir. Broker'lar temelde durumsuzdur ve BookKeeper, Kubernetes gibi konteyner orkestrasyon ortamlarında StatefulSet olarak kolayca yönetilebilir, ki bu da bulut tabanlı orkestrasyon için de facto standarttır.
Aslında, Apache Pulsar Kubernetes üzerinde doğal olarak çalışır ve güncellemeler, geri alımlar ve yatay ölçeklemeyi destekler.
İstemci Kütüphaneleri
Pulsar, çekirdek proje tarafından yönetilen geniş bir istemci kütüphanesi yelpazesi içerir; bunlar arasında Java, Python, C++, Golang, Node.js ve C# bulunmaktadır. Pulsar istemci kütüphanelerini kullanmak istemiyorsanız, Pulsar ayrıca bir WebSockets proxy içerir.
Topluluk tarafından geliştirilen Scala ve Rust gibi birçok başka istemci de bulunmaktadır. Pulsar mesajları gönderip almak için HTTP kullanmak istiyorsanız, Pulsar Beam'ı kullanabilirsiniz.
Çok Kiracılık ve İsim Alanları
Yüksek performanslı, ölçeklenebilir bir mesajlaşma sistemine sahipseniz, bunu organizasyonunuz içinde farklı ekipler ve gruplar arasında paylaşmak isteyeceksiniz. Yüksek performanslı bir sistemi çoğaltmak veya farklı ekiplerin birbirlerini etkilememesi için karmaşık bir paylaşılan altyapı oluşturmak pratik değildir.
Pulsar, başlangıçtan itibaren çok kiracılı bir sistem olarak tasarlanmıştır. Bu nedenle, farklı ekipler mesajlaşma sistemini güvenli bir şekilde paylaşabilir. Her kiracının kendi kimlik doğrulama, yetkilendirme ve politikaları vardır. Ayrıca kiracılar, geliştirme, aşama ve üretim gibi farklı ortamları desteklemeyi kolaylaştıran isim alanlarına ayrılabilir.
Apache Pulsar'ın Özellikleri
Apache Pulsar'ın hızla büyüyen bir özellik seti bulunmaktadır. Bazı temel özelliklerini inceleyelim.
Yerleşik Şema Kaydı
Herhangi bir mesajlaşma sisteminin büyük zorluklarından biri, üreticilerin ve tüketicilerin aynı dilde iletişim kurmasını sağlamaktır. Üreticiler ve tüketiciler ayrıldığı için gönderdikleri veya bekledikleri mesajların formatını değişt
irmek kolaydır.
Çözüm, üreticilerin ve tüketicilerin uyumlu bir şemayla mesajları kullanmalarını gerektiren bir şema kaydıdır. Pulsar, yerleşik bir şema kaydına sahiptir. Şemayı bir Pulsar konusuyla kaydettikten sonra, o şemanın kurallarını zorlar.
Yerleşik Coğrafi Çoğaltma
Mesajları uzak konumlara çoğaltmak, felaket kurtarma veya uygulamaların küresel olarak çalışmasını etkinleştirmek için önemlidir. Uygulamanızın kullanıcıları seyahat ettiğinde, onların nerede olursa olsun aynı deneyime sahip olmalarını istersiniz. Coğrafi çoğaltma ile uygulamalar, yerel bir kümelere bağlanabilir ve hala küresel kümelerle veri gönderebilir ve alabilir.
Pulsar ile coğrafi çoğaltma, yapılandırılmış uzak konumlara bir konuda bir mesaj yayınlarsanız, bu mesaj otomatik olarak yapılandırılmış uzak konum(lar)a kopyalanır. Karmaşık yapılandırmalara veya eklentilere gerek yoktur.
IO Bağlayıcıları
Bir mesajlaşma sisteminin başlıca işlevlerinden biri, veritabanları, akış işleme motorları ve diğer mesajlaşma sistemleri gibi veri yoğun sistemleri birbirine bağlamaktır. Bu işlevi kolaylaştırmak için ortak bir çerçeve ve bağlayıcılar sağlamak mantıklıdır. İşte Pulsar'ın bu işlevi yerine getirmek için yaptığı şey budur.
Pulsar, MySQL, MongoDB, Cassandra, RabbitMQ, Kafka, Flume, Redis gibi bir dizi hazır bağlayıcı ile birlikte gelir, böylece sistemlerinizi kolayca birbirine bağlayabilirsiniz.
Apache Pulsar'ın Avantajları
Apache Pulsar birkaç avantaj sunar.
Sonsuz Saklama
Pulsar'ın katmanlı mimarisinin önemli avantajlarından biri, yeni katmanlar ekleyebilme yeteneğidir. Yüksek performans için herhangi bir dayanıklı mesajlaşma sistemi, mesajların en sonunda (hemen tüketilmezse) diske yazılması ve diske yazılmasını gerektirebilir. Ancak eski mesajları tekrar oynatma veya etkinlik kaynağında depolamak istiyorsanız ne yapmalısınız? Bu mesajları saklamak pahalı olabilir.
Bu sorunu çözmek için Pulsar, eski mesajların S3 kovaları gibi daha ucuz depolama seçeneklerine indirilmesine izin veren katmanlı depolamayı destekler. Bir tüketici eski bir mesajı ihtiyaç duyduğunda, Pulsar bu mesajı otomatik olarak yapılandırılmış uzak depodan alır ve tüketicisine ulaştırır.
Evet, performans daha düşük olacaktır. Ancak aylarca veya hatta yıllarca eski mesajlarla uğraşıyorsanız, performans kritik değildir. Sadece bu mesajların ihtiyaç duyulduğunda hemen kullanıma hazır olmasını istersiniz ve bütçeyi aşmadan.
Bu, Apache BookKeeper'ı kullanarak elde edilir.
Esnek Abonelikler
Apache Pulsar, dört farklı abonelik türünü destekler: özel, devrilme, paylaşılan ve anahtar paylaşılan. Aynı konuda birden fazla abonelik de desteklenir. Abonelikleri kullanarak kuyruk, yayın-abone, fan-out ve rekabetçi tüketiciler gibi mesajlaşma desenlerini kolayca yapılandırabilirsiniz.
Apache Pulsar, rekabetçi tüketiciler desenini paylaşılan abonelikleri kullanarak uygular. Paylaşılan bir abonelikle, tüketici sayısını sorunsuz bir şekilde artırabilir ve azaltabilirsiniz. Bölümlerle uğraşmak zorunda değilsiniz ve bir tüketici eklemek, hemen mesajları tüketmeye başlamasını sağlar.
Düşük Gecikme, Yüksek Verim
Baştan itibaren Pulsar, yüksek verimle düşük ve tutarlı gecikme sağlamak için tasarlanmıştır. Bu, mesaj teslimatı endişelerini üreticiler ve tüketiciler arasında ayırarak ve mesajları kalıcı depolama için Apache BookKeeper tarafından saklayarak elde edilir. Kendi depolama katmanını inşa etmek yerine, Pulsar, BookKeeper'ın performans ve dayanıklılığından faydalanır.
BookKeeper, büyük veri hacimlerini yazma veya okuma (tüketici yakalama) yükleri altında bile performans düşüşü yaşamadan tutarlı düşük gecikme sağlayabilen bir dağıtılmış günlük sistemidir. Geleneksel depolama sistemlerinin aksine, yüksek yazma veya okuma (tüketici yakalama) yükleri altında performans azalması yaşamaz. BookKeeper, depolama atamalarını yeniden dengeleme ihtiyacı olmadan yatay olarak ölçeklenebilen bir dağıtılmış sistemdir.
Apache Pulsar Kullanım Senaryoları
Apache Pulsar'ın kullanım senaryolarına bir göz atalım.
Pub-Sub, Streaming ve Kuyruk Sistemi
Apache Pulsar, yüksek hacimli pub-sub mesajlaşma işlemleri ile birlikte mesaj kuyruğu sistemlerine özgü daha karmaşık mesajlaşma desenlerini başarıyla işleyebilir. Ve bu karmaşık mesajlaşma desenleri, Pulsar tarafından ele alınır; yazılım geliştiriciye basit bir istemci üzerine kurulu karmaşık bir uygulama kullanma görevi bırakılmaz.
Saklama ve Mesaj Tekrarı
Geleneksel bir mesajlaşma sisteminde sistem, belirli bir mesajın tüketilip tüketilmediğini takip eder. Tüketici istemcisi mesajla işi bittiğinde, mesajın artık gerekli olmadığını mesajlaşma sistemine bildirir. Geleneksel bir mesajlaşma sistemi, mesajı kalıcı depodan siler. Sonuçta, mesaj artık gerekli değildir.
Bu mükemmel bir dünyadaysa bu doğru olabilir. Ancak gerçek dünyada şeyler ters gider, uygulamalar çöker, kullanılabilirlik bölgeleri kapanır ve kaybolan mesajları kurtarabilmek uygulama durumunuzu geri yüklemek için kritik olabilir. İşte bu nedenle mesaj saklamanın önemi ortaya çıkar. Bir şeyler ters giderse, Pulsar, bir konuya gönderilen mesajları, zaten tüketilmiş olsalar bile, tekrar oynatabilir. Sonuçta, o mesajı tekrar ihtiyaç duyabileceğiniz zamanı asla bilemezsiniz.
Mesajların saklanma yeteneği, etkinlik temelli uygulama mimarileri için de önemlidir, çünkü her durum değişikliğini bir olay olarak kaydetmek önemlidir.
Dead Letter Topic, Negatif Onaylama, Gecikmeli Teslimat
Apache Pulsar, güçlü ve esnek uygulamalar oluşturmayı kolaylaştıran çeşitli gelişmiş mesajlaşma özelliklerini destekler. Negatif onaylama ile tüketici istemcisi, bir mesajı daha sonra işlemek üzere bir konuya ekleyebilir veya başka bir tüketici tarafından işlenmesine izin verebilir. Bir tüketici bir mesajı işleyemezse, engellenmek yerine mesajı ölü harf konusuna gönderebilir ve onu saklayarak sorunlu mesajı daha sonra analiz için kaydedebilir.
Mesajları bir gecikme sonrasında göndermek istiyorsanız, Pulsar, bu özelliği kullanarak bunu yapabilir. Bir mesajı yayınladığınızda, mesajların tüketilmesi için yapılandırılabilir bir bekleme süresi belirleyebilirsiniz.
Entegre Akış Fonksiyonları
Topladığımız verilerden gerçek zamanlı analitik sonuçları elde etmek istiyoruz. Verileri işlemek için tüm veriyi bir veri havuzuna atıp daha sonra işlemek yeterli kabul edildiğinde, o günler artık geride kaldı. Bugün, analitik sonuçlarımızı gerçek zamanlı olarak istiyoruz, böylece gerçek zamanlı olarak tepki verebiliriz.
Gerçek zamanlı analitik elde etmek için veriler gerçek zamanlı olarak işlenmelidir. Pulsar ile, akışa hafif fonksiyonları sorunsuz bir şekilde entegre ederek veri temizleme, zenginleştirme ve analizini gerçek zamanlı olarak gerçekleştirebilirsiniz. Her şeyi bir veri havuzuna atmaya ve daha sonra işlemeye gerek yoktur. Pulsar Functions sayesinde, veri akışı üzerinde işlem yapabilirsiniz. Pulsar Functions, Java, Python veya Go'da yazılabilir ve Kubernetes pod'ları olarak çalışacak şekilde yapılandırılabilir.
Apache Pulsar ile Pub Mesajlaşma için En İyi Uygulamalar
Apache Pulsar'dan en iyi şekilde faydalanmak için, aşağıdaki en iyi uygulamaları takip etmenizi öneririz:
Pulsar'a çok miktarda veri depoluyorsanız, bu veriler üzerinde sorgular çalıştırmak ve bunu Pulsar'ın mesaj gönderme ve alma işlemini gerçekleştirdiği esnada yapmak oldukça faydalı olabilir. Pulsar, SQL sorgu motoru Presto'yu kullanarak bunu mümkün kılar. Pulsar, Presto ile entegre olduğundan, konularda depolanan veriler üzerinde SQL sorguları gerçekleştirebilirsiniz. Verileri tiered depolamaya aktarsanız bile sorgu yapabilirsiniz. Ve sorgular broker'ı atlar, bu nedenle Pulsar kümesinin gerçek zamanlı olarak mesaj gönderme ve alma yeteneğini etkilemez.
Apache Pulsar, bölümlenmiş ve bölümsüz konuları da destekler. Daha düşük performanslı kullanım durumları için basitleştirmek için bölümsüz bir konu kullanabilirsiniz. Ancak, yüksek veri hacmini tek bir konuda işlemek zorunda olduğunuz yüksek performanslı bir durumunuz varsa, işleme paralelizminden yararlanmak için bölümlü bir konu kullanabilirsiniz. Performans gereksinimleri arttıkça, sorunsuz bir şekilde bölümler ekleyebilirsiniz.
Kafka gibi Pulsar da, mesajlarınız
ı anahtarlarla gönderirseniz mesaj düzenini garanti edebilir. Aynı anahtara sahip mesajları aynı bölüme atayarak, Pulsar, o anahtara gönderilen mesajların gönderildiği sırayı garanti eder.
Kalıcı mesajlar, diske depolama için Apache BookKeeper'a gönderilir. Bu mesajlar, ağ, uygulama veya hatta Pulsar'ın hatası olsun, en az bir kez teslim edilmesi garanti edilir.
Ancak bazı durumlarda bu düzeyde garanti teslimat gerekli değildir ve en fazla bir kez teslimat yeterlidir. Bu durumlarda Apache Pulsar, kalıcı olmayan mesajları destekler. Kalıcı olmayan mesajlar, diske kaydedilmez, bu da yüksek throughput ve düşük gecikme sağlar ve kaynak gereksinimlerini azaltır.
Bazı durumlarda, bir verinin yalnızca en son örneği ilgi çekicidir. Tüm tarihli değerlerle ilgilenmiyorsunuz, sadece en son değeri. Bu durumdaysa, bir konuda belirli bir anahtarın en son değerini saklamak için birleştirilmiş bir konu kullanabilirsiniz.
Tüm veri birleştirilmiş bir konuya yayınlanır. Ancak, Pulsar, belirli bir anahtara ait eski değerleri periyodik olarak siler ve yalnızca en yeni olanı bırakır. Birleştirilmiş konular, konunun sonsuza kadar büyümesini önler ve bir konudaki en son değerlere hızlı erişim sağlar.