SlideShare a Scribd company logo
Jackson Oliveira
Marcelo Serpa
About me
❏ Software Architect at ilegra
❏ AWS & GCP
❏ Google Cloud Architect Certified
❏ Microservices / DevOPS
❏ Mortal Kombat Player :D
❏ https://github.com/marceloserpa/
❏ https://www.linkedin.com/in/marceloserpa/
About me
❏ Father
❏ Software Architect at ilegra
❏ Devops Engineer Specialist
❏ Google Cloud Architect Certified
❏ SOA Specialist
❏ Football fun
❏ Github
❏ Twitter
❏ Blog
Exercise 1
● Create a TCP server using socket API. Use the template available here.
● It needs to be able to process more than one request at time (use threads)
Let's review what we did and think about It
How works the traditional way
● thread per request model
● One thread for the entire request flow
● limitations 1 thread == 1MB (around it)
Blocking and synchronous
● Sequential
● Unnecessary waiting time
● Total time is high
Expectations for modern applications
● high throughput
● scalability
● lower cost (BE CAREFUL)
Java NIO
● Java abstraction to deal with low level I/O
● Work on top of channels and selectors (scales better)
● Is much more efficient than native sockets and easier to deal with.
Java NIO - Can become complex as well - link
Networking programing
● Is inhirintanly complex
○ It’s more than programming languages or algorithms
○ Requires specific skills
○ Network programs have their own performance requirements
○ Needs to be efficient, otherwise they won't attend the current market requirements.
What is Netty
“Netty is a NIO client server framework which enables quick and easy development
of network applications such as protocol servers and clients. It greatly simplifies
and streamlines network programming such as TCP and UDP socket server.”
● A networking programming server
● open source and written in Java
● Asynchronous and event driven
● Enforces a better design. Decouples business logic from network programming details.
● Configurable
● Extensible
Companies using Netty
● Apple
● Twitter
○ using Finagle their Netty-basead framework in inter-system communication
● Facebook
○ uses Netty in Nifty - Thrift service
● Google
● Square
● Instagram
● Netflix
Companies using Netty - Netflix
Companies using Netty - Twitter
OSS project using Netty
● Infinispan
● HornetQ
● Vert.x
● Apache Cassandra
● ElasticSearch
Cassandra - More nodes, worst the performance
Cassandra - Streaming data between nodes - Before
Cassandra - Streaming data between nodes
Cassandra - Streaming data between nodes - Before
Cassandra - Streaming data between nodes - Before
Cassandra - Streaming data between nodes - Before
Cassandra - Streaming data between nodes - Now
Cassandra - Streaming data between nodes - Now
Startups using Netty
● Firebase
● Urban Airship
Non-Blocking and asynchronous
● Initialize something now
● Using Threads Efficiently
● Scalability
● More efficient (doing more with less resources)
● concurrency
Core components
● EventLoop
● Channel
● Callback
● Future
● Event Handler
Netty - High level arch
Echo Server Example
Echo Server Example
Eventloop impl in use.
There are others...
Echo Server Example
Utility that helps glue
all pieces
Echo Server Example
Transport type defined
for the channel
Echo Server Example
Setting handler on the
pipeline chain
Echo Server Example
Bind the server and
channel and wait this
process complete
Echo Server Example
Block the current
thread and wait until
the channel is closed
Echo Client - Example
Echo Client - Example
What is EventLoop? How it works?
● Threading model
● Control flow
● Dispatching events to ChannelHandlers
EventLoop -Task Scheduling - run later
scheduling task to run
after 10 seconds
EventLoop -Task Scheduling - periodically
scheduling task to run
every 10 seconds
staring in 10 seconds
What is EventLoop group?
● Allocate EventLoop for a Channel
● Uses round-robin to distribute load
● An application needs a
least 1 EventLoopGroup
Channel
● Socket
● Receive events
● Transport layer
● Notify Channel Handlers
ChannelHandler
● Decoupled business from networking
● Implements the logic
● React to event notification
● ChannelInboundHandlerAdapter
○ channelRead()
○ channelReadComplete()
○ exceptionCaught()
● ChannelHandler are invoke for different events
● Hook lifecycle
ChannelPipeline
● chain of ChannelHandler
● propagation flow
● order to execute channel handlers
● ChannelHandler is installed as follow:
○ a Channelnitializaer is registered to server bootstrap
○ when Channelnitializaer.init() is called it install the channels handlers in the pipeline
Bootstraper
for clients (Bootstrap)
● establish connection
● connect to remote peer
● requires only one EventLoopGroup
for servers (ServerBootstrap)
● listening to income connections
● requires two EventLoopGroup:
○ one for ServerChannel
○ others to registered all channel that you
want
Bytebuf
● Byte container
● Alternative for NIO ByteBuffer
● Used to data
Codecs
● Transforms streams of byte from one
format to another
Encoder Decoder
Codec Example - Bootstrap
Creating a
ServerBootstrap and
registered
EventLoopGroup
Codec Example - Bootstrap
Registered Initializer
to configure Pipeline
Codec Example
Registered codecs
and aggregator on
ChannelPipeline
Codec Example - Handler part 1
Use decoder to extract
parameters
Codec Example - Handler part 1
Call service to handle
business rules
Codec Example - Handler part 2
Solution based Netty - ServiceTalk
https://github.com/diegopacheco/java-pocs/tree/master/pocs/servicetalk-fun
Solution based Netty - ServiceTalk
● gRPC
● HTTP/2
● Long-polling
● Smart Client
○ Client side load balancing
○ retry
● Modularization
○ use just you need
Solution based Netty - Armeria
https://github.com/diegopacheco/java-pocs/tree/master/pocs/armerica-fun/src/main/java
Solution based Netty - Armeria
● HTTP/2
● Integration with gRPC and Thrift
● Metrics
● Circuit breaker
● Client-side health-check, retries and client side load balancing
● Distributed Tracing with Zipkin
● Service discovery (DNS and Zookeeper)
● Built on top of Reactive Streams and Java 8 CompletableFuture
Solution based Netty - Reactor Netty
https://github.com/diegopacheco/java-pocs/tree/master/pocs/reactor-netty-simple
Solution based Netty - Reactor Netty
● Support reactive streams specification
● HTTP, UDP and TCP
● Schedulers
● Parallel Flux
Performance/Scalability > Developer Experience
● Number of lines of code is not a problem
● IFs (if not shells) is not a problem
● You don't deal with this code everyday
● There are books and materials on the web (stack overflow, etc...)
● Less lines of code does not means is better
● Spring might be “feeling” better but has worst performances and more deps
● Developers should care more about the business
○ User Experience -> slow server
○ Cost Reduction -> doing more with less(less cpu and memory used - more toughtput)
○ Reliability -> netty is battle tested by Silicon valley biggest IT companies in the world.
Netty
Thank you!
Exercise 2
● Change the code made on exercise 1, this time using Netty as a a server
implementation and client.
● Use this template in order to get started.
Exercise 3
● For this exercise we are gonna use same problem as described on exercise
2, but this time using an http interface rather than exposing an TCP socket.
● Server should be called like this:
localhost:8080/training/netty/sum?num1=1&num2=4
● Use this template in order to get started.
Exercise 4
● Do the same implementation of exercise 3 using ServiceTalk with JaxRS
● Use this template in order to get started.

