SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Netty @ Apple
Massive Scale Deployment / Connectivity
This is not a contribution
InfoQ.com: News & Community Site
• 750,000 unique visitors/month
• Published in 4 languages (English, Chinese, Japanese and Brazilian
Portuguese)
• Post content from our QCon conferences
• News 15-20 / week
• Articles 3-4 / week
• Presentations (videos) 12-15 / week
• Interviews 2-3 / week
• Books 1 / month
Watch the video with slide
synchronization on InfoQ.com!
http://www.infoq.com/presentations
/apple-netty
Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
- practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
Presented at QCon San Francisco
www.qconsf.com
Norman Maurer
Senior Software Engineer @ Apple
Core Developer of Netty
Formerly worked @ Red Hat as Netty
Project Lead (internal Red Hat)
Author of Netty in Action (Published by
Manning)
Apache Software Foundation
Eclipse Foundation
This is not a contribution
Massive Scale
This is not a contribution
What does“Massive Scale”mean…
Massive Scale
Instances of Netty based Services in Production: 400,000+
Data / Day: 10s of PetaBytes
Requests / Second: 10s of Millions
Versions: 3.x (migrating to 4.x), 4.x
This is not a contribution
Part of the OSS Community
Contributing back to the Community
250+ commits from Apple Engineers in
1 year
This is not a contribution
Services
This is not a contribution
Using an Apple Service?
Chances are good Netty is involved somehow.
Areas of importance
This is not a contribution
Native Transport
TCP / UDP / Domain Sockets
PooledByteBufAllocator
OpenSslEngine
ChannelPool
Build-in codecs + custom codecs for different
protocols
With Scale comes Pain
This is not a contribution
JDK NIO
… some pains
This is not a contribution
Some of the pains
Selector.selectedKeys() produces too much garbage
NIO implementation uses synchronized everywhere!
Not optimized for typical deployment environment
(support common denominator of all environments)
Internal copying of heap buffers to direct buffers
This is not a contribution
JNI to the rescue
Optimized transport for Linux only
Supports Linux specific features
Directly operate on pointers for buffers
Synchronization optimized for Netty’s Thread-Model
This is not a contribution
J
N
I C/C++Java
Native Transport
epoll based high-performance transport
Less GC pressure due less Objects
Advanced features
SO_REUSEPORT
TCP_CORK,
TCP_NOTSENT_LOWAT
TCP_FASTOPEN
TCP_INFO
LT and ET
Unix Domain Sockets
Bootstrap	bootstrap	=	new	Bootstrap().group(	
								new	NioEventLoopGroup());	
bootstrap.channel(NioSocketChannel.class);	
Bootstrap	bootstrap	=	new	Bootstrap().group(	
								new	EpollEventLoopGroup());	
