SlideShare uma empresa Scribd logo
1 de 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

Mais conteúdo relacionado

Mais procurados

Microservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaMicroservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaAraf Karsh Hamid
 
Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018Araf Karsh Hamid
 
Microservices architecture
Microservices architectureMicroservices architecture
Microservices architectureAbdelghani Azri
 
Microservices Tutorial for Beginners | Microservices Architecture | Microserv...
Microservices Tutorial for Beginners | Microservices Architecture | Microserv...Microservices Tutorial for Beginners | Microservices Architecture | Microserv...
Microservices Tutorial for Beginners | Microservices Architecture | Microserv...Edureka!
 
Microservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, KanbanMicroservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, KanbanAraf Karsh Hamid
 
Introduction To Microservices
Introduction To MicroservicesIntroduction To Microservices
Introduction To MicroservicesLalit Kale
 
Design patterns for microservice architecture
Design patterns for microservice architectureDesign patterns for microservice architecture
Design patterns for microservice architectureThe Software House
 
CQRS + Event Sourcing
CQRS + Event SourcingCQRS + Event Sourcing
CQRS + Event SourcingMike Bild
 
Microservice architecture design principles
Microservice architecture design principlesMicroservice architecture design principles
Microservice architecture design principlesSanjoy Kumar Roy
 
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023Steve Pember
 
Saturn 2018: Managing data consistency in a microservice architecture using S...
Saturn 2018: Managing data consistency in a microservice architecture using S...Saturn 2018: Managing data consistency in a microservice architecture using S...
Saturn 2018: Managing data consistency in a microservice architecture using S...Chris Richardson
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecturetyrantbrian
 
DevOps feedback loops
DevOps feedback loopsDevOps feedback loops
DevOps feedback loopsPaul Peissner
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Tom Kocjan
 
Microservices Workshop All Topics Deck 2016
Microservices Workshop All Topics Deck 2016Microservices Workshop All Topics Deck 2016
Microservices Workshop All Topics Deck 2016Adrian Cockcroft
 
Kubernetes in Docker
Kubernetes in DockerKubernetes in Docker
Kubernetes in DockerDocker, Inc.
 

Mais procurados (20)

Microservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaMicroservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and Saga
 
Domain Driven Design
Domain Driven Design Domain Driven Design
Domain Driven Design
 
Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018
 
Microservices architecture
Microservices architectureMicroservices architecture
Microservices architecture
 
Microservices Tutorial for Beginners | Microservices Architecture | Microserv...
Microservices Tutorial for Beginners | Microservices Architecture | Microserv...Microservices Tutorial for Beginners | Microservices Architecture | Microserv...
Microservices Tutorial for Beginners | Microservices Architecture | Microserv...
 
Microservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, KanbanMicroservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, Kanban
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Introduction To Microservices
Introduction To MicroservicesIntroduction To Microservices
Introduction To Microservices
 
Design patterns for microservice architecture
Design patterns for microservice architectureDesign patterns for microservice architecture
Design patterns for microservice architecture
 
CQRS + Event Sourcing
CQRS + Event SourcingCQRS + Event Sourcing
CQRS + Event Sourcing
 
Microservice architecture design principles
Microservice architecture design principlesMicroservice architecture design principles
Microservice architecture design principles
 
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
Anatomy of a Spring Boot App with Clean Architecture - Spring I/O 2023
 
Saturn 2018: Managing data consistency in a microservice architecture using S...
Saturn 2018: Managing data consistency in a microservice architecture using S...Saturn 2018: Managing data consistency in a microservice architecture using S...
Saturn 2018: Managing data consistency in a microservice architecture using S...
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
Docker Kubernetes Istio
Docker Kubernetes IstioDocker Kubernetes Istio
Docker Kubernetes Istio
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
DevOps feedback loops
DevOps feedback loopsDevOps feedback loops
DevOps feedback loops
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Microservices Workshop All Topics Deck 2016
Microservices Workshop All Topics Deck 2016Microservices Workshop All Topics Deck 2016
Microservices Workshop All Topics Deck 2016
 
Kubernetes in Docker
Kubernetes in DockerKubernetes in Docker
Kubernetes in Docker
 

Semelhante a PHP ve NATS ile
 Mikroservis Mesajlaşma Sistemi

Windows Clusters
Windows ClustersWindows Clusters
Windows Clustersoduth
 
Blockchain : Decentralized Application Development (Turkish)
Blockchain : Decentralized Application Development (Turkish)Blockchain : Decentralized Application Development (Turkish)
Blockchain : Decentralized Application Development (Turkish)Cihan Özhan
 
Network101 murat arslan
Network101 murat arslanNetwork101 murat arslan
Network101 murat arslanMURAT 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şı ...OWASP Turkiye
 
Ozgur Yazilimlar ile VoIP Guvenlik Denetimi
Ozgur Yazilimlar ile VoIP Guvenlik DenetimiOzgur Yazilimlar ile VoIP Guvenlik Denetimi
Ozgur Yazilimlar ile VoIP Guvenlik DenetimiFatih Ozavci
 
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çeEmre Akış
 
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ğiBurak Oğuz
 
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ımNur Yesilyurt
 
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 Burak Oğuz
 
NETSCALER SSLLABS A Plus
NETSCALER SSLLABS A PlusNETSCALER SSLLABS A Plus
NETSCALER SSLLABS A PlusVeli 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-sonraFatih Erdem
 
Forti̇gate ayarlari
Forti̇gate ayarlariForti̇gate ayarlari
Forti̇gate ayarlarihuzeyfe
 
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 OpenStackHuseyin Cotuk
 
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 – TsharkBGA Cyber Security
 
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çleriMurat Kader
 

Semelhante a 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)