More Related Content

PPTX
用Raspberry Pi 學Linux I2C Driver
PDF
スケーラブルなシステムのためのHBaseスキーマ設計 #hcj13w
ODP
スレッドダンプの読み方
PDF
PostgreSQL: XID周回問題に潜む別の問題
PDF
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
PDF
Grafana Dashboards as Code
PDF
強力なグラフィック機能を備えた組版処理システムTwightの開発
PDF
ビッグデータ処理データベースの全体像と使い分け
用Raspberry Pi 學Linux I2C Driver
スケーラブルなシステムのためのHBaseスキーマ設計 #hcj13w
スレッドダンプの読み方
PostgreSQL: XID周回問題に潜む別の問題
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
Grafana Dashboards as Code
強力なグラフィック機能を備えた組版処理システムTwightの開発
ビッグデータ処理データベースの全体像と使い分け

What's hot (20)

PPTX
Apache Avro vs Protocol Buffers
PDF
SQLアンチパターン(インデックスショットガン)
PDF
OpenStack超入門シリーズ いまさら聞けないSwiftの使い方
PDF
PostgreSQL のイケてるテクニック7選
PDF
コンテナにおけるパフォーマンス調査でハマった話
PDF
Let's scale-out PostgreSQL using Citus (Japanese)
PDF
한컴MDS_Virtual Target Debugging with TRACE32
PDF
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
Networking in Docker Containers
PPTX
RDB開発者のためのApache Cassandra データモデリング入門
PPTX
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
PPTX
Hadoop -NameNode HAの仕組み-
PPTX
ConfD で Linux にNetconfを喋らせてみた
PDF
HKG18-318 - OpenAMP Workshop
PDF
PostgreSQL DBのバックアップを一元化しよう
PDF
Basic of virtual memory of Linux
PPTX
OSSライセンス入門
PDF
Secure element for IoT device
PDF
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
Apache Avro vs Protocol Buffers
SQLアンチパターン(インデックスショットガン)
OpenStack超入門シリーズ いまさら聞けないSwiftの使い方
PostgreSQL のイケてるテクニック7選
コンテナにおけるパフォーマンス調査でハマった話
Let's scale-out PostgreSQL using Citus (Japanese)
한컴MDS_Virtual Target Debugging with TRACE32
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
Networking in Docker Containers
RDB開発者のためのApache Cassandra データモデリング入門
Java 17直前!オレ流OpenJDK「の」開発環境(Open Source Conference 2021 Online/Kyoto 発表資料)
Hadoop -NameNode HAの仕組み-
ConfD で Linux にNetconfを喋らせてみた
HKG18-318 - OpenAMP Workshop
PostgreSQL DBのバックアップを一元化しよう
Basic of virtual memory of Linux
OSSライセンス入門
Secure element for IoT device
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
Ad

