Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Swoole ile Asenkron PHP

Swoole ile Asenkron PHP

Swoole, PHP ile "asenkron", eş zamanlı ve ağ servisleri uygulamalarını hızlı ve kolayca geliştirmemize yardımcı olan ve eklenti olarak gelen yüksek performans bir kütüphanedir. Oturumda "Asenkron" ve "Ağ Servisleri" gibi temelde bilinmesi gereken konulara değinip bu tarz uygulamaları PHP ile geliştirmek için var olan çözüm ve kütüphanelere göz atıp, Swoole eklentisi ile bunları biraz daha derinlemesine irdeleyeceğiz.

Hidayet Doğan

December 12, 2020
Tweet

More Decks by Hidayet Doğan

Other Decks in Technology

Transcript

  1. MERHABA! • 1995 programlama ile tanışma • 1998 yılından itibaren

    PHP • Kurucu Ortak & Yazılım Uzmanı
 @ Yazılım Parkı • Yazılım Uzmanı
 @ İ. D. Bilkent Üniversitesi Fotoğraf: Onur Canalp
  2. NEREDE ASENKRON? • Web
 Dosya (video, PDF, imaj) işleme, e-posta

    gönderme • CLI (Command Line Interface)
 Çoklu dosya indirme, ağ servisleri, her türlü ağır iş
  3. NEREDE ASENKRON? mpm_prefork nginx mod_php php-fpm Tarayıcı İstek Yanıt Veritabanı

    işi E-posta işi Video çevirme işi 0.01sn 5 dk 30 dk ±35 dk
  4. NASIL ASENKRON? • İşleri kuyruğa sok (queue). • Arka planda

    kuyrukları çalıştır (worker/consumer).
  5. NASIL ASENKRON? mpm_prefork nginx mod_php php-fpm Tarayıcı İstek Yanıt +

    Bağlantıyı Kes die(“PHP sonlandı, hafıza temizlendi.”) E-posta işi Video çevirme işi Kuyruk
  6. NASIL ASENKRON? • İşleri kuyruğa sok (queue). • Arka planda

    kuyrukları çalıştır (worker/consumer). • İşin durumunu aralıklarla sor (AJAX) • İşin durumu sana iletilsin (SSE, WebSocket)
  7. NEREDE ASENKRON? Toplu e-posta gönderme E-posta gönder E-posta gönder E-posta

    gönder 1 sn 1.2 sn 0.9 sn 3.1 sn e-posta-gonderici.php
  8. NEREDE ASENKRON? Toplu e-posta gönderme E-posta gönder E-posta gönder E-posta

    gönder 1 sn 1.2 sn 0.9 sn ±1.2 sn e-posta-gonderici.php
  9. NEREDE ASENKRON? Web Sayfasına Erişiliyor Mu? HTTP istemci HTTP istemci

    HTTP istemci 0.12 sn 1.3 sn 0.8 sn 2.22 sn web-erisim-kontrol.php
  10. NEREDE ASENKRON? HTTP istemci HTTP istemci HTTP istemci 0.12 sn

    1.3 sn 0.8 sn ±1.3 sn web-erisim-kontrol.php Web Sayfasına Erişiliyor Mu?
  11. NASIL ASENKRON? “PHP ile asenkron kod mu yazılır ya.” –

    <?=date('Y') ?> Yılında Yeni Çıkmış "Hype" Programlama Diline Gönül Verip Macbook’unu Etiketle Dolduranlar Derneği
  12. REACTPHP • Non-Blocking I/O • Event Loop • Sunucu, İstemci,

    DNS Çözümleyici • Promise reactphp.org
  13. AMP • Non-Blocking I/O • Event Loop • Sunucu, Asenkron

    İstemci, DNS Çözümleyici • Parallel Processing, Promise, Coroutine amphp.org
  14. SWOOLE • Non-Blocking I/O • Event Loop • Sunucu, İstemci,

    DNS Çözümleyici • Parallel Processing, Coroutine swoole.co.uk
  15. EVENT LOOP? • select (Linux, Windows) • poll (Solaris) •

    epoll (Linux) • kqueue (BSD, Mac) Okuyacak/gönderilecek veri var mı? Hata oluştu mu? Zaman aşımı var mı? stream_select() / socket_select()
  16. NON-BLOCKING? • Blocking Kipi
 Programın işleyişi işlemler (I/O, bağlantı kurma/

    kabul etme gibi) bitene kadar bekler. • Non-Blocking Kipi
 İşlemler anında yanıt döner. Bittiğinde programa haber/sinyal verilir. PHP’de işlemler aksi belirtilmedikçe BLOCKING (işlemin bitmesi beklenir) stream_set_blocking() / socket_set_(non)block()
  17. COROUTINE? • Kanal (channel) aracılığı ile haberleşme (IPC) • AKA:

    "Fiber", "lightweight thread" • Jonglörün topları çevirmesi Araya girilebilen, asenkron işler yapmamızı sağlayan fonksiyonlar/arayüzler.
  18. KISS Asenkron Programlama • İşlemi başlatırız. • Bitmesini beklerken başka

    işlemlere geçeriz. • Bitince bize haber verir. (callback/promise)
  19. KISS Asenkron Programlama • Ayrı bir “thread” veya “process” ile

    uygulanmış olabilir. • Tek “process” ile event loop üzerinde uygulanmış olabilir. • Uygulama detayları kullanıcıdan soyutlanır (kullanımı basitleştirilir, coroutine, async/ await).
  20. KISS Asenkron Programlama • PHP’de işlemler aksi belirtilmedikçe BLOCKING (işlemin

    bitmesi beklenir) • PHP’de ek kütüphane veya eklentilerle asenkron programlama yapabiliriz. • Asenkron işlemler içinde BLOCKING işlemlerden kaçınılır.
  21. • Asenkron dosya işlemleri • Coroutines • HTTP, HTTP/2, WebSocket,

    Redis, TCP/UDP ağ sunucuları • HTTP, HTTP/2, WebSocket, Redis, MySQL, PostgreSQL, DNS, TCP/UDP istemcileri • SSL/TLS Özellikleri
  22. • Global (variable scope), static (singleton) değişkenlere dikkat! • use

    Swoole\Table; • use Swoole\Atomic; • Blocking işlemlere dikkat! Uyarılar
  23. • PHP 7.4 + Swoole 4.5 • NodeJS 12 ("http")

    • Go 1.14 ("net/http") Benchmark (HTTP Sunucu) ab -c 500 -n 500000 • CPU: 8 core (Intel Xeon) • RAM: 16GB • Ubuntu 18.04 LTS https://medium.com/@rioastamal/benchmark-php-swoole-vs-nodejs-vs-go-539a5493b067
  24. • Laravel
 https://github.com/swooletw/laravel-swoole
 https://github.com/hhxsv5/laravel-s • Symfony
 https://github.com/k911/swoole-bundle • PSR Middleware


    https://github.com/imefisto/psr-swoole-native
 https://github.com/mezzio/mezzio-swoole • Siler
 https://siler.leocavalcante.dev/swoole Diğerleri ile Kullanımı
  25. TEŞEKKÜRLER! KAYNAKLAR • swoole.co.uk • reactphp.org • amphp.org Hİ.DO •

    http://hi.do • @hdogan • github.com/hdogan • speakerdeck.com/hdogan • tr.linkedin.com/in/hdogan