bootstrap.channel(EpollSocketChannel.class);
NIO Transport
Native Transport
This is not a contribution
Buffers
This is not a contribution
JDK ByteBuffer
Direct buffers are free’ed by GC
Not run frequently enough
May trigger GC
Hard to use due not separate indices
This is not a contribution
Buffers
Direct buffers == expensive
Heap buffers == cheap (but not for free*)
Fragmentation
This is not a contribution
*byte[] needs to be zero-out by the JVM!
Buffers - Memory fragmentation
Waste memory
May trigger GC due lack of coalesced free memory
This is not a contribution
Can’t insert int here as we need 4 continuous slots
Allocation times
This is not a contribution
NanoSeconds
0
1500
3000
4500
6000
Bytes
0 256 1024 4096 16384 65536
Unpooled Heap Pooled Heap Unpooled Direct Pooled Direct
PooledByteBufAllocator
Based on jemalloc paper (3.x)
ThreadLocal caches for lock-free
allocation in most cases #808
Synchronize per Arena that holds the
different chunks of memory
Different size classes
Reduce fragmentation
ThreadLocal
Cache 2
Arena 1 Arena 2 Arena 3
Size-classes Size-classes Size-classes
Thread 2
ThreadLocal
Cache 1
Thread 1
Able to enable / disable ThreadLocal
caches
Fine tuning of Caches can make a big
difference
Best effect if number of allocating
Threads are low.
Using ThreadLocal + MPSC queue #3833
ThreadLocal caches
This is not a contribution
Title
ContentionCount
0
1000
2000
3000
4000
Cache No Cache
JDK SSL Performance
…. it’s slow!
This is not a contribution
Why handle SSL directly?
Secure communication between services
Used for HTTP2 / SPDY negotiation
Advanced verification of Certificates
This is not a contribution
Unfortunately JDK's SSLEngine implementation is very slow :(
JDK SSLEngine implementation
HTTPS Benchmark
Running 2m test @ https://xxx:8080/plaintext
16 threads and 256 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 553.70ms 81.74ms 1.43s 80.22%
Req/Sec 7.41k 595.69 8.90k 63.93%
14026376 requests in 2.00m, 1.89GB read
Socket errors: connect 0, read 0, write 0, timeout 114
Requests/sec: 116883.21
Transfer/sec: 16.16MB
HTTP/1.1 200 OK
Content-Length: 15
Content-Type: text/plain; charset=UTF-8
Server: Netty.io
Date: Wed, 17 Apr 2013 12:00:00 GMT
Hello, World!
Response Result
./wrk -H 'Host: localhost' -H 'Accept: text/html,application/xhtml+xml,application/
xml;q=0.9,*/*;q=0.8' -H 'Connection: keep-alive' -d 120 -c 256 -t 16 -s scripts/
pipeline-many.lua https://xxx:8080/plaintext
Benchmark
This is not a contribution
This is not a contribution
HTTPS Benchmark
JDK SSLEngine implementation
Unable to fully utilize all cores
SSLEngine API limiting in some cases
SSLEngine.unwrap(…) can only take
one ByteBuffer as src
JNI based SSLEngine
… to the rescue
This is not a contribution
J
N
I C/C++Java
…one to rule them all
JNI based SSLEngine
Supports OpenSSL, LibreSSL and BoringSSL
Based on Apache Tomcat Native
Was part of Finagle but contributed to Netty in 2014
This is not a contribution
OpenSSL SSLEngine implementation
HTTPS Benchmark
Running 2m test @ https://xxx:8080/plaintext
16 threads and 256 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 131.16ms 28.24ms 857.07ms 96.89%
Req/Sec 31.74k 3.14k 35.75k 84.41%
60127756 requests in 2.00m, 8.12GB read
Socket errors: connect 0, read 0, write 0, timeout 52
Requests/sec: 501120.56
Transfer/sec: 69.30MB
HTTP/1.1 200 OK
Content-Length: 15
Content-Type: text/plain; charset=UTF-8
Server: Netty.io
Date: Wed, 17 Apr 2013 12:00:00 GMT
Hello, World!
Response Result
./wrk -H 'Host: localhost' -H 'Accept: text/html,application/xhtml+xml,application/
xml;q=0.9,*/*;q=0.8' -H 'Connection: keep-alive' -d 120 -c 256 -t 16 -s scripts/
pipeline-many.lua https://xxx:8080/plaintext
Benchmark
This is not a contribution
This is not a contribution
OpenSSL SSLEngine implementation
HTTPS Benchmark
All cores utilized!
Makes use of native code provided by
OpenSSL
Low object creation
Drop in replacement*
*supported on Linux, OSX and Windows
Optimizations made
Added client support: #7, #11, #3270, #3277, #3279
Added support for Auth: #10, #3276
GC-Pressure caused by heavy object creation: #8, #3280, #3648
Too many JNI calls: #3289
Proper SSLSession implementation: #9, #16, #17, #20, #3283, #3286,
#3288
ALPN support #3481
Only do priming read if there is no space in dsts buffers #3958
This is not a contribution
Thread Model
Easier to reason about
Less worry about concurrency
Easier to maintain
Clear execution order
Thread
Event
Loop
Channel Channel Channel
I/O I/O I/O
This is not a contribution
Thread Model
Thread
Event
Loop
Channel Channel
I/O I/O
public	class	ProxyHandler	extends	ChannelInboundHandlerAdapter	{	
		@Override	
		public	void	channelActive(ChannelHandlerContext	ctx)	{		
				final	Channel	inboundChannel	=	ctx.channel();	
				Bootstrap	b	=	new	Bootstrap();	
				b.group(inboundChannel.eventLoop());		
ctx.channel().config().setAutoRead(false);	
				ChannelFuture	f	=	b.connect(remoteHost,	remotePort);	
				f.addListener(f	->	{	
							if	(f.isSuccess())	{	
											ctx.channel().config().setAutoRead(true);	
							}	else	{	...}	
				});	
		}	
}
This is not a contribution
Proxy
Slow peers due slow connection
Risk of writing too fast
Backoff writing and reading This is not a contribution
SND
RCV
TCP
SND
RCV
TCP
Network
Fast
Slow ?
Slow ?
Slow ?
Application Slow ? Application
Fast
OOME
Backpressure
Peer1 Peer2
Memory Usage
Handling a lot of concurrent connections
Need to safe memory to reduce heap sizes
Use Atomic*FieldUpdater
Lazy init fields
This is not a contribution
Connection Pooling
Having an extensible connection pool is important #3607
flexible / extensible implementation
This is not a contribution
We are hiring!
http://www.apple.com/jobs/us/
This is not a contribution
Thanks
Watch the video with slide synchronization on
InfoQ.com!
http://www.infoq.com/presentations/apple-
netty

