Profile picture
Gökhan Şengün @gokhansengun
, 18 tweets, 3 min read Read on Twitter
Bu flood'da dosya sistemi ve veri tabanlarında meydana gelen değişikliklerin uygulamalara bildirim yolu iletilmesi ve bu bildirimlerin hangi amaçlarla kullanıldığını anlatacağım. Bu flood'un Medium linki medium.com/@gokhansengun/…
Gerçek zamanlı bilgiler sunan web uygulamaları (canlı maç sonucu, anlık mesajlaşma, vb) WebSocket yardımıyla web sunuculara bağlantı kurarak sundukları bilgilerde meydana gelen değişiklikleri anlık olarak uygulamaya yansıtabilirler. WebSocket sayesinde tarayıcı üzerinde koşan web
uygulamasının değişiklikleri algılaması için sunucuya periyodik olarak istek göndermesi gerekmez. Bu sayede hem sunucu daha az yüklenir hem de değişikliklerin yansıması için bir sonraki sorgulama periyodu beklenmeyeceği için bilgiler daha hızlı yenilenir.
Event bazlı olarak çalışma yukarıda verilen WebSocket örneğinde olduğu gibi kaynakların optimal kullanımını sağladığı için birçok sistem tarafından desteklenir. Bu sistemler üzerlerinde meydana gelen olayları yayınlayarak ilgililerin bunlardan haberdar olmasını sağlarlar.
İşletim sistemleri dosya sisteminde meydana gelen değişiklikleri anlık olarak ilgililerine iletirler. Bu sayede dosya sistemindeki değişikliklerle ilgilenen bir program, bir klasörde yeni bir dosya yaratma, var olan dosyayı değiştirme veya silme gibi işlemlerden haberdar olur.
Linux dosya sistemi değişikliklerini `inotify` API'ı ile iletir. `inotifywait` ve `inotifywatch` araçları ile komut satırından `inotify` API'ını tanıyabiliriz. `inotify`'ın binding'leri birçok programlama dillinde bulunur böylece `inotify` uygulama içinden de kullanılabilir.
Aşağıdaki örnekte `home` klasörü içerisinde bulunan `test` klasöründe bir dosya oluşturma, dosyaya bir satır metin yazma ve dosyayı silme gibi dosya sistemi hareketleri `inotifywait` ile izlenerek ekranda gösterilmiştir.
Aşağıdaki örnekte ise yine `test` klasörü `Node.js`'te `inotify` npm paketi yardımıyla izlenmiş önceki örnekteki işlemler tekrarlanarak dosya sisteminden ilgili event'lerin alınabildiği gösterilmiştir.
Dosya sistemi gözlenerek hayat kolaylaştıran birçok işlem rahatlıkla yapılabilmektedir. Örneğin `Webpack dev server`, ön yüz geliştirmesi yapılırken geliştiricinin değiştirdiği dosyaları monitör ederek web sunucuda içeriği güncelleyip tarayıcıyı WebSocket üzerinden
bilgilendirerek sayfanın yenilenmesini sağlar. Benzer şekilde bazı entegre geliştirme ortamları ve editörler dosya sisteminde `TypeScript` dosyaları oluşturuldukça bu dosyaları `transpile` ederek `JavaScript - ES5` karşılıklarını oluşturabilmektedir.
Uygulama konfigürasyonu değiştirildiğinde uygulamayı yeniden başlatmadan değişiklikleri alabilmek için (her ne kadar artık "best practice" olmasa da) uygulama yapılandırma dosyasındaki değişiklikler izlenerek uygulama konfigürasyonu güncellenebilir.
Dosya sistemini izleme ile ilgili birçok başka örnek verilebilir fakat ne yazık ki bazı dosya sistemleri, özellikle NFS gibi paylaşım için kullanılanlar, bu özelliği desteklememektedir. Sistem tasarımı yapılırken bu kısıtlamanın dikkate alınması önemlidir. Örneğin `Vagrant` ve
`VirtualBox` ile oluşturulan paylaşımlı klasörde `Host OS`'te yapılan dosya sistemi hareketleri `Guest OS`'te, `Guest OS`'te yapılanlarsa `Host OS`'te bildirim oluşturmayacaktır. `Webpack dev server` bu kısıtlamayı belirli aralıklarla `poll` yaparak aşmaya çalışmaktadır.
Dosya sistemlerinin yanı sıra birçok ilişkisel ve NoSQL veri tabanı da üzerlerinde yapılan işlemleri bildirim olarak ilgililerine aktarabilmektedir. Bilindiği gibi veri tabanları, `Trigger` adlı mekanizmayla tablolarda meydana gelen yazma, silme ve güncelleme gibi işlemleri
iletebilirler. Benzer şekilde `Database Driver` sayesinde uygulamalarla iletişim kurarak tuttukları tablolarda meydana gelen değişiklikleri uygulamalara aktarırlar. Bu konuda en öncü veri tabanı şüphesiz `Realtime Web` sloganı ile yola çıkan `RethinkDB`'dir.
`RethinkDB`'ye ek olarak popüler veri tabanlarından `PostgreSQL`, 'Microsoft SQL Server` ve `MongoDB` de farklı şekillerde ve bazı kısıtlamalarla uygulamaların bir tablodaki veriler veya hazırlanan bir sorgu sonucunda meydana gelen değişiklikleri dinlemesine olanak tanımaktadır.
Veri tabanlarında bulunan bu destek sayesinde bir web uygulamasını uygulama sunucusu ile birlikte uçtan uca, ölçeklenebilir şekilde asenkron olarak tasarlamak ve uygulamak mümkün olmaktadır.
Yukarıda anlatılan olay bildirimlerini iletme ve iletilenleri almak üzere kaydolma esaslarını belirleyen `Pub-Sub / Publish-Subscribe` tasarım desenini ve bu desenin diğer uygulama alanlarını (`Redis`, `RabbitMQ`) ilerleyen flood'larda ele alacağız.
Missing some Tweet in this thread?
You can try to force a refresh.

Like this thread? Get email updates or save it to PDF!

Subscribe to Gökhan Şengün
Profile picture

Get real-time email alerts when new unrolls are available from this author!

This content may be removed anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member and get exclusive features!

Premium member ($3.00/month or $30.00/year)

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

:dotted 1px #999}