Similar to Netty training (20)

PDF
USENIX LISA15: How TubeMogul Handles over One Trillion HTTP Requests a Month
PDF
Node.js Presentation
PDF
Kafka Summit NYC 2017 - Scalable Real-Time Complex Event Processing @ Uber
PDF
Netflix Open Source Meetup Season 4 Episode 2
PPTX
PDF
Terraforming your Infrastructure on GCP
PDF
PyConIE 2017 Writing and deploying serverless python applications
PDF
NetflixOSS Meetup season 3 episode 1
PDF
Triangle Devops Meetup 10/2015
PPTX
Node.js Web Apps @ ebay scale
PDF
MySQL X protocol - Talking to MySQL Directly over the Wire
PPTX
Netflix Data Pipeline With Kafka
PPTX
Netflix Data Pipeline With Kafka
PDF
How Uber scaled its Real Time Infrastructure to Trillion events per day
PDF
Hadoop summit - Scaling Uber’s Real-Time Infra for Trillion Events per Day
PDF
kranonit S06E01 Игорь Цинько: High load
PPTX
AWS Big Data Demystified #1: Big data architecture lessons learned
PDF
Scheduling a fuller house - Talk at QCon NY 2016
PDF
Netflix Container Scheduling and Execution - QCon New York 2016
PPTX
Truemotion Adventures in Containerization
USENIX LISA15: How TubeMogul Handles over One Trillion HTTP Requests a Month
Node.js Presentation
Kafka Summit NYC 2017 - Scalable Real-Time Complex Event Processing @ Uber
Netflix Open Source Meetup Season 4 Episode 2
Terraforming your Infrastructure on GCP
PyConIE 2017 Writing and deploying serverless python applications
NetflixOSS Meetup season 3 episode 1
Triangle Devops Meetup 10/2015
Node.js Web Apps @ ebay scale
MySQL X protocol - Talking to MySQL Directly over the Wire
Netflix Data Pipeline With Kafka
Netflix Data Pipeline With Kafka
How Uber scaled its Real Time Infrastructure to Trillion events per day
Hadoop summit - Scaling Uber’s Real-Time Infra for Trillion Events per Day
kranonit S06E01 Игорь Цинько: High load
AWS Big Data Demystified #1: Big data architecture lessons learned
Scheduling a fuller house - Talk at QCon NY 2016
Netflix Container Scheduling and Execution - QCon New York 2016
Truemotion Adventures in Containerization
Ad