Weitere ähnliche Inhalte

Was ist angesagt?

Apache Tomcat 8 Application Server
Apache Tomcat 8 Application ServerApache Tomcat 8 Application Server
Apache Tomcat 8 Application Server
mohamedmoharam
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to Redis
Dvir Volk
 

Was ist angesagt? (20)

Apache Server Tutorial
Apache Server TutorialApache Server Tutorial
Apache Server Tutorial
 
Docker swarm introduction
Docker swarm introductionDocker swarm introduction
Docker swarm introduction
 
Kyma: Extending Business systems with Kubernetes, Istio and <fill the blank>.
Kyma: Extending Business systems with Kubernetes, Istio and <fill the blank>.Kyma: Extending Business systems with Kubernetes, Istio and <fill the blank>.
Kyma: Extending Business systems with Kubernetes, Istio and <fill the blank>.
 
Prerequisite knowledge for shared memory concurrency
Prerequisite knowledge for shared memory concurrencyPrerequisite knowledge for shared memory concurrency
Prerequisite knowledge for shared memory concurrency
 
Stability Patterns for Microservices
Stability Patterns for MicroservicesStability Patterns for Microservices
Stability Patterns for Microservices
 
Apache Tomcat 8 Application Server
Apache Tomcat 8 Application ServerApache Tomcat 8 Application Server
Apache Tomcat 8 Application Server
 
Introducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes OperatorIntroducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes Operator
 
Driving containerd operations with gRPC
Driving containerd operations with gRPCDriving containerd operations with gRPC
Driving containerd operations with gRPC
 
Linux Internals - Kernel/Core
Linux Internals - Kernel/CoreLinux Internals - Kernel/Core
Linux Internals - Kernel/Core
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 
Docker, LinuX Container
Docker, LinuX ContainerDocker, LinuX Container
Docker, LinuX Container
 
Integrating Splunk into your Spring Applications
Integrating Splunk into your Spring ApplicationsIntegrating Splunk into your Spring Applications
Integrating Splunk into your Spring Applications
 
Continuous Go Profiling & Observability
Continuous Go Profiling & ObservabilityContinuous Go Profiling & Observability
Continuous Go Profiling & Observability
 
LuceneRDD for (Geospatial) Search and Entity Linkage
LuceneRDD for (Geospatial) Search and Entity LinkageLuceneRDD for (Geospatial) Search and Entity Linkage
LuceneRDD for (Geospatial) Search and Entity Linkage
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to Redis
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
 
Introduction to Apache ZooKeeper
Introduction to Apache ZooKeeperIntroduction to Apache ZooKeeper
Introduction to Apache ZooKeeper
 
Scaling your Data Pipelines with Apache Spark on Kubernetes
Scaling your Data Pipelines with Apache Spark on KubernetesScaling your Data Pipelines with Apache Spark on Kubernetes
Scaling your Data Pipelines with Apache Spark on Kubernetes
 
RxNetty vs Tomcat Performance Results
RxNetty vs Tomcat Performance ResultsRxNetty vs Tomcat Performance Results
RxNetty vs Tomcat Performance Results
 

Andere mochten auch

Introduction of netty
Introduction of nettyIntroduction of netty
Introduction of netty
Bing Luo
 
