Aws-sdk-js: Use Connection: keep-alive to improve application performance

Created on 8 Mar 2019  路  1Comment  路  Source: aws/aws-sdk-js

By default, NodeJS sets Connection: close and not Connection: keep-alive HTTP header which results in sub-optimal performance. Instead of reusing an already established connection between the client and the service, a new one has to be created for every operation.

It has been reported before (#146), recently publicized by an AWS Serverless Hero and it's also recommended by AWS for DynamoDB when using encryption at rest. DynamoDB itself responds with a Connection: keep-alive header.

Even though all these examples pertain to DynamoDB, I imagine other services will benefit from this change as well. For what it's worth, boto3, the official AWS SDK for Python does not explicitly set a Connection: close header.

Please consider setting keep-alive header the on the SDK level so that going forward, the whole community can benefit from this improvement.

feature-request needs-major-version

Most helpful comment

Changing the default behavior here could introduce issues for existing users of the SDK. If this were enabled by default, it would require a major version bump.

It is possible to enable keep-alive through configuration.

That can be done on the global config:

const AWS = require('aws-sdk')
const https = require('https');
const agent = new https.Agent({
  keepAlive: true
})

AWS.config.update({
  httpOptions: {
    agent: agent
  }
})

Or on a per-client basis:

const AWS = require('aws-sdk')
const https = require('https');
const agent = new https.Agent({
  keepAlive: true
});

const DDB = new AWS.DynamoDB({
  httpOptions: {
    agent: agent
  }
});

>All comments

Changing the default behavior here could introduce issues for existing users of the SDK. If this were enabled by default, it would require a major version bump.

It is possible to enable keep-alive through configuration.

That can be done on the global config:

const AWS = require('aws-sdk')
const https = require('https');
const agent = new https.Agent({
  keepAlive: true
})

AWS.config.update({
  httpOptions: {
    agent: agent
  }
})

Or on a per-client basis:

const AWS = require('aws-sdk')
const https = require('https');
const agent = new https.Agent({
  keepAlive: true
});

const DDB = new AWS.DynamoDB({
  httpOptions: {
    agent: agent
  }
});
Was this page helpful?
0 / 5 - 0 ratings