More from Marcelo Serpa (13)

PDF
AWS Organizations
PDF
Web 3.0 - The Future of Web
PDF
Frontend Track NodeJS
PDF
Terraform
PDF
PDF
Microservices
PDF
Caching
PDF
Defenda seus consumidores
PDF
Service discovery with Eureka and Spring Cloud
PDF
Acessando apis com feign e hystrix
PDF
No core do node js - entendendo como a plataforma trabalha
PDF
Componentizacao com ReactJs
PDF
Clean code
AWS Organizations
Web 3.0 - The Future of Web
Frontend Track NodeJS
Terraform
Microservices
Caching
Defenda seus consumidores
Service discovery with Eureka and Spring Cloud
Acessando apis com feign e hystrix
No core do node js - entendendo como a plataforma trabalha
Componentizacao com ReactJs
Clean code

Recently uploaded (20)

PPTX
Internet___Basics___Styled_ presentation
PPTX
522797556-Unit-2-Temperature-measurement-1-1.pptx
PPT
Design_with_Watersergyerge45hrbgre4top (1).ppt
PPTX
SAP Ariba Sourcing PPT for learning material
PPTX
artificial intelligence overview of it and more
PDF
Tenda Login Guide: Access Your Router in 5 Easy Steps
PPTX
Slides PPTX World Game (s) Eco Economic Epochs.pptx
PPTX
Module 1 - Cyber Law and Ethics 101.pptx
PDF
💰 𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓 💰
PPTX
Introduction to Information and Communication Technology
PDF
Testing WebRTC applications at scale.pdf
PDF
Slides PDF The World Game (s) Eco Economic Epochs.pdf
PDF
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
DOCX
Unit-3 cyber security network security of internet system
PPTX
Funds Management Learning Material for Beg
PPTX
Introuction about ICD -10 and ICD-11 PPT.pptx
PDF
The Internet -By the Numbers, Sri Lanka Edition
PDF
An introduction to the IFRS (ISSB) Stndards.pdf
PDF
Decoding a Decade: 10 Years of Applied CTI Discipline
PPTX
innovation process that make everything different.pptx
Internet___Basics___Styled_ presentation
522797556-Unit-2-Temperature-measurement-1-1.pptx
Design_with_Watersergyerge45hrbgre4top (1).ppt
SAP Ariba Sourcing PPT for learning material
artificial intelligence overview of it and more
Tenda Login Guide: Access Your Router in 5 Easy Steps
Slides PPTX World Game (s) Eco Economic Epochs.pptx
Module 1 - Cyber Law and Ethics 101.pptx
💰 𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓 💰
Introduction to Information and Communication Technology
Testing WebRTC applications at scale.pdf
Slides PDF The World Game (s) Eco Economic Epochs.pdf
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
Unit-3 cyber security network security of internet system
Funds Management Learning Material for Beg
Introuction about ICD -10 and ICD-11 PPT.pptx
The Internet -By the Numbers, Sri Lanka Edition
An introduction to the IFRS (ISSB) Stndards.pdf
Decoding a Decade: 10 Years of Applied CTI Discipline
innovation process that make everything different.pptx