Zero-Copy Event-Driven Servers with Netty
Zero-Copy Event-Driven Servers with NettyZero-Copy Event-Driven Servers with Netty
Zero-Copy Event-Driven Servers with Netty
Daniel Bimschas
 

Andere mochten auch (14)

Netty Notes Part 3 - Channel Pipeline and EventLoops
Netty Notes Part 3 - Channel Pipeline and EventLoopsNetty Notes Part 3 - Channel Pipeline and EventLoops
Netty Notes Part 3 - Channel Pipeline and EventLoops
 
Notes on Netty baics
Notes on Netty baicsNotes on Netty baics
Notes on Netty baics
 
Vertx – reactive toolkit
Vertx – reactive toolkitVertx – reactive toolkit
Vertx – reactive toolkit
 
Devoxx France 2014 - REST facile vert.x et Groovy
Devoxx France 2014 - REST facile vert.x et GroovyDevoxx France 2014 - REST facile vert.x et Groovy
Devoxx France 2014 - REST facile vert.x et Groovy
 
Vertx for worlddomination
Vertx for worlddominationVertx for worlddomination
Vertx for worlddomination
 
Bbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic searchBbl microservices avec vert.x cdi elastic search
Bbl microservices avec vert.x cdi elastic search
 
Introduction of netty
Introduction of nettyIntroduction of netty
Introduction of netty
 
Vert.x – The problem of real-time data binding
Vert.x – The problem of real-time data bindingVert.x – The problem of real-time data binding
Vert.x – The problem of real-time data binding
 
Présidentielle 2017 : l’état d’esprit des Français à 4 semaines de l’élection
Présidentielle 2017 : l’état d’esprit des Français à 4 semaines de l’électionPrésidentielle 2017 : l’état d’esprit des Français à 4 semaines de l’élection
Présidentielle 2017 : l’état d’esprit des Français à 4 semaines de l’élection
 
Zero-Copy Event-Driven Servers with Netty
Zero-Copy Event-Driven Servers with NettyZero-Copy Event-Driven Servers with Netty
Zero-Copy Event-Driven Servers with Netty
 
Netty Notes Part 2 - Transports and Buffers
Netty Notes Part 2 - Transports and BuffersNetty Notes Part 2 - Transports and Buffers
Netty Notes Part 2 - Transports and Buffers
 
The Play Framework at LinkedIn
The Play Framework at LinkedInThe Play Framework at LinkedIn
The Play Framework at LinkedIn
 
Netty - a pragmatic introduction
Netty - a pragmatic introductionNetty - a pragmatic introduction
Netty - a pragmatic introduction
 
nodejs vs vertx
nodejs vs vertxnodejs vs vertx
nodejs vs vertx
 

Ähnlich wie Netty @Apple: Large Scale Deployment/Connectivity

Mobicents Summit 2012 - Jean Deruelle - Mobicents SIP Servlets
Mobicents Summit 2012 - Jean Deruelle - Mobicents SIP ServletsMobicents Summit 2012 - Jean Deruelle - Mobicents SIP Servlets
Mobicents Summit 2012 - Jean Deruelle - Mobicents SIP Servlets
telestax
 
ClickOS_EE80777777777777777777777777777.pptx
ClickOS_EE80777777777777777777777777777.pptxClickOS_EE80777777777777777777777777777.pptx
ClickOS_EE80777777777777777777777777777.pptx
BiHongPhc
 

Ähnlich wie Netty @Apple: Large Scale Deployment/Connectivity (20)

netty_qcon_v4
netty_qcon_v4netty_qcon_v4
netty_qcon_v4
 
Nodejs
NodejsNodejs
Nodejs
 
Varnish TLS
Varnish TLSVarnish TLS
Varnish TLS
 
Mobicents Summit 2012 - Jean Deruelle - Mobicents SIP Servlets
Mobicents Summit 2012 - Jean Deruelle - Mobicents SIP ServletsMobicents Summit 2012 - Jean Deruelle - Mobicents SIP Servlets
Mobicents Summit 2012 - Jean Deruelle - Mobicents SIP Servlets
 
Monkey Server
Monkey ServerMonkey Server
Monkey Server
 
FreeSWITCH as a Microservice
FreeSWITCH as a MicroserviceFreeSWITCH as a Microservice
FreeSWITCH as a Microservice
 
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
Exploring the Final Frontier of Data Center Orchestration: Network Elements -...
 
Nodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredevNodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredev
 
ClickOS_EE80777777777777777777777777777.pptx
ClickOS_EE80777777777777777777777777777.pptxClickOS_EE80777777777777777777777777777.pptx
ClickOS_EE80777777777777777777777777777.pptx
 
Node.js meetup at Palo Alto Networks Tel Aviv
Node.js meetup at Palo Alto Networks Tel AvivNode.js meetup at Palo Alto Networks Tel Aviv
Node.js meetup at Palo Alto Networks Tel Aviv
 
Node.js: A Guided Tour
Node.js: A Guided TourNode.js: A Guided Tour
Node.js: A Guided Tour
 
Lunar Way and the Cloud Native "stack"
Lunar Way and the Cloud Native "stack"Lunar Way and the Cloud Native "stack"
Lunar Way and the Cloud Native "stack"
 
Basic IT 2 (General IT Knowledge-2)
Basic IT 2 (General IT Knowledge-2)Basic IT 2 (General IT Knowledge-2)
Basic IT 2 (General IT Knowledge-2)
 
Real-Time with Flowdock
Real-Time with FlowdockReal-Time with Flowdock
Real-Time with Flowdock
 
Apache hadoop 3.x state of the union and upgrade guidance - Strata 2019 NY
Apache hadoop 3.x state of the union and upgrade guidance - Strata 2019 NYApache hadoop 3.x state of the union and upgrade guidance - Strata 2019 NY
Apache hadoop 3.x state of the union and upgrade guidance - Strata 2019 NY
 
Implementing data and databases on K8s within the Dutch government
Implementing data and databases on K8s within the Dutch governmentImplementing data and databases on K8s within the Dutch government
Implementing data and databases on K8s within the Dutch government
 
USENIX LISA15: How TubeMogul Handles over One Trillion HTTP Requests a Month
USENIX LISA15: How TubeMogul Handles over One Trillion HTTP Requests a MonthUSENIX LISA15: How TubeMogul Handles over One Trillion HTTP Requests a Month
USENIX LISA15: How TubeMogul Handles over One Trillion HTTP Requests a Month
 
Ceph Day SF 2015 - Deploying flash storage for Ceph without compromising perf...
Ceph Day SF 2015 - Deploying flash storage for Ceph without compromising perf...Ceph Day SF 2015 - Deploying flash storage for Ceph without compromising perf...
Ceph Day SF 2015 - Deploying flash storage for Ceph without compromising perf...
 
Beginners Node.js
Beginners Node.jsBeginners Node.js
Beginners Node.js
 
Scaling Push Messaging for Millions of Devices @Netflix
Scaling Push Messaging for Millions of Devices @NetflixScaling Push Messaging for Millions of Devices @Netflix
Scaling Push Messaging for Millions of Devices @Netflix
 

Mehr von C4Media

Mehr von C4Media (20)

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live Video
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy Mobile
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No Keeper
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like Owners
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate Guide
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CD
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine Learning
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at Speed
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep Systems
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.js
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly Compiler
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix Scale
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's Edge
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home Everywhere
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing For
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data Engineering
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
 

Kürzlich hochgeladen

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Kürzlich hochgeladen (20)

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 

