1. Netty Teknoloji Yığıtında Nerede?
1. Socket
2. Thread per Socket
3. Linux epoll : Asenkron dünyaya giriş
4. Asenkron TCP, UDP kütüphanaleri : ACE (çok eski) boost asio, Netty, Apache Mina vs.
5. Middleware
5.1 Broker kullanmayan middleware : DDS, ZeroMQ vs.
5.2 Broker kullanan middleware : JMS, ActiveMQ, Kafka vs.
Broker kullanan middleware’ler de kendi içlerinde scalability, push based veya pull based çalışma
gibi bir sürü dallara ayrılıyorlar.
2. Netty Teknoloji Yığıtında Nerede?
Yani Netty TCP, UDP istemci veya sunucu uygulamalarını geliştirirken kullanılabilecek bir kütüphane.
Sürüm 4.x kullanılıyor. Sürüm 5.x var ancak abondoned, yıllardır geliştirilmiyor.
7. Önemli Bileşenler
1. Channel Tipleri
EmbeddedChannel, LocalServerChannel, NioDatagramChannel, NioSctpChannel,
NioSocketChannel
2. EventLoop
Tek thread tarafından çalıştırılır. EventLoopGroup ile gruplanabilir.
3. ChannelFuture
Channel üzerinde yapılan tüm işlemler Future döndürür. Yani hemen gerçekleşmez.
4. ChannelHandler ve ChannelPipeline
Her channel bir pipeline’a sahiptir. Pipe aslında bir ChannelHandler dizisidir. Gelen ve giden mesajlar
sırayla ChannelHandler’lara Netty tarafından geçilir.
14. ByteBuf API
Zengin bir API sağlıyor
- Search işlemleri
- Random, sequential access
- Readable, writable byte sayaçları
- Kopyalama ve slice işlemleri
15. ByteBuf Reference Counting
Netty performans için ByteBuf nesnelerini
baştan yaratmıyor. Bunları bir havuzdan alıyor
ve işlem bitince havuza geri veriyor. Bunun için
de Reference Counting yapıyor.
18. Önemli Noktalar
ChannelHandler hep aynı EventLoop tarafından
çağrılır
Outbound mesajlar da EventLoop tarafından
çalıştırılır. Netty 3 ile kendi thread’imiz
kullanılıyordu ancak bu thread safety
problemlemlerine sebep oluyordu. Bu yüzden
değiştirildi
Vertx verticle da benzer bir mantık kullanılıyor.
20. Long Running Task Varsa
Örneğin veri tabanına yazma/okuma işlemi
varsa
Netty EventExecutorGroup sınıfları sağlar.
Bir ChannelHandler üzerindeki tüm işlemlerin
ayrı bir thread-pool üzerinde çalışması sağlanır
23. Codec Framework
Netty encoder ve decoder altyapısı sağlar.
Encoder ve decoder sınıfları ByteBuf’tan Java
nesnesine veya Java nesnesinden bir başka
Java nesnesine çevrim sağlar.
Bazı codecler hazır geliyor. Http gibi
24. Netty Kullanan Diğer Altyapılar
Özellikle reactive altyapılar EventLoop olarak
altta Netty kullanıyor
Vertx
Project Reactor
Driver’lar Netty kullanıyor.
Redis Redisson Driver
Kendimiz direkt kullanmasak bile Netty bir
yerlerde karşımızı çıkıyor :)