Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PHP ve NATS ile
 Mikroservis Mesajlaşma Sistemi

144 views

Published on

NATS ile mikroservis iletişim kanalının nasıl oluşturulabileceğini ve bu kanala PHP ile nasıl bağlanılarak mesaj alınıp, gönderilebileceğiniz anlatıldığı sunum.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

PHP ve NATS ile
 Mikroservis Mesajlaşma Sistemi

  1. 1. 1 PHP ve NATS ile Mikroservis Mesajlaşma Sistemi Erhan Yakut / @yakuter Netsparker İstanbul PHPKonf / 4 Mayıs 2019
  2. 2. 2 Sunum Hakkında Neler konuşacağız? • Biyografi • İletişim Kavramı • Mikroservis Mimarisi ve İletişim Kanalı • NATS’ın Genel Özellikleri • Demo • Kapanış
  3. 3. 3 Programlama Dilleri Aktif olarak Go ile geliştirme yapmakla birlikte uzun yıllar PHP backend developer olarak proje geliştirdim. İletişim Bilgisi Eposta : erhan.yakut@icsdefense.net Twitter: @yakuter Web : https://www.yakuter.com İş / Görev Ankara’da bulunan ve EKS güvenliği konusunda ürün geliştiren ICS Defense firmasında yazılım takım lideriyim. Tecrübe/Bilgi Yaklaşık 10+ yıldır yazılım geliştirme ile ilgilenmekte olup, şu anda network ve paket analizi ile anomali tespiti üzerine çalışmaktayım. Erhan YAKUT (yakuter) Biyografi Ben Kimim?
  4. 4. 4
  5. 5. 5 İletişimsiz Olmaz! İstemciler konuşa konuşa… Kaynak Mesaj Kanal Alıcı Geri Besleme İletişim, bilginin simgeler kullanılarak iletilmesidir!
  6. 6. 6 Özetle Mikroservis Nedir bu herkesin bahsettiği mikroservis konusu?
  7. 7. 7 Mikroservis İletişim Kanalı Kanalsız iletişim, yıldızsız gökyüzü gibidir
  8. 8. 8 NATS Nedir? NATS’a giriş NATS, bulut uyumlu (cloud native) uygulamalar için geliştirilmiş açık kaynak, basit, güvenli ve yüksek performanslı mesajlaşma sistemidir. NATS hakkında bilgiler: Derek Collison tarafından CloudFoundry (Google, Microsoft, Cisco…) için 2010 yılında geliştirilmiştir. Önceleri Ruby, 2012’den itibaren Go ile yazılmıştır. Production’da 8 yıldır kullanılmaktadır. 15 Mart 2018’de Cloud Native Computing Foundation (CNCF) (Kubernetes, Prometheus, Envoy, gRPC… ) tarafından kuluçka proje olarak kabul edilmiştir. Halen Synadia isimli açık kaynak ekosistemi tarafından geliştirilmektedir. Apcera, Baidu, Siemens, VMware, HTC, Samsung, General Electric (GE)… Önemli bağlantılar: NATS resmi web sitesi https://nats.io Github Organizasyon sayfası: https//github.com/nats-io Anahtar Kelimeler NATS Cloud Native CNCF Derek Collison CloudFoundry Ruby Go Microservice Messaging Event Bus Message Broker Synadia
  9. 9. NATS Bileşenleri NATS temel olarak iki bileşenden oluşmaktadır, Server ve Client. NATS Server: Go programlama dili ile yazılmış bir sunucu olup, fiziksel sunucuya yük bindirmeyen (lightweight) yapısı ile iletişim kanalının temelini oluşturur. NATS Client: NATS Server’a bağlanarak veri gönder ve alma işlemini yapan birimlerdir. NATS’ın hemen hemen bütün programlama dilleri için yazılmış istemci (client) kütüphaneleri bulunmaktadır. Go, Node, Ruby, Java, C, C# ve NGINX C kütüphaneleri bizzat NATS takımı tarafından geliştirilmektedir. Anahtar Kelimeler NATS Server NATS Streaming NATS Client 9
  10. 10. NATS Server Çeşitleri 2 çeşit NATS Server vardır. NATS Server / gnatsd https://github.com/nats-io/gnatsd NATS Streaming / nats-streaming-server https://github.com/nats-io/nats-streaming-server Anahtar Kelimeler NATS Server NATS Streaming 10
  11. 11. 11 NATS İstemci (Client) Kütüphaneleri Anahtar Kelimeler NATS Server NATS Streaming NATS Client NATS Server NATS Tarafından Desteklenen C/C#/Elixir/Go/Java/NGINX/Node.js/Pure Ruby/Python Asyncio/Python Tornado/Ruby/TypeScript Topluluk Tarafından Desteklenen .NET/Arduino/Clojure/Elixir/Elm/Erlang/Haskell/Java Android/Lua/MicroPython/PHP/Perl/Python/Python Twisted/Qt5 C++/Rust/Scala/Spring API/Swift NATS Streaming NATS Tarafından Desteklenen C/C#/Go/Java/Node.js/Python Asyncio/Ruby Topluluk Tarafından Desteklenen Arduino/Asyncio/PHP/Perl
  12. 12. 12 NATS Özellikleri Anahtar Kelimeler NATS Benchmark Brokered Throughput Brokerless Throughput ActiveMQ Kafka Kestrel ruby-nats NSQ RabbitMQ Redis NATS Hızlıdır! NATS gerçekten hızlıdır ve bu diğer rakiplerine istinaden basit bir hız farkı değildir!
  13. 13. 13 NATS Canlandırma
  14. 14. 14 NATS Özellikleri Anahtar Kelimeler Pub/Sub Publisher/Subscriber Request/Reply Queueing NATS Pub/Sub Çalışır NATS hakkında ilk bilinmesi gereken şey Publisher/Subscriber metoduna göre çalıştığıdır. Bu yöntemde kanala bir mesaja gönderen, bir de bu kanala abone olup mesaj bekleyen istemciler bulunur. Ayrıca Request/Reply ve Queueing destekler. Publisher/Subscriber Request/Reply Queueing
  15. 15. 15 NATS Özellikleri Anahtar Kelimeler Pub/Sub Publisher/Subscriber Subject Pub/Sub Mantığı Pub/Sub gönderim metodunda ortak nokta olarak bir konu (subject) oluşturulur. Aboneler (sub) bu konuya abone olurlar. Yayıncılar (pub) aynı konuya mesaj gönderdiği anda konuya abone olan tüm istemcilere mesaj iletilir. KONUPublisher Mesaj Subscriber Subscriber Subscriber Mesaj
  16. 16. 16 NATS Özellikleri Anahtar Kelimeler Plain text protocol Message broker Event bus CONNECT, PUB, SUB, UNSUB INFO, MSG, -ERR, +OK PING, PONG NATS Basittir! NATS, toplamda 10 basit komutu olan metin (text) tabanlı bir iletişim kanalıdır. Client -> Server : CONNECT | PUB | SUB | UNSUB Client <- Server : INFO | MSG | -ERR | +OK Client <->Server : PING | PONG ➜ ~ telnet 0.0.0.0 4222 Trying 0.0.0.0... Connected to 0.0.0.0. INFO {"server_id":"gBUO4mdK197nIvQAV92Ndc","version":"1.4.1", "proto":1,"go":"go1.12.4","host":"0.0.0.0","port":4222, “max_payload":1048576,"client_id":11} PING PONG sub konu 10 +OK MSG konu 10 5 hello ➜ ~ telnet 0.0.0.0 4222 Trying 0.0.0.0... Connected to 0.0.0.0. INFO {"server_id":"gBUO4mdK197nIvQAV92Ndc","version":"1.4.1", "proto":1,"go":"go1.12.4","host":"0.0.0.0","port":4222, “max_payload":1048576,"client_id":12} pub konu 5 hello +OK -ERR 'Stale Connection' Connection closed by foreign host.
  17. 17. 17 NATS Özellikleri Anahtar Kelimeler Provide dial tone Auto-pruning Fire and forget NATS Esnek ve Dayanıklıdır! - NATS, her zaman mesaj iletmeye müsaittir (çevir sesi - dial tone sağlar) - Yavaş mesaj tüketenleri sistemden çıkarma (disconnect) yeteneği vardır. (Auto-pruning) - Mesajın bozulmadan karşı tarafa iletilmesini garanti eder. - Fire and forget (unut gitsin :) ) mesaj gönderimi yapar.
  18. 18. 18 NATS Özellikleri Anahtar Kelimeler Clustered High availability NATS Kümelendirilebilir! - NATS, kümelenmiş (clustered) şekilde yüksek kullanılabilir (high availability) yapıda çalışabilir. NAT S İSTEMCİ (Client) İSTEMCİ (Client) İSTEMCİ (Client) İSTEMCİ (Client) NAT S NAT S
  19. 19. 19 NATS Özellikleri Anahtar Kelimeler Clustered High availability NATS Kümelendirilebilir! - NATS, kümelenmiş (clustered) şekilde yüksek kullanılabilir (high availability) yapıda çalışabilir. NAT S İSTEMCİ (Client) İSTEMCİ (Client) İSTEMCİ (Client) İSTEMCİ (Client) NAT S NAT S
  20. 20. 20 NATS Özellikleri Anahtar Kelimeler Clustered High availability Çoklu Servis Kalitesi (Multi QoS) - QoS, ağdaki paket kaybı (packet loss), gecikme (latency) ve bozulma/kayma (jitter) gibi kusurları azaltmak için kullanılan teknolojileri ifade eder. - NATS üzerinde servis kalitesini artırmak için iki ulaştırma (delivery) şekli desteklenir. At-most-once delivery: NATS Server’ın uyguladığı bu yöntemde mesaj ulaştırılması için zorlama yoktur. Yani mesaj gönderildiğinde istemci (client) bağlı değilse mesajı alamaz. At-least-once delivery: NATS Streaming’in uyguladığı bu yöntemde aşağıdaki şartlar sağlanana kadar mesaj sunucu muhafaza edilir ve istemcilere iletilmeye çalışılır. - Bir abone mesajı aldığını onaylar - Mesajın süresi (timeout) dolar - Bellek (storage) yorulur
  21. 21. 21 NATS Özellikleri Anahtar Kelimeler NATS Monitoring nats-top natsboard nats-mon Kanal İzleme (Monitoring) (gnatsd -m 8222) NATS Server, kanaldaki bağlantıların, gönderilen ve alınan mesaj durumu vb. konuların takip edilebilmesi için izleme (monitoring) desteği sunmaktadır. En meşhur izleme araçları: nats-top - Wally Quevedo (Synadia) - https://github.com/nats-io/nats-top natsboard - Fatih Cetinkaya - https://github.com/cmfatih/natsboard nats-mon - Raül Pérez ve Adrià Cidre - https://github.com/repejota/nats-mon
  22. 22. 22 NATS ve PHP Anahtar Kelimeler NATS PHP ClientNATS ile iletişim kanalı oluşturduğumuz mikroservislerimizde gönül rahatlığı ile PHP kullanabiliriz çünkü hazır PHP istemci kütüphaneleri sayesinde rahatlıkla mesaj alınıp gönderilebilmektedir.
  23. 23. 23 DEMO
  24. 24. 24 İlave Yöntemler NATS size sadece hızlı bir iletim kanalı sağlar. Ancak büyük miktarda trafiği yönetmek için mesajı encode etmeyi veya sıkıştırmayı da düşünebilirsiniz. Encode Yöntemleri • Protocol Buffers * • Thrift • Avro (Apache) • JSON * • UJSON • CBOR • BSON • MessagePack * • Marshal • Pickle Sıkıştırma Yöntemleri • Snappy • Zlib • Bzip2 İletişim Yöntemleri • gRPC * • Rest • Soap Kernel By-Pass Teknikleri • DPDK (~10x Performans) • VPP • F-Stack (FreeBSD IP Stack)
  25. 25. 25 Teşekkürler

×