Netty @Apple: Large Scale Deployment/Connectivity

  • 1. Netty @ Apple Massive Scale Deployment / Connectivity This is not a contribution
  • 2. InfoQ.com: News & Community Site • 750,000 unique visitors/month • Published in 4 languages (English, Chinese, Japanese and Brazilian Portuguese) • Post content from our QCon conferences • News 15-20 / week • Articles 3-4 / week • Presentations (videos) 12-15 / week • Interviews 2-3 / week • Books 1 / month Watch the video with slide synchronization on InfoQ.com! http://www.infoq.com/presentations /apple-netty
  • 3. Purpose of QCon - to empower software development by facilitating the spread of knowledge and innovation Strategy - practitioner-driven conference designed for YOU: influencers of change and innovation in your teams - speakers and topics driving the evolution and innovation - connecting and catalyzing the influencers and innovators Highlights - attended by more than 12,000 delegates since 2007 - held in 9 cities worldwide Presented at QCon San Francisco www.qconsf.com
  • 4. Norman Maurer Senior Software Engineer @ Apple Core Developer of Netty Formerly worked @ Red Hat as Netty Project Lead (internal Red Hat) Author of Netty in Action (Published by Manning) Apache Software Foundation Eclipse Foundation This is not a contribution
  • 5. Massive Scale This is not a contribution
  • 6. What does“Massive Scale”mean… Massive Scale Instances of Netty based Services in Production: 400,000+ Data / Day: 10s of PetaBytes Requests / Second: 10s of Millions Versions: 3.x (migrating to 4.x), 4.x This is not a contribution
  • 7. Part of the OSS Community Contributing back to the Community 250+ commits from Apple Engineers in 1 year This is not a contribution
  • 8. Services This is not a contribution Using an Apple Service? Chances are good Netty is involved somehow.
  • 9. Areas of importance This is not a contribution Native Transport TCP / UDP / Domain Sockets PooledByteBufAllocator OpenSslEngine ChannelPool Build-in codecs + custom codecs for different protocols
  • 10. With Scale comes Pain This is not a contribution
  • 11. JDK NIO … some pains This is not a contribution
  • 12. Some of the pains Selector.selectedKeys() produces too much garbage NIO implementation uses synchronized everywhere! Not optimized for typical deployment environment (support common denominator of all environments) Internal copying of heap buffers to direct buffers This is not a contribution
  • 13. JNI to the rescue Optimized transport for Linux only Supports Linux specific features Directly operate on pointers for buffers Synchronization optimized for Netty’s Thread-Model This is not a contribution J N I C/C++Java
  • 14. Native Transport epoll based high-performance transport Less GC pressure due less Objects Advanced features SO_REUSEPORT TCP_CORK, TCP_NOTSENT_LOWAT TCP_FASTOPEN TCP_INFO LT and ET Unix Domain Sockets Bootstrap bootstrap = new Bootstrap().group( new NioEventLoopGroup()); bootstrap.channel(NioSocketChannel.class); Bootstrap bootstrap = new Bootstrap().group( new EpollEventLoopGroup()); bootstrap.channel(EpollSocketChannel.class); NIO Transport Native Transport This is not a contribution
  • 15. Buffers This is not a contribution
  • 16. JDK ByteBuffer Direct buffers are free’ed by GC Not run frequently enough May trigger GC Hard to use due not separate indices This is not a contribution
  • 17. Buffers Direct buffers == expensive Heap buffers == cheap (but not for free*) Fragmentation This is not a contribution *byte[] needs to be zero-out by the JVM!
  • 18. Buffers - Memory fragmentation Waste memory May trigger GC due lack of coalesced free memory This is not a contribution Can’t insert int here as we need 4 continuous slots
  • 19. Allocation times This is not a contribution NanoSeconds 0 1500 3000 4500 6000 Bytes 0 256 1024 4096 16384 65536 Unpooled Heap Pooled Heap Unpooled Direct Pooled Direct
  • 20. PooledByteBufAllocator Based on jemalloc paper (3.x) ThreadLocal caches for lock-free allocation in most cases #808 Synchronize per Arena that holds the different chunks of memory Different size classes Reduce fragmentation ThreadLocal Cache 2 Arena 1 Arena 2 Arena 3 Size-classes Size-classes Size-classes Thread 2 ThreadLocal Cache 1 Thread 1
  • 21. Able to enable / disable ThreadLocal caches Fine tuning of Caches can make a big difference Best effect if number of allocating Threads are low. Using ThreadLocal + MPSC queue #3833 ThreadLocal caches This is not a contribution Title ContentionCount 0 1000 2000 3000 4000 Cache No Cache
  • 22. JDK SSL Performance …. it’s slow! This is not a contribution
  • 23. Why handle SSL directly? Secure communication between services Used for HTTP2 / SPDY negotiation Advanced verification of Certificates This is not a contribution Unfortunately JDK's SSLEngine implementation is very slow :(
  • 24. JDK SSLEngine implementation HTTPS Benchmark Running 2m test @ https://xxx:8080/plaintext 16 threads and 256 connections Thread Stats Avg Stdev Max +/- Stdev Latency 553.70ms 81.74ms 1.43s 80.22% Req/Sec 7.41k 595.69 8.90k 63.93% 14026376 requests in 2.00m, 1.89GB read Socket errors: connect 0, read 0, write 0, timeout 114 Requests/sec: 116883.21 Transfer/sec: 16.16MB HTTP/1.1 200 OK Content-Length: 15 Content-Type: text/plain; charset=UTF-8 Server: Netty.io Date: Wed, 17 Apr 2013 12:00:00 GMT Hello, World! Response Result ./wrk -H 'Host: localhost' -H 'Accept: text/html,application/xhtml+xml,application/ xml;q=0.9,*/*;q=0.8' -H 'Connection: keep-alive' -d 120 -c 256 -t 16 -s scripts/ pipeline-many.lua https://xxx:8080/plaintext Benchmark This is not a contribution
  • 25. This is not a contribution HTTPS Benchmark JDK SSLEngine implementation Unable to fully utilize all cores SSLEngine API limiting in some cases SSLEngine.unwrap(…) can only take one ByteBuffer as src
  • 26. JNI based SSLEngine … to the rescue This is not a contribution J N I C/C++Java
  • 27. …one to rule them all JNI based SSLEngine Supports OpenSSL, LibreSSL and BoringSSL Based on Apache Tomcat Native Was part of Finagle but contributed to Netty in 2014 This is not a contribution
  • 28. OpenSSL SSLEngine implementation HTTPS Benchmark Running 2m test @ https://xxx:8080/plaintext 16 threads and 256 connections Thread Stats Avg Stdev Max +/- Stdev Latency 131.16ms 28.24ms 857.07ms 96.89% Req/Sec 31.74k 3.14k 35.75k 84.41% 60127756 requests in 2.00m, 8.12GB read Socket errors: connect 0, read 0, write 0, timeout 52 Requests/sec: 501120.56 Transfer/sec: 69.30MB HTTP/1.1 200 OK Content-Length: 15 Content-Type: text/plain; charset=UTF-8 Server: Netty.io Date: Wed, 17 Apr 2013 12:00:00 GMT Hello, World! Response Result ./wrk -H 'Host: localhost' -H 'Accept: text/html,application/xhtml+xml,application/ xml;q=0.9,*/*;q=0.8' -H 'Connection: keep-alive' -d 120 -c 256 -t 16 -s scripts/ pipeline-many.lua https://xxx:8080/plaintext Benchmark This is not a contribution
  • 29. This is not a contribution OpenSSL SSLEngine implementation HTTPS Benchmark All cores utilized! Makes use of native code provided by OpenSSL Low object creation Drop in replacement* *supported on Linux, OSX and Windows
  • 30. Optimizations made Added client support: #7, #11, #3270, #3277, #3279 Added support for Auth: #10, #3276 GC-Pressure caused by heavy object creation: #8, #3280, #3648 Too many JNI calls: #3289 Proper SSLSession implementation: #9, #16, #17, #20, #3283, #3286, #3288 ALPN support #3481 Only do priming read if there is no space in dsts buffers #3958 This is not a contribution
  • 31. Thread Model Easier to reason about Less worry about concurrency Easier to maintain Clear execution order Thread Event Loop Channel Channel Channel I/O I/O I/O This is not a contribution
  • 32. Thread Model Thread Event Loop Channel Channel I/O I/O public class ProxyHandler extends ChannelInboundHandlerAdapter { @Override public void channelActive(ChannelHandlerContext ctx) { final Channel inboundChannel = ctx.channel(); Bootstrap b = new Bootstrap(); b.group(inboundChannel.eventLoop()); ctx.channel().config().setAutoRead(false); ChannelFuture f = b.connect(remoteHost, remotePort); f.addListener(f -> { if (f.isSuccess()) { ctx.channel().config().setAutoRead(true); } else { ...} }); } } This is not a contribution Proxy
  • 33. Slow peers due slow connection Risk of writing too fast Backoff writing and reading This is not a contribution SND RCV TCP SND RCV TCP Network Fast Slow ? Slow ? Slow ? Application Slow ? Application Fast OOME Backpressure Peer1 Peer2
  • 34. Memory Usage Handling a lot of concurrent connections Need to safe memory to reduce heap sizes Use Atomic*FieldUpdater Lazy init fields This is not a contribution
  • 35. Connection Pooling Having an extensible connection pool is important #3607 flexible / extensible implementation This is not a contribution
  • 37. Watch the video with slide synchronization on InfoQ.com! http://www.infoq.com/presentations/apple- netty