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?

Deploying Confluent Platform for Production
Deploying Confluent Platform for ProductionDeploying Confluent Platform for Production
Deploying Confluent Platform for Productionconfluent
 
Understanding DPDK
Understanding DPDKUnderstanding DPDK
Understanding DPDKDenys Haryachyy
 
Running Kafka as a Native Binary Using GraalVM with Ozan GĂŒnalp
Running Kafka as a Native Binary Using GraalVM with Ozan GĂŒnalpRunning Kafka as a Native Binary Using GraalVM with Ozan GĂŒnalp
Running Kafka as a Native Binary Using GraalVM with Ozan GĂŒnalpHostedbyConfluent
 
Ceilometer to Gnocchi
Ceilometer to GnocchiCeilometer to Gnocchi
Ceilometer to GnocchiGordon Chung
 
Netty ì„žëŻžë‚˜
Netty ì„žëŻžë‚˜Netty ì„žëŻžë‚˜
Netty ì„žëŻžë‚˜Jang Hoon
 
(BDT303) Running Spark and Presto on the Netflix Big Data Platform
(BDT303) Running Spark and Presto on the Netflix Big Data Platform(BDT303) Running Spark and Presto on the Netflix Big Data Platform
(BDT303) Running Spark and Presto on the Netflix Big Data PlatformAmazon Web Services
 
ВĐČĐ”ĐŽĐ”ĐœĐžĐ” ĐČ maven
ВĐČĐ”ĐŽĐ”ĐœĐžĐ” ĐČ mavenВĐČĐ”ĐŽĐ”ĐœĐžĐ” ĐČ maven
ВĐČĐ”ĐŽĐ”ĐœĐžĐ” ĐČ mavenDmitry Zinushin
 
Writing the Container Network Interface(CNI) plugin in golang
Writing the Container Network Interface(CNI) plugin in golangWriting the Container Network Interface(CNI) plugin in golang
Writing the Container Network Interface(CNI) plugin in golangHungWei Chiu
 
Networking in Java with NIO and Netty
Networking in Java with NIO and NettyNetworking in Java with NIO and Netty
Networking in Java with NIO and NettyConstantine Slisenka
 
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 EventLoopsRick Hightower
 
Vert.x for Microservices Architecture
Vert.x for Microservices ArchitectureVert.x for Microservices Architecture
Vert.x for Microservices ArchitectureIdan Fridman
 
Kubernetes Networking - Sreenivas Makam - Google - CC18
Kubernetes Networking - Sreenivas Makam - Google - CC18Kubernetes Networking - Sreenivas Makam - Google - CC18
Kubernetes Networking - Sreenivas Makam - Google - CC18CodeOps Technologies LLP
 
Building high performance microservices in finance with Apache Thrift
Building high performance microservices in finance with Apache ThriftBuilding high performance microservices in finance with Apache Thrift
Building high performance microservices in finance with Apache ThriftRX-M Enterprises LLC
 
Mind the App: How to Monitor Your Kafka Streams Applications | Bruno Cadonna,...
Mind the App: How to Monitor Your Kafka Streams Applications | Bruno Cadonna,...Mind the App: How to Monitor Your Kafka Streams Applications | Bruno Cadonna,...
Mind the App: How to Monitor Your Kafka Streams Applications | Bruno Cadonna,...HostedbyConfluent
 
ACI MultiPod Config Guide
ACI MultiPod Config GuideACI MultiPod Config Guide
ACI MultiPod Config GuideWoo Hyung Choi
 
Node.js API 서ëȄ 성늄 개선Ʞ
Node.js API 서ëȄ 성늄 개선ꞰNode.js API 서ëȄ 성늄 개선Ʞ
Node.js API 서ëȄ 성늄 개선ꞰJeongHun Byeon
 
Introduction to WebRTC
Introduction to WebRTCIntroduction to WebRTC
Introduction to WebRTCArt Matsak
 
