Göz atalım: Google Cloud Pub/Sub

ali guvenbas
codeshakeio
Published in
3 min readJun 25, 2021

--

Bu makalede Cloud Pub/Sub(Publish/Subscribe) servisine göz atacağız. Basit bir asenkron mesajlama sistemi tasarlayıp bunu GCP Pub/Sub ile gerçekleyeceğiz. Ayrıca aynı kategorideki diğer servisler ile karşılaştırmasını yapacağız.

Photo by dference on Pixabay

Pub/Sub client ile server bağımlılığını ortadan kaldıran event-driven ve asenkron bir mesajlama servisidir. Pub/Sub ile bu iletimi gerçek zamanlı ve yüksek tutarlılıkla gerçekleyebiliriz.

Terminoloji

  • Message: İletilecek olan datadır
  • Mesajlaşma: Verinin server’da üretilip client’a iletilmesidir.
  • Publisher: Mesajı gönderen her bir servisdir
  • Topic: Publisher’lar tarafından her bir mesaj bir topic’e gönderilir. Mesajların toplanma yeridir.
  • Subscriber: Topic’e subscribe olan servislerdir. Topic’e gelen her bir mesaj subscribe olan servislere iletilir.
  • Subscription: Mesajın bir topic’den subscriber’lara iletimidir.

Pull Subscription: Belirli zaman aralıklarında topic dinlenir. Topic’e bir mesaj gelirse, subscriber mesajı topic’den çeker.

Push Subscription: Bir HTTP endpoint çağırılır.

  • Message Attribute: Publisher’ın message içinde tanımlayabileceği key-value çiftleridir. Bu sayede bir message içinde farklı datalar iletilebilir.
  • Publisher ve subscriber arasında doğrudan bir ilişki olmaz. Bu sayede, Publisher ve subscriber’lar tamamen farklı dillerde ve farklı formlarda olabilirler. Örneğin bir java projesi subscriber olabileği gibi bir terminal komutu da subscriber olabilir.
  • Servis üstündeki yük arttığında(topic sayısı, publisher yada Subscriber sayısı, vb.) yatay ölçeklenebilir. Böylelikle tutarlılık(consistency) korunur, mesaj iletiminde gecikme(latency) yaşanmaz.
  • Pub/Sub kullanarak tek publishing üzerinden çoklu(batch) mesaj gönderilebilir. Pub/Sub, çoklu mesajları son mesaj gelene kadar depolayacaktır. Bu durum gecikme(latency) neden olabilir.
  • Google Ads,Search, Gmail gibi servislerinde saniyede 500 milyon data gönderebiliyor.
  • Spotify, event-delivery servislerinde Pub/Sub kullanıyor.

Bir Mesajın Serüveni

1-Mesaj publisher tarafından gönderilir

2-Mesaj depolanır

3-Pub/Sub, publisher’a mesajı aldığına ve ilettiğine dair geri bildirim yapar.

4-Mesaj subscriber’lara iletilir

5-Subscriber, Pub/Sub’a mesajı aldığına ve ilettiğine dair geri bildirim yapar.

6-Pub/Sub tüm subscriber’lardan geri bildirim aldıktan sonra mesajı siler.

Demo

Hastaneler publisher olarak enfekte olan corona virüs vaka sayılarını topic’e(corona-world) iletecekler. Sağlık bakanlığı subscriber olarak, bu değerleri alıp, değerlendirecek.

Publisher olmanın farklı yolları vardır. Demoda üç farklı şekilde topic’e mesaj publish edeceğiz. Topic, kendisine subscriber olan bir servise mesajı push edecek.

  • İlk hastanemiz bir içerisinde bir Pub/Sub mesaj publisher bulunan bir Spring Boot projesi. Bu proje bir Cloud Run servisinde koşuyor. Aşağıdaki taslak koddan içeriği inceleyebilirsiniz
  • İkinci publisher aslında biziz. GCP Pub/Sub konsolunu kullanarak mesaj publish edeceğiz.

1- Pub/Sub konsola git

2- Topic’i seç

3-‘+PUBLISH MESSAGE’ butonuna bas, aşağıdaki sayfa açılacak

4-Mesajı yaz, attribute ekle ve PUBLISH

  • Üçüncü hastanemiz olarak mesaj publish etmek için gcloud command-line kullanacağız.

gcloud command-line kullanmadan önce doğru gcp projesinde olup olmadığınız kontrol etmeniz faydalı olacaktır.

gcloud config list

Geri dönüş değeri olarak publish ettiğimiz mesajın id’sini göreceğiz.

> gcloud pubsub topics publish corona-world 
--message="8"
--attribute="hospital-name=hospital-3"
< messageIds:
- '2480461055854536'
  • Şimdi de subscriber tarafına bakalım. Push subscribtion, topic’e belirtilen bir POST endpoint’ini çağırır. Yani aslında topic kendisine bir mesaj iletildiğinde push subscriber’ların POST endpointlerine request atacak. Şu şekilde push subscriber tanımlayabiliriz.

Subscriber bir Spring Boot projesi ve ilk hastane gibi Cloud Run’da koşuyor. Aşağıdaki taslak koddan içeriği inceleyebilirsiniz

Tüm mesajlar geldikten sonra subscriber loglarına bir göz atalım.

Pub/Sub Lite

Pub/Sub Lite, Pub/Sub servisinin yalın halidir diyebiliriz. Bu sayede kullanım maaliyetlerini düşürebilir. İki servis arasında birçok farklılık var ama aşağıdaki temel kullanım farkları göz önüne alınarak tercih yapılabilir.

--

--

ali guvenbas
codeshakeio

java and angular developer, google cloud, reader, traveller