SlideShare une entreprise Scribd logo
1  sur  25
1
PHP ve NATS ile
Mikroservis Mesajlaşma Sistemi
Erhan Yakut / @yakuter
Netsparker İstanbul PHPKonf / 4 Mayıs 2019
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
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
5
İletişimsiz Olmaz!
İstemciler konuşa konuşa…
Kaynak
Mesaj
Kanal
Alıcı
Geri Besleme
İletişim, bilginin simgeler kullanılarak iletilmesidir!
6
Özetle Mikroservis
Nedir bu herkesin bahsettiği mikroservis konusu?
7
Mikroservis İletişim Kanalı
Kanalsız iletişim, yıldızsız gökyüzü gibidir
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
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
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
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
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
NATS Canlandırma
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
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
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
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
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
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
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
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
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
DEMO
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
Teşekkürler

Contenu connexe

Tendances

Presentation f5 – beyond load balancer
Presentation   f5 – beyond load balancerPresentation   f5 – beyond load balancer
Presentation f5 – beyond load balancer
xKinAnx
 
Managing 2000 Node Cluster with Ambari
Managing 2000 Node Cluster with AmbariManaging 2000 Node Cluster with Ambari
Managing 2000 Node Cluster with Ambari
DataWorks Summit
 
Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...
Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...
Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...
confluent
 

Tendances (20)

Presentation f5 – beyond load balancer
Presentation   f5 – beyond load balancerPresentation   f5 – beyond load balancer
Presentation f5 – beyond load balancer
 
Building an Event Streaming Architecture with Apache Pulsar
Building an Event Streaming Architecture with Apache PulsarBuilding an Event Streaming Architecture with Apache Pulsar
Building an Event Streaming Architecture with Apache Pulsar
 
From Zero to Hero with Kafka Connect
From Zero to Hero with Kafka ConnectFrom Zero to Hero with Kafka Connect
From Zero to Hero with Kafka Connect
 
Clash of Titans in SDN: OpenDaylight vs ONOS - Elisa Rojas
Clash of Titans in SDN: OpenDaylight vs ONOS - Elisa RojasClash of Titans in SDN: OpenDaylight vs ONOS - Elisa Rojas
Clash of Titans in SDN: OpenDaylight vs ONOS - Elisa Rojas
 
Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Kafka Tutorial - Introduction to Apache Kafka (Part 1)Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Kafka Tutorial - Introduction to Apache Kafka (Part 1)
 
Distributed stream processing with Apache Kafka
Distributed stream processing with Apache KafkaDistributed stream processing with Apache Kafka
Distributed stream processing with Apache Kafka
 
Kafka presentation
Kafka presentationKafka presentation
Kafka presentation
 
Introduction To RabbitMQ
Introduction To RabbitMQIntroduction To RabbitMQ
Introduction To RabbitMQ
 
Apache NiFi: A Drag and Drop Approach
Apache NiFi: A Drag and Drop ApproachApache NiFi: A Drag and Drop Approach
Apache NiFi: A Drag and Drop Approach
 
Building an Asynchronous Application Framework with Python and Pulsar - Pulsa...
Building an Asynchronous Application Framework with Python and Pulsar - Pulsa...Building an Asynchronous Application Framework with Python and Pulsar - Pulsa...
Building an Asynchronous Application Framework with Python and Pulsar - Pulsa...
 
A Hitchhiker's Guide to Apache Kafka Geo-Replication with Sanjana Kaundinya ...
 A Hitchhiker's Guide to Apache Kafka Geo-Replication with Sanjana Kaundinya ... A Hitchhiker's Guide to Apache Kafka Geo-Replication with Sanjana Kaundinya ...
A Hitchhiker's Guide to Apache Kafka Geo-Replication with Sanjana Kaundinya ...
 
Managing 2000 Node Cluster with Ambari
Managing 2000 Node Cluster with AmbariManaging 2000 Node Cluster with Ambari
Managing 2000 Node Cluster with Ambari
 
Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...
Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...
Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...
 
Apache Kafka
Apache Kafka Apache Kafka
Apache Kafka
 
Introduction to apache kafka
Introduction to apache kafkaIntroduction to apache kafka
Introduction to apache kafka
 
Logs/Metrics Gathering With OpenShift EFK Stack
Logs/Metrics Gathering With OpenShift EFK StackLogs/Metrics Gathering With OpenShift EFK Stack
Logs/Metrics Gathering With OpenShift EFK Stack
 
Deploying Kafka Streams Applications with Docker and Kubernetes
Deploying Kafka Streams Applications with Docker and KubernetesDeploying Kafka Streams Applications with Docker and Kubernetes
Deploying Kafka Streams Applications with Docker and Kubernetes
 
Cloud Pub_Sub
Cloud Pub_SubCloud Pub_Sub
Cloud Pub_Sub
 
Big ip f5 ltm load balancing methods
Big ip f5 ltm load balancing methodsBig ip f5 ltm load balancing methods
Big ip f5 ltm load balancing methods
 
SOAP To REST API Proxy
SOAP To REST API ProxySOAP To REST API Proxy
SOAP To REST API Proxy
 

Similaire à PHP ve NATS ile
 Mikroservis Mesajlaşma Sistemi

Ozgur Yazilimlar ile VoIP Guvenlik Denetimi
Ozgur Yazilimlar ile VoIP Guvenlik DenetimiOzgur Yazilimlar ile VoIP Guvenlik Denetimi
Ozgur Yazilimlar ile VoIP Guvenlik Denetimi
Fatih Ozavci
 
NETSCALER SSLLABS A Plus
NETSCALER SSLLABS A PlusNETSCALER SSLLABS A Plus
NETSCALER SSLLABS A Plus
Veli Anlama
 
