Size http2 buffers to allow concurrent streams
Kubernetes-commit: 554c0d73282ce7c30f11e0f4d985a6c30cf6e418
This commit is contained in:
		
							parent
							
								
									0244972979
								
							
						
					
					
						commit
						24a0ab5db2
					
				|  | @ -87,10 +87,30 @@ func (s *SecureServingInfo) Serve(handler http.Handler, shutdownTimeout time.Dur | ||||||
| 		secureServer.TLSConfig.ClientCAs = s.ClientCA | 		secureServer.TLSConfig.ClientCAs = s.ClientCA | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	// At least 99% of serialized resources in surveyed clusters were smaller than 256kb.
 | ||||||
|  | 	// This should be big enough to accommodate most API POST requests in a single frame,
 | ||||||
|  | 	// and small enough to allow a per connection buffer of this size multiplied by `MaxConcurrentStreams`.
 | ||||||
|  | 	const resourceBody99Percentile = 256 * 1024 | ||||||
|  | 
 | ||||||
|  | 	http2Options := &http2.Server{} | ||||||
|  | 
 | ||||||
|  | 	// shrink the per-stream buffer and max framesize from the 1MB default while still accommodating most API POST requests in a single frame
 | ||||||
|  | 	http2Options.MaxUploadBufferPerStream = resourceBody99Percentile | ||||||
|  | 	http2Options.MaxReadFrameSize = resourceBody99Percentile | ||||||
|  | 
 | ||||||
|  | 	// use the overridden concurrent streams setting or make the default of 250 explicit so we can size MaxUploadBufferPerConnection appropriately
 | ||||||
| 	if s.HTTP2MaxStreamsPerConnection > 0 { | 	if s.HTTP2MaxStreamsPerConnection > 0 { | ||||||
| 		http2.ConfigureServer(secureServer, &http2.Server{ | 		http2Options.MaxConcurrentStreams = uint32(s.HTTP2MaxStreamsPerConnection) | ||||||
| 			MaxConcurrentStreams: uint32(s.HTTP2MaxStreamsPerConnection), | 	} else { | ||||||
| 		}) | 		http2Options.MaxConcurrentStreams = 250 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// increase the connection buffer size from the 1MB default to handle the specified number of concurrent streams
 | ||||||
|  | 	http2Options.MaxUploadBufferPerConnection = http2Options.MaxUploadBufferPerStream * int32(http2Options.MaxConcurrentStreams) | ||||||
|  | 
 | ||||||
|  | 	// apply settings to the server
 | ||||||
|  | 	if err := http2.ConfigureServer(secureServer, http2Options); err != nil { | ||||||
|  | 		return fmt.Errorf("error configuring http2: %v", err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	glog.Infof("Serving securely on %s", secureServer.Addr) | 	glog.Infof("Serving securely on %s", secureServer.Addr) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue