Dynamo DB Retry 횟수 설정
- AS-IS : default 10회
- TO-BE : 8회 설정 예정 (사유 : default 설정인 경우 최대 51~60초에 delay 발생으로 response time이 길어지는 악순환이 되기 때문에 재시도 횟수를 줄여서 빠른 response 처리로 서버 부하 감소하기 위함)
[Dynamo DB Retry 정책 참고]
• DynamoDB 읽기/쓰기 재시도 정책 • 요약 : 요청은 최대 1분이니 1분내에서 retry를 해라 예를 들어 첫 번째 재시도 전에는 최대 50밀리초, 두 번째 재시도 전에는 최대 100밀리초, 그리고 세 번째 전에는 최대 200밀리초를 기다리는 방식입니다. |
[총 재시도 횟수 별 시간 참고]
[설정 방법]
/**
* 처음 설정할 때 대기 시간 (밀리 초)
* */
private static final int CONNECTION_TIMEOUT = 60 * 1000;
/**
* 클라이언트가 실행을 완료 할 수있는 시간 (밀리 초)
* */
private static final int CLIENT_EXECUTION_TIMEOUT = 60 * 1000;
/**
* 요청이 완료되기까지 대기하는 시간 (밀리 초)
* */
private static final int REQUEST_TIMEOUT = 60 * 1000;
/**
* 데이터가 전송 될 때까지 기다리는 시간 (밀리 초)
* */
private static final int SOCKET_TIMEOUT = 60 * 1000;
/**
* 요청 실패시 재시도 카운트
* */
private static final int RETRY_COUNT = 8;
private AWSCredentialsProvider awsCredentialsProvider() {
final BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
final AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(awsCredentials);
return credentialsProvider;
}
private ClientConfiguration createDynamoDBClientConfiguration() {
ClientConfiguration clientConfiguration = new ClientConfiguration()
.withConnectionTimeout(CONNECTION_TIMEOUT)
.withClientExecutionTimeout(CLIENT_EXECUTION_TIMEOUT)
.withRequestTimeout(REQUEST_TIMEOUT)
.withSocketTimeout(SOCKET_TIMEOUT)
.withRetryPolicy(PredefinedRetryPolicies.getDynamoDBDefaultRetryPolicyWithCustomMaxRetries(RETRY_COUNT));
return clientConfiguration;
}
@Bean
public DynamoDBMapper dynamoDBMapper() {
Regions region = Regions.fromName(regionName);
AmazonDynamoDBClientBuilder builder = AmazonDynamoDBClientBuilder.standard()
.withCredentials(awsCredentialsProvider())
.withClientConfiguration(createDynamoDBClientConfiguration())
.withRegion(region);
if (!StringUtils.isEmpty(serviceEndpoint)) {
System.out.println(String.format("serviceEndpoint: '%s'", serviceEndpoint));
EndpointConfiguration configuration = new EndpointConfiguration(serviceEndpoint, regionName);
builder.withEndpointConfiguration(configuration);
}
AmazonDynamoDB dynamoDB = builder.build();
DynamoDBMapper mapper = new DynamoDBMapper(dynamoDB);
return mapper;
}
'클라우드 컴퓨팅 & NoSQL > Amazon Web Service' 카테고리의 다른 글
unhealthy host error 원인 분석 (0) | 2020.03.10 |
---|---|
[POC] Redis 연동을 위한 Jedis 사용법 (0) | 2020.03.08 |
Jumphost가 구성된 Main Server에 파일 업/다운로드 (0) | 2020.03.04 |
AWS ELB로 부터 Client IP 획득 (0) | 2020.03.03 |
[POC] Tunneling을 이용한 AWS Elastic Cache(redis) 로컬 테스트 (0) | 2020.03.03 |