windows server 2008 r2 hyper-v fail over cluster
windows server 2008 r2 hyper-v fail over clusterwindows server 2008 r2 hyper-v fail over cluster
windows server 2008 r2 hyper-v fail over cluster
ÇözümPARK
 
baskıyagiden-IP-MPLSaglaruzerindesanalyerelservisler-reviewdan-sonra
baskıyagiden-IP-MPLSaglaruzerindesanalyerelservisler-reviewdan-sonrabaskıyagiden-IP-MPLSaglaruzerindesanalyerelservisler-reviewdan-sonra
baskıyagiden-IP-MPLSaglaruzerindesanalyerelservisler-reviewdan-sonra
Fatih Erdem
 

Similaire à PHP ve NATS ile
 Mikroservis Mesajlaşma Sistemi (20)

Windows Clusters
Windows ClustersWindows Clusters
Windows Clusters
 
Blockchain : Decentralized Application Development (Turkish)
Blockchain : Decentralized Application Development (Turkish)Blockchain : Decentralized Application Development (Turkish)
Blockchain : Decentralized Application Development (Turkish)
 
Network101 murat arslan
Network101 murat arslanNetwork101 murat arslan
Network101 murat arslan
 
[OWASP-TR Uygulama Güvenliği Günü 2016] Özkan Boztaş - SSL Protokolüne Karşı ...
[OWASP-TR Uygulama Güvenliği Günü 2016] Özkan Boztaş - SSL Protokolüne Karşı ...[OWASP-TR Uygulama Güvenliği Günü 2016] Özkan Boztaş - SSL Protokolüne Karşı ...
[OWASP-TR Uygulama Güvenliği Günü 2016] Özkan Boztaş - SSL Protokolüne Karşı ...
 
pfSense 2.0 Eğitim Sunumu
pfSense 2.0 Eğitim SunumupfSense 2.0 Eğitim Sunumu
pfSense 2.0 Eğitim Sunumu
 
Netty Tanıtımı
Netty TanıtımıNetty Tanıtımı
Netty Tanıtımı
 
Ozgur Yazilimlar ile VoIP Guvenlik Denetimi
Ozgur Yazilimlar ile VoIP Guvenlik DenetimiOzgur Yazilimlar ile VoIP Guvenlik Denetimi
Ozgur Yazilimlar ile VoIP Guvenlik Denetimi
 
Apache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - Türkçe
Apache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - TürkçeApache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - Türkçe
Apache Kafka - Yüksek Performanslı Dağıtık Mesajlaşma Sistemi - Türkçe
 
2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği
2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği
2010 Kocaeli Linux Günleri - Linux Web Geliştiriciliği
 
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim NotlarımWeb Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
 
2010 Kocaeli Linux Günleri - Linux Güvenlik UygulamalarıLinux
2010 Kocaeli Linux Günleri - Linux Güvenlik UygulamalarıLinux 2010 Kocaeli Linux Günleri - Linux Güvenlik UygulamalarıLinux
2010 Kocaeli Linux Günleri - Linux Güvenlik UygulamalarıLinux
 
NETSCALER SSLLABS A Plus
NETSCALER SSLLABS A PlusNETSCALER SSLLABS A Plus
NETSCALER SSLLABS A Plus
 
windows server 2008 r2 hyper-v fail over cluster
windows server 2008 r2 hyper-v fail over clusterwindows server 2008 r2 hyper-v fail over cluster
windows server 2008 r2 hyper-v fail over cluster
 
AğAğ
 
baskıyagiden-IP-MPLSaglaruzerindesanalyerelservisler-reviewdan-sonra
baskıyagiden-IP-MPLSaglaruzerindesanalyerelservisler-reviewdan-sonrabaskıyagiden-IP-MPLSaglaruzerindesanalyerelservisler-reviewdan-sonra
baskıyagiden-IP-MPLSaglaruzerindesanalyerelservisler-reviewdan-sonra
 
Forti̇gate ayarlari
Forti̇gate ayarlariForti̇gate ayarlari
Forti̇gate ayarlari
 
OpenStack Türkiye 14. Meetup Ankara: Yeni Başlayanlar için OpenStack
OpenStack Türkiye 14. Meetup Ankara: Yeni Başlayanlar için OpenStackOpenStack Türkiye 14. Meetup Ankara: Yeni Başlayanlar için OpenStack
OpenStack Türkiye 14. Meetup Ankara: Yeni Başlayanlar için OpenStack
 
TCP/IP Ağlarda İleri Seviye Paket Analizi – Tshark
TCP/IP Ağlarda İleri Seviye Paket Analizi – TsharkTCP/IP Ağlarda İleri Seviye Paket Analizi – Tshark
TCP/IP Ağlarda İleri Seviye Paket Analizi – Tshark
 
sunu (Asp.net -1)
sunu (Asp.net -1)sunu (Asp.net -1)
sunu (Asp.net -1)
 
Eticaret akademi Yazılım ve IT süreçleri
Eticaret akademi Yazılım ve IT süreçleriEticaret akademi Yazılım ve IT süreçleri
Eticaret akademi Yazılım ve IT süreçleri
 

PHP ve NATS ile
 Mikroservis Mesajlaşma Sistemi

  • 1. 1 PHP ve NATS ile Mikroservis Mesajlaşma Sistemi Erhan Yakut / @yakuter Netsparker İstanbul PHPKonf / 4 Mayıs 2019
  • 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 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
  • 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 Özetle Mikroservis Nedir bu herkesin bahsettiği mikroservis konusu?
  • 7. 7 Mikroservis İletişim Kanalı Kanalsız iletişim, yıldızsız gökyüzü gibidir
  • 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. 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. 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 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 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!
  • 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 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 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 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 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 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 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 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 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.
  • 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)