VPC Implementation In OpenStack Heat
VPC Implementation In OpenStack HeatVPC Implementation In OpenStack Heat
VPC Implementation In OpenStack HeatSaju Madhavan
 
KrakenD API Gateway
KrakenD API GatewayKrakenD API Gateway
KrakenD API GatewayAlbert Lombarte
 
rtpengine - Media Relaying and Beyond
rtpengine - Media Relaying and Beyondrtpengine - Media Relaying and Beyond
rtpengine - Media Relaying and BeyondAndreas Granig
 

Was ist angesagt? (20)

Deploying Confluent Platform for Production
Deploying Confluent Platform for ProductionDeploying Confluent Platform for Production
Deploying Confluent Platform for Production
 
Understanding DPDK
Understanding DPDKUnderstanding DPDK
Understanding DPDK
 
Running Kafka as a Native Binary Using GraalVM with Ozan GĂŒnalp
Running Kafka as a Native Binary Using GraalVM with Ozan GĂŒnalpRunning Kafka as a Native Binary Using GraalVM with Ozan GĂŒnalp
Running Kafka as a Native Binary Using GraalVM with Ozan GĂŒnalp
 
Ceilometer to Gnocchi
Ceilometer to GnocchiCeilometer to Gnocchi
Ceilometer to Gnocchi
 
Netty ì„žëŻžë‚˜
Netty ì„žëŻžë‚˜Netty ì„žëŻžë‚˜
Netty ì„žëŻžë‚˜
 
(BDT303) Running Spark and Presto on the Netflix Big Data Platform
(BDT303) Running Spark and Presto on the Netflix Big Data Platform(BDT303) Running Spark and Presto on the Netflix Big Data Platform
(BDT303) Running Spark and Presto on the Netflix Big Data Platform
 
ВĐČĐ”ĐŽĐ”ĐœĐžĐ” ĐČ maven
ВĐČĐ”ĐŽĐ”ĐœĐžĐ” ĐČ mavenВĐČĐ”ĐŽĐ”ĐœĐžĐ” ĐČ maven
ВĐČĐ”ĐŽĐ”ĐœĐžĐ” ĐČ maven
 
Writing the Container Network Interface(CNI) plugin in golang
Writing the Container Network Interface(CNI) plugin in golangWriting the Container Network Interface(CNI) plugin in golang
Writing the Container Network Interface(CNI) plugin in golang
 
Networking in Java with NIO and Netty
Networking in Java with NIO and NettyNetworking in Java with NIO and Netty
Networking in Java with NIO and Netty
 
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
 
Vert.x for Microservices Architecture
Vert.x for Microservices ArchitectureVert.x for Microservices Architecture
Vert.x for Microservices Architecture
 
Kubernetes Networking - Sreenivas Makam - Google - CC18
Kubernetes Networking - Sreenivas Makam - Google - CC18Kubernetes Networking - Sreenivas Makam - Google - CC18
Kubernetes Networking - Sreenivas Makam - Google - CC18
 
Building high performance microservices in finance with Apache Thrift
Building high performance microservices in finance with Apache ThriftBuilding high performance microservices in finance with Apache Thrift
Building high performance microservices in finance with Apache Thrift
 
Mind the App: How to Monitor Your Kafka Streams Applications | Bruno Cadonna,...
Mind the App: How to Monitor Your Kafka Streams Applications | Bruno Cadonna,...Mind the App: How to Monitor Your Kafka Streams Applications | Bruno Cadonna,...
Mind the App: How to Monitor Your Kafka Streams Applications | Bruno Cadonna,...
 
ACI MultiPod Config Guide
ACI MultiPod Config GuideACI MultiPod Config Guide
ACI MultiPod Config Guide
 
Node.js API 서ëȄ 성늄 개선Ʞ
Node.js API 서ëȄ 성늄 개선ꞰNode.js API 서ëȄ 성늄 개선Ʞ
Node.js API 서ëȄ 성늄 개선Ʞ
 
