전체 글
-
Retry Jitter카테고리 없음 2024. 8. 4. 15:46
Retry 메커니즘에서 'jitter'는 반복적인 재시도 간의 시간을 조정하기 위해 사용되는 기법이다. 이는 주로 네트워크 요청이나 분산 시스템에서 실패한 요청을 다시 시도할 때 사용된다. 기본적으로, 재시도 메커니즘은 일정한 지연 시간 후에 요청을 다시 시도한다. 그러나 모든 클라이언트가 동일한 간격으로 재시도하면, 서버에 일시에 많은 요청이 집중되어 과부하가 발생할 수 있다.이를 방지하기 위해 'jitter'를 사용하여 지연 시간을 무작위로 변동시킨다. 이는 각 클라이언트의 재시도 시간을 약간 다르게 만들어 서버에 대한 요청이 분산되도록 한다. import reactor.util.retry.Retry;import java.time.Duration;// 예시 WebClient 설정WebClient cl..
-
반복적인 lua script를 사용한다면 EVAL 대신 EVALSHA 로카테고리 없음 2024. 8. 4. 15:43
EVAL과 EVALSHA는 Redis에서 Lua 스크립트를 실행하는 명령어로, 둘 다 Lua 스크립트를 사용하여 복잡한 로직을 Redis 서버 측에서 실행할 수 있게 해준다. EVAL vs. EVALSHA 비교EVAL (Evaluate):EVAL은 Lua 스크립트를 처음부터 Redis 서버로 보내고 실행한다.Redis는 EVAL로 받은 스크립트를 실행하기 전에 해당 스크립트를 해시화하고, 캐시에 저장한다.매번 스크립트를 Redis 서버에 전달하고 컴파일해야 하므로 네트워크 및 CPU 리소스가 더 많이 소모된다.EVALSHA (Evaluate SHA-1):EVALSHA는 이미 Redis 서버에 로드된 Lua 스크립트의 해시(SHA-1) 값을 사용하여 스크립트를 실행한다.EVALSHA는 스크립트의 해시를 사..
-
logback 사용시 대용량 배치 작업에서 성능 저하를 유발할 수도!카테고리 없음 2024. 7. 14. 15:13
성능테스트를 어느정도 마친 배치 서비스에서 코드를 리펙터링하고 로그 포맷을 정리하여 배치 task 를 실행시켰을때 기존 테스트때보다 2배 정도 걸리는 것을 확인하였다. 어떤 부분이 영향을 미쳤을까 하나씩 확인해보던 중 logback.xml 을 설정을 다음과 같이 추가한 부분에 영향이 미침을 확인하였다. ... 다음과 같이 로그백 설정을 주어 INFO 나 ERROR 상태에 있는 로그를 콘솔로 출력하고 kibana 를 통해서 JSON 형태의 로그를 확인할 수 있도록 하였는데 INFO 수준에 레벨을 처리하는 CUSTOM_LOG 가 문제였다. 배치는 청크단위로 reader-proc..
-
scdf 배치 task 실행시 볼륨과 함께 initContainer 실행시키기카테고리 없음 2024. 7. 14. 14:36
Spring Cloud Data Flow(SCDF)는 배치 작업과 스트리밍 작업을 관리하고 실행할 수 있는 플랫폼이다. 이 중 배치 작업(Task)을 실행할 때, 경우에 따라 특정 작업이 실행되기 전에 미리 설정해야 할 작업이 있을 수 있다. 이를 위해 Kubernetes 환경에서는 initContainer와 함께 필요한 볼륨을 설정하여 작업을 준비할 수 있다. 배치 작업에서 볼륨과 initContainer 사용하기 배치 작업에서 볼륨을 사용하여 데이터를 저장하거나 공유하고, initContainer를 이용해 그 데이터를 미리 세팅할 수 있다. 예를 들어, 배치 작업이 실행되기 전에 로그 파일을 생성하거나, 모니터링을 위한 환경을 준비하는 데 활용할 수 있다.다음은 Spring Cloud Data Fl..
-
Transactional Outbox Pattern카테고리 없음 2024. 7. 7. 20:45
Transactional Outbox 패턴은 데이터베이스와 메시지 브로커 간의 데이터 일관성을 유지하기 위해 사용된다. 핵심 아이디어는 트랜잭션 내에서 데이터베이스에 변경 사항을 기록할 때, 동시에 "아웃박스" 테이블에 메시지(또는 이벤트)를 기록하는 것이다. 그런 다음, 별도의 프로세스가 이 아웃박스 테이블에서 메시지를 가져와 메시지 브로커에 전송하게 된다.이 패턴을 사용하면 데이터베이스와 메시지 브로커 간의 일관성을 유지하면서도, 트랜잭션을 통해 데이터의 원자성을 보장할 수 있다.이 방식은 데이터 손실을 방지하고 시스템의 신뢰성을 높이는 데 유용하다. 기존에 트랜잭션 내에서 메시지 브로커로 메시지를 먼저 보내고 데이터베이스에 커밋을 하는 방식에서는, 메시지가 먼저 전송되고 나서 데이터베이스 커밋이 ..
-
RabbitMQ에서 At Least Once 보장카테고리 없음 2024. 7. 7. 20:45
메시징 큐 시스템에서 메시지의 신뢰성과 전달 보장은 매우 중요하다. 특히, "at least once" 보장은 메시지가 최소한 한 번은 수신자에게 전달된다는 것을 의미한다. 이번 포스트에서는 Spring Boot를 사용하여 RabbitMQ에서 "at least once" 보장을 구현하는 방법과 RabbitMQ의 2PC(Two-Phase Commit) 지원 방안에 대해 알아보자.RabbitMQ에서 At Least Once 보장하기기본적으로 RabbitMQ는 "at least once" 보장을 하지 않는다. 네트워크 장애나 메시지를 보내는 측의 문제로 인해 메시지가 유실될 수 있다. 이를 방지하기 위해 메시지 지속성과 확인 메시지를 활용한 설정이 필요하다.메시지 지속성(Persistence)메시지를 퍼블리싱..
-
맵리듀스와 분산 파일 시스템책/데이터 중심 어플리케이션 설계 2024. 6. 27. 13:57
맵 리듀스(MapReduce)는 구글에서 개발한 대용량 데이터 처리를 위한 분산 컴퓨팅 모델이다. 이 모델은 주로 빅데이터를 분석하고 처리하는 데 사용된다. 맵 리듀스는 두 가지 주요 단계로 구성돠는데 크게 맵(Map) 단계와 리듀스(Reduce) 단계이다. 먼저, 맵(Map) 단계에서는 입력 데이터를 여러 조각으로 나누어 각 조각을 병렬로 처리한다.. 각 조각은 키-값 쌍으로 변환되며, 이 쌍들이 중간 결과로 생성된다. 예를 들어, 단어 빈도를 계산하는 경우, 입력 텍스트의 각 단어를 키로, 단어의 출현 횟수를 값으로 하는 쌍이 만들어 질 수 있다. 그 다음, 리듀스(Reduce) 단계에서는 맵 단계에서 생성된 중간 결과를 취합하여 최종 결과를 생성한다. 같은 키를 가진 데이터들을 모아서 지정된 연산을..
-
분산 시스템에서의 일관성 모델: 다이나모 스타일과 완화된 일관성책/데이터 중심 어플리케이션 설계 2024. 6. 26. 23:38
분산 시스템에서 데이터 일관성을 유지하는 것은 매우 중요한 과제이다. 특히, 데이터가 여러 노드에 복제되는 환경에서 일관성을 유지하면서도 성능과 가용성을 높이는 것은 어려운 일이다. 다이나모 스타일 복제를 사용하는 시스템에서의 일관성 모델과 완화된 일관성 모델에 대해 알아보.다이나모 스타일 복제다이나모 스타일 복제(Dynamo-style replication)는 리더 없는 분산 시스템에서 사용된다. 이러한 시스템은 모든 노드가 동일한 역할을 수행하며, 쓰기 및 읽기 요청이 임의의 노드에 분산된다. 이로 인해 특정 노드의 장애가 시스템 전체에 미치는 영향을 최소화할 수 있다.다이나모 스타일 복제를 사용하는 시스템은 궁극적 일관성(eventual consistency)을 제공한다. 궁극적 일관성이란 시간이 ..