Netty training

  • 2. About me ❏ Software Architect at ilegra ❏ AWS & GCP ❏ Google Cloud Architect Certified ❏ Microservices / DevOPS ❏ Mortal Kombat Player :D ❏ https://github.com/marceloserpa/ ❏ https://www.linkedin.com/in/marceloserpa/
  • 3. About me ❏ Father ❏ Software Architect at ilegra ❏ Devops Engineer Specialist ❏ Google Cloud Architect Certified ❏ SOA Specialist ❏ Football fun ❏ Github ❏ Twitter ❏ Blog
  • 4. Exercise 1 ● Create a TCP server using socket API. Use the template available here. ● It needs to be able to process more than one request at time (use threads)
  • 5. Let's review what we did and think about It
  • 6. How works the traditional way ● thread per request model ● One thread for the entire request flow ● limitations 1 thread == 1MB (around it)
  • 7. Blocking and synchronous ● Sequential ● Unnecessary waiting time ● Total time is high
  • 8. Expectations for modern applications ● high throughput ● scalability ● lower cost (BE CAREFUL)
  • 9. Java NIO ● Java abstraction to deal with low level I/O ● Work on top of channels and selectors (scales better) ● Is much more efficient than native sockets and easier to deal with.
  • 10. Java NIO - Can become complex as well - link
  • 11. Networking programing ● Is inhirintanly complex ○ It’s more than programming languages or algorithms ○ Requires specific skills ○ Network programs have their own performance requirements ○ Needs to be efficient, otherwise they won't attend the current market requirements.
  • 12. What is Netty “Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and streamlines network programming such as TCP and UDP socket server.” ● A networking programming server ● open source and written in Java ● Asynchronous and event driven ● Enforces a better design. Decouples business logic from network programming details. ● Configurable ● Extensible
  • 13. Companies using Netty ● Apple ● Twitter ○ using Finagle their Netty-basead framework in inter-system communication ● Facebook ○ uses Netty in Nifty - Thrift service ● Google ● Square ● Instagram ● Netflix
  • 16. OSS project using Netty ● Infinispan ● HornetQ ● Vert.x ● Apache Cassandra ● ElasticSearch
  • 17. Cassandra - More nodes, worst the performance
  • 18. Cassandra - Streaming data between nodes - Before
  • 19. Cassandra - Streaming data between nodes
  • 20. Cassandra - Streaming data between nodes - Before
  • 21. Cassandra - Streaming data between nodes - Before
  • 22. Cassandra - Streaming data between nodes - Before
  • 23. Cassandra - Streaming data between nodes - Now
  • 24. Cassandra - Streaming data between nodes - Now
  • 25. Startups using Netty ● Firebase ● Urban Airship
  • 26. Non-Blocking and asynchronous ● Initialize something now ● Using Threads Efficiently ● Scalability ● More efficient (doing more with less resources) ● concurrency
  • 27. Core components ● EventLoop ● Channel ● Callback ● Future ● Event Handler
  • 28. Netty - High level arch
  • 30. Echo Server Example Eventloop impl in use. There are others...
  • 31. Echo Server Example Utility that helps glue all pieces
  • 32. Echo Server Example Transport type defined for the channel
  • 33. Echo Server Example Setting handler on the pipeline chain
  • 34. Echo Server Example Bind the server and channel and wait this process complete
  • 35. Echo Server Example Block the current thread and wait until the channel is closed
  • 36. Echo Client - Example
  • 37. Echo Client - Example
  • 38. What is EventLoop? How it works? ● Threading model ● Control flow ● Dispatching events to ChannelHandlers
  • 39. EventLoop -Task Scheduling - run later scheduling task to run after 10 seconds
  • 40. EventLoop -Task Scheduling - periodically scheduling task to run every 10 seconds staring in 10 seconds
  • 41. What is EventLoop group? ● Allocate EventLoop for a Channel ● Uses round-robin to distribute load ● An application needs a least 1 EventLoopGroup
  • 42. Channel ● Socket ● Receive events ● Transport layer ● Notify Channel Handlers
  • 43. ChannelHandler ● Decoupled business from networking ● Implements the logic ● React to event notification ● ChannelInboundHandlerAdapter ○ channelRead() ○ channelReadComplete() ○ exceptionCaught() ● ChannelHandler are invoke for different events ● Hook lifecycle
  • 44. ChannelPipeline ● chain of ChannelHandler ● propagation flow ● order to execute channel handlers ● ChannelHandler is installed as follow: ○ a Channelnitializaer is registered to server bootstrap ○ when Channelnitializaer.init() is called it install the channels handlers in the pipeline
  • 45. Bootstraper for clients (Bootstrap) ● establish connection ● connect to remote peer ● requires only one EventLoopGroup for servers (ServerBootstrap) ● listening to income connections ● requires two EventLoopGroup: ○ one for ServerChannel ○ others to registered all channel that you want
  • 46. Bytebuf ● Byte container ● Alternative for NIO ByteBuffer ● Used to data
  • 47. Codecs ● Transforms streams of byte from one format to another Encoder Decoder
  • 48. Codec Example - Bootstrap Creating a ServerBootstrap and registered EventLoopGroup
  • 49. Codec Example - Bootstrap Registered Initializer to configure Pipeline
  • 50. Codec Example Registered codecs and aggregator on ChannelPipeline
  • 51. Codec Example - Handler part 1 Use decoder to extract parameters
  • 52. Codec Example - Handler part 1 Call service to handle business rules
  • 53. Codec Example - Handler part 2
  • 54. Solution based Netty - ServiceTalk https://github.com/diegopacheco/java-pocs/tree/master/pocs/servicetalk-fun
  • 55. Solution based Netty - ServiceTalk ● gRPC ● HTTP/2 ● Long-polling ● Smart Client ○ Client side load balancing ○ retry ● Modularization ○ use just you need
  • 56. Solution based Netty - Armeria https://github.com/diegopacheco/java-pocs/tree/master/pocs/armerica-fun/src/main/java
  • 57. Solution based Netty - Armeria ● HTTP/2 ● Integration with gRPC and Thrift ● Metrics ● Circuit breaker ● Client-side health-check, retries and client side load balancing ● Distributed Tracing with Zipkin ● Service discovery (DNS and Zookeeper) ● Built on top of Reactive Streams and Java 8 CompletableFuture
  • 58. Solution based Netty - Reactor Netty https://github.com/diegopacheco/java-pocs/tree/master/pocs/reactor-netty-simple
  • 59. Solution based Netty - Reactor Netty ● Support reactive streams specification ● HTTP, UDP and TCP ● Schedulers ● Parallel Flux
  • 60. Performance/Scalability > Developer Experience ● Number of lines of code is not a problem ● IFs (if not shells) is not a problem ● You don't deal with this code everyday ● There are books and materials on the web (stack overflow, etc...) ● Less lines of code does not means is better ● Spring might be “feeling” better but has worst performances and more deps ● Developers should care more about the business ○ User Experience -> slow server ○ Cost Reduction -> doing more with less(less cpu and memory used - more toughtput) ○ Reliability -> netty is battle tested by Silicon valley biggest IT companies in the world.
  • 62. Exercise 2 ● Change the code made on exercise 1, this time using Netty as a a server implementation and client. ● Use this template in order to get started.
  • 63. Exercise 3 ● For this exercise we are gonna use same problem as described on exercise 2, but this time using an http interface rather than exposing an TCP socket. ● Server should be called like this: localhost:8080/training/netty/sum?num1=1&num2=4 ● Use this template in order to get started.
  • 64. Exercise 4 ● Do the same implementation of exercise 3 using ServiceTalk with JaxRS ● Use this template in order to get started.