Introduction to WebRTC
Introduction to WebRTCIntroduction to WebRTC
Introduction to WebRTC
 
VPC Implementation In OpenStack Heat
VPC Implementation In OpenStack HeatVPC Implementation In OpenStack Heat
VPC Implementation In OpenStack Heat
 
KrakenD API Gateway
KrakenD API GatewayKrakenD API Gateway
KrakenD API Gateway
 
rtpengine - Media Relaying and Beyond
rtpengine - Media Relaying and Beyondrtpengine - Media Relaying and Beyond
rtpengine - Media Relaying and Beyond
 

Andere mochten auch

Notes on Netty baics
Notes on Netty baicsNotes on Netty baics
Notes on Netty baicsRick Hightower
 
Vertx – reactive toolkit
Vertx – reactive toolkitVertx – reactive toolkit
Vertx – reactive toolkitAvi Saidian
 
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 GroovyPublicis Sapient Engineering
 
Vertx for worlddomination
Vertx for worlddominationVertx for worlddomination
Vertx for worlddominationcodepitbull
 
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 searchIdriss Neumann
 
Introduction of netty
Introduction of nettyIntroduction of netty
Introduction of nettyBing Luo
 
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 bindingAlex Derkach
 
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’électionIpsos France
 
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 NettyDaniel Bimschas
 
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 BuffersRick Hightower
 
The Play Framework at LinkedIn
The Play Framework at LinkedInThe Play Framework at LinkedIn
The Play Framework at LinkedInYevgeniy Brikman
 
Netty - a pragmatic introduction
Netty - a pragmatic introductionNetty - a pragmatic introduction
Netty - a pragmatic introductionRaphael Stary
 

Andere mochten auch (13)

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 Servletstelestax
 
FreeSWITCH as a Microservice
FreeSWITCH as a MicroserviceFreeSWITCH as a Microservice
FreeSWITCH as a MicroserviceEvan McGee
 
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 -...Puppet
 
Nodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredevNodejs a-practical-introduction-oredev
Nodejs a-practical-introduction-oredevFelix Geisendörfer
 
ClickOS_EE80777777777777777777777777777.pptx
ClickOS_EE80777777777777777777777777777.pptxClickOS_EE80777777777777777777777777777.pptx
ClickOS_EE80777777777777777777777777777.pptxBiHongPhc
 
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 AvivRon Perlmuter
 
Node.js: A Guided Tour
Node.js: A Guided TourNode.js: A Guided Tour
Node.js: A Guided Tourcacois
 
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"Kasper Nissen
 
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)kholis_mjd
 
Real-Time with Flowdock
Real-Time with FlowdockReal-Time with Flowdock
Real-Time with FlowdockFlowdock
 
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 NYWangda Tan
 
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 governmentDoKC
 
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 MonthNicolas Brousse
 
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...Ceph Community
 
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 @NetflixC4Media
 

Ä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

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 VideoC4Media
 
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 MobileC4Media
 
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 2020C4Media
 
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 ApplicationsC4Media
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No KeeperC4Media
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like OwnersC4Media
 
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 JavaC4Media
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideC4Media
 
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/CDC4Media
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine LearningC4Media
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at SpeedC4Media
 
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 SystemsC4Media
 
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.jsC4Media
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerC4Media
 
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 ScaleC4Media
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeC4Media
 
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 EverywhereC4Media
 
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 ForC4Media
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data EngineeringC4Media
 
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 MoreC4Media
 

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

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
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 interpreternaman860154
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
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 textsMaria Levchenko
 
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 2024The Digital Insurer
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
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 Processorsdebabhi2
 
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 WorkerThousandEyes
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
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...apidays
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
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.pdfEnterprise Knowledge
 
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 SolutionsEnterprise Knowledge
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 

KĂŒrzlich hochgeladen (20)

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
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
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
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
 
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
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
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
 
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
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
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...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
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
 
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 Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 

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