1
PHP ve NATS ile
Mikroservis Mesajlaşma Sistemi
Erhan Yakut / @yakuter
Netsparker İstanbul PHPKonf / 4 Mayıs2019
Sunum Hakkında
2Neler konuşacağız?
1. Sunum Hakkında 2. Biyografi
3. İletişimsiz olmaz
4. Özetle Mikroservis
5. Mikroservis iletişim kanalı
6. NATS nedir ve nerelerde kullanılır?
7. NATS’ın özellikleri nelerdir?
8. NATS ve diğer kuyruklama farkları?
9. Demo
10. Son sözler
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 takım lideri çalışmaktayım.
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?
İletişimsiz Olmaz!
4İstemciler konuşa konuşa…
Kaynak Mesaj Kanal
Alıcı
Geri Besleme
İletişim, bilginin simgeler kullanılarak iletilmesidir!
Özetle Mikroservis
5Nedir bu herkesin bahsettiği mikroservis konusu?
Mikroservis İletişim Kanalı
6Kanalsız iletişim, yıldızsız gökyüzü gibidir
NATS Nedir?
7NATS’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 özellikle CloudFoundry için 2010 yılında geliştirilmiştir.
Önceleri Ruby ile geliştirilmekte olan araç 2012 yılından baştan Go ile yazılmıştır.
Production ortamlarında yaklaşık 8 yıldır aktif olarak kullanılmaktadır.
NATS Server v1.0.0, 2017’de stabil yapısına kavuşmuştur.
15 Mart 2018’de Cloud Native Computing Foundation tarafında 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, 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
8
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
9
NATS İstemci (Client) Kütüphaneleri
10Anahtar 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
NATS Özellikleri
11Anahtar 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
NATS Özellikleri
12Anahtar 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!
NATS Özellikleri
13Anahtar 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.
NATS Özellikleri
14Anahtar 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.
NATS Özellikleri
15Anahtar Kelimeler Clustered High availability
NATS Kümelendirilebilir!
- NATS, kümelenmiş (clustered) şekilde yüksek kullanılabilir (high availability) yapıda çalışabilir.
NATS
İSTEMCİ
(Client) İSTEMCİ
(Client) İSTEMCİ
(Client) İSTEMCİ
(Client)
NATS NATS
NATS Özellikleri
16Anahtar Kelimeler Clustered High availability
NATS Kümelendirilebilir!
- NATS, kümelenmiş (clustered) şekilde yüksek kullanılabilir (high availability) yapıda çalışabilir.
NATS
İSTEMCİ
(Client) İSTEMCİ
(Client) İSTEMCİ
(Client) İSTEMCİ
(Client)
NATS NATS
NATS Özellikleri
17Anahtar 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
NATS ve PHP
18Anahtar Kelimeler NATS PHP Client
NATS 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.
19
S W O T
Weakness
Entrepreneurial activities differ substantially
depending on the type
Threads
Entrepreneurial activities differ substantially
depending on the type
Strength
Entrepreneurial activities differ substantially depending on the type
Opportunities
Entrepreneurial activities differ substantially depending on the type
Resources
Company
S.W.O.T. Global Analysis
Write here your great subtitle
20
NATS
İSTEMCİ (Client)
S.W.O.T. Global Analysis
Write here your great subtitle
NATS NATS
İSTEMCİ (Client)
İSTEMCİ (Client)
İSTEMCİ
(Client)
21
Element One
Element Two
Element Three
Element One
Entrepreneurial activities differ substantially depending on the
Element Two
Entrepreneurial activities differ substantially depending on the
Element Three
Entrepreneurial activities differ substantially depending on the
Three Elements Analysis
Write here your great subtitle
22
POPULATION
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam tincidunt ante nec sem congue convallis.
81%
White People Hispanics
Black People Asian
Others
United States Infographic Map
Write here your great subtitle
23
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mauris lorem, vestibulum ac rutrum id, suscipit in dui. Donec vitae dapibus tellus. Vestibulum nunc sem, finibus quis elementum ac, varius ac tellus. Nam faucibus faucibus venenatis. Donec nec arcu velit. Fusce viverra, dui vitae euismod mollis, tortor magna egestas nunc, et suscipit nunc ex quis nunc. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Integer eget auctor nunc. Maecenas tincidunt eleifend consequat. Nulla efficitur urna et massa dapibus maximus. Maecenas sit amet risus pretium, sagittis dui ut, consectetur purus.
Phasellus auctor consectetur arcu a consequat. Vestibulum congue sed orci efficitur finibus. Integer malesuada finibus ligula, aliquet lobortis nulla commodo vel.
Nulla varius vehicula augue, id placerat nisi luctus a. Suspendisse magna tellus, imperdiet id turpis in, gravida fermentum sem.
Integer commodo pharetra dui a congue. Vivamus in commodo dui. Nunc fringilla ex sapien, et laoreet erat pretium ultricies. In hac habitasse platea dictumst. Donec lacinia efficitur dictum.
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam odio nulla, tempor a eleifend ut, dignissim nec tellus. Donec porttitor porttitor ante.
Full Width Text Sample
Write here your great subtitle
24
İletişim Söz konusu olunca aşağıdaki soruları kendimize sormalıyız? (Rowntree, 2000) 1. Neden iletişim kurmaya ihtiyacım var?
2. Kiminle/kimlerle iletişim içinde olmalıyım.
3. Hangi tür iletişim biçimini kullanmam daha uygun olur?
4. İletişime geçmemi engelleyen faktörler nelerdir?
5. İletişim kurma becerimi nasıl geliştirebilirim?
Full Width Text Sample
Write here your great subtitle
25
Basic Plan Professional Popular Xtreme Ultimate
First Service First Service First Service First Service First Service
- Second Service Second Service Second Service Second Service
- - Third Service Third Service Third Service
- - - Fourth Service Fourth Service
- - - - Fifth Service
$49 $99 $149 $199 $249
Pricing Table Sample
Write here your great subtitle
26
Lorem ipsum dolor sit amet, consectetur
Feature Name
Lorem ipsum dolor sit amet, consectetur
Feature Name
Feature Name
Lorem ipsum dolor sit amet, consectetur
Feature Name
Lorem ipsum dolor sit amet, consectetur
Feature Name
Lorem ipsum dolor sit amet, consectetur
Feature Name
Lorem ipsum dolor sit amet, consectetur
Genre Analytics
Write here your great subtitle
27
50%
70%
50%
90%
70%
Web Design
Lorem ipsum dolor sit amet, consectetur
Multimedia
Lorem ipsum dolor sit amet, consectetur
Graphic Design
Lorem ipsum dolor sit amet, consectetur
Photography
Lorem ipsum dolor sit amet, consectetur
Investments
Lorem ipsum dolor sit amet, consectetur
Our Company Around the World
Write here your great subtitle
28
Laptop = 25% Tablet 35% Phone
40%
Lorem ipsum dolor sit amet, consectetur
Feature Name
Lorem ipsum dolor sit amet, consectetur
Feature Name
Lorem ipsum dolor sit amet, consectetur
Feature Name
Lorem ipsum dolor sit amet, consectetur
Feature Name
Lorem ipsum dolor sit amet, consectetur
Feature Name
Lorem ipsum dolor sit amet, consectetur
Feature Name