Bir açık kaynak projesi olarak başlattığımız Netty Agents, 1.0.0 sürümü ve Apache v2.0 lisansı ile yayınlandı.Mesaj tabanlı ve senkron haberleşmeye imkan veren bir iletişim kütüphanesi olarak tanımlayabileceğimiz Netty Agents, yine bir açık kaynak haberleşme kütüphanesi olan Netty (https://netty.io/) ürününü kullanmaktadır.
Ürünün Özellikleri
- Kalıcı iletişim kanalları üzerinden çift yönlü iletişim imkanı,
- Performans, özelleştirebilme ve esneklik (Netty kütüphanesinin sunduğu soket seviyesi iletişim ve pipe-and-filter mimarisi gibi güzel özelliklerini kullanarak)
- Veri tipinin ve protokolün net bir şekilde tanımlandığı ve haberleşen taraflar tarafından bilindiği bir haberleşme mekanizması tasarlama ve kullanım imkanı,
- Asenkron haberleşme imkanına ek olarak, senkron, istek-cevap ikililerini destekleyen bir modelin kullanılabilmesi imkanı,
- İletişim ve iletişim güvenliği gereksinimlerinin, basitleştirilmiş bir kütüphane arayüzü üzerinden sunularak daha az kodlama yaparak karşılanabilmesi imkanı,
- TLS ve çift taraflı sertifika doğrulaması kullanarak üst seviyede iletişim güvenliği imkanı
Motivasyon
Yazılım sistemleri geliştirilirken bağımsız çalışan birden çok alt-sistem yazılım bileşenini birbiriyle etkileşime sokma ihtiyacı duyabilirsiniz. Bu bileşenler aynı işletim sistemi olabileceği gibi farklı işletim sistemleri üzerinde de kurulu olabilirler. Mikro-servis mimarisi, bu yapılara verilebilecek güzel bir örnektir.
Alt-sistemler arası etkileşim için çok çeşitli ağ iletişim yöntemleri, protokolleri ya da modelleri kullanılabilmektedir. Dikeyde ele alabileceğimiz bir örnek aşağıda verilmiştir.
- En alt katmanda TCP/UDP protokolleri doğrudan kullanılabilir,
- TCP üzerinde çalışan HTTP protokolü kullanılabilir,
- HTTP üzerinde çalışan REST iletişim modeli kullanılabilir
Çoğu alt-sistem (özellikle mikro-servis mimarisinde), iletişim modeli olarak REST kullanılmaktadır. Kalıcı bir iletişim kanalı ihtiyacımız yoksa bu, mantıklı bir seçenek olabilir. Fakat çift yönlü iletişim ihtiyacı nedeniyle kalıcı bir iletişim kanalı ihtiyacı olan (özellikle hat üzerinde firewall gibi güvenlik cihazlarının olduğu) durumlarda, REST servis mimarisi yetersiz kalmaktadır. Bu durumda da Web soket (ki bu da her iki tarafta da HTTP işleme yeteneği gerektirmektedir) gibi çözümler ortaya çıkmaktadır.
Netty Agents projesini geliştirirken bu ve benzeri sorunları çözme isteğinin yanı sıra aşağıdaki hedefleri gözettik:
- Kalıcı ve çift yönlü bir iletişim kanalı sağlamak (REST'ten farklı olarak),
- HTTP vb. gerektirmeden daha alt katmanda bir iletişim mekanizması sunabilemek (Web soket mimarisinden farklı olarak)
- Veri tipi belirli (POJO nesneleri) and net tanımlanmış bir protocol mimarisi sunmak (ham TCP/UDP soket tabanlı programlamadan farklı olarak),
- Asenkron mimariden ödün vermeksizin, bloke olmayı gerektiren istek-cevap tabanlı iletişim ihtiyaçlarına cevap verebilme
- Projelerin ihtiyaç duyduğu iletişim ve iletişim güvenliği ihtiyaçlarının, olabildiğince az kod yazarak ve yığınla kod tekrarı olmadan karşılanabilmesinin sağlanması
Kalıcı ve çift yönlü bir iletişim kanalı kurmak aşağıdaki yetenekleri sağlamada kolaylık sağlamaktadır:
- iki tarafın da doğrulanması ve böylece daha güvenli bir yapı
- doğrulama sürecinin kanalın ömrü boyunca bir kez yapılması nedeniyle performans artışı,
- tarafların sağlık durumlarının anlık izlenmesi, ve
- çilf yönlü iletişim (mesaj gönderiminin iki taraf tarafından da tetiklenebiliyor olması)
Düşük seviyede (soket seviyesi) bir iletişim modeli kullanmak şu avantajları sağlamaktadır:
- üst seviye protokollere (HTTP vb.) bağımlılık olmaması nedeniyle performans artışı
- esneklik (üst seviye protokollerin sınırları dahilinde hareket etmek gerekmiyor)
- flexibility by breaking limitations of higher layer protocol, and
- özelleştirebilme (Netty kütüphanesinin sağladığı pipe-and-filter mimarisi vb. sayesinde)
İletişim veri tipleri belirli ve iyi tanımlanmış protokol modeli sayesinde
- geliştiricilerin iş mantığına daha fazla odaklanmasının sağlanması, ve
- hatasız tasarım ve gerçekleştirim imkanı sağlanmaktadır.
- gerekmeyen noktalarda "event driven" tasarımın sebep olacağı karmaşıklıktan, ve
- geliştirme esnasında "event handling" metodları arasında kaybolmaktan bizi kurtarır.
Linkler ve Dokümantasyon
Proje sitesi:https://gitlab.com/opentoolset/netty-agents
Wiki dokümantasyonu:
https://gitlab.com/opentoolset/netty-agents/-/wikis/home

Hiç yorum yok:
Yorum Gönder