본문 바로가기

전체 글79

2PC[Two-Phase-Commit]과 SAGA 패턴 데이터중심 애플리케이션 설계 9장을 읽은 후, 스터디 자료용 및 공부자료로 찾아보게 되어 기록 현재 배경: MSA에서는 각 서비스별로 DB 인스턴스와 애플리케이션이 분리 관계형으로 맺어진 Entity들은 서로가 다른 인스턴스로 운영되고, 그들의 리소스를 받기 때문에 데이터 일관성 깨짐 이를 위해 개발자들은 MSA에서 분산 트랜잭션 기술을 이용 → 일관성(Concurrency)을 지킬 수 있도록 2PC [Two-Phase Commit] 2단계에 거쳐서 영속하는 작업 (JPA에 있는 영속성 컨텍스트와는 다름) 분산 DB 환경 : 주 DB / 보조 DB 로 분산되어있는 경우가 많음 실제 모놀리틱에서 연결된 메인 DB = Primary DB 이중화된 DB 형태를 가지려면 DB들은 동기화 형태로 되어야 함 Coo.. 2022. 12. 8.
@Transactional Propagation와 Spring Transaction Proxy Pattern @Transactional Propagation(전파) propagation의 옵션 옵션 REQUIRED Default - 부모 트랜잭션이 존재한다면 부모 트랜잭션 내에서 실행, 없다면 새로운 트랜잭션 생성 중간에 자식 / 부모에서 rollback 발생 시, 부모, 자식 모두 rollback REQUIRES_NEW 무조건 새로운 트랜잭션 생성(시작) 만약 호출한 곳에 이미 트랜잭션이 있다면 기존의 트랜잭션은 메서드가 종료할 때까지 잠시 대기, 본인의 트랜잭션 실행 rollback은 각각 이루어짐 MANDATORY 무조건 부모 트랜잭션에 합류, 이 때 부모 트랜잭션이 없다면 예외 발생 SUPPORTS 메소드가 트랜잭션을 필요로 하지는 않지만,진행 중인 트랜잭션이 존재하면 트랜잭션을 사용한다는 것을 의미진행.. 2022. 11. 13.
데이터중심 애플리케이션 설계 - 7장 [트랜잭션] 리뷰 - 1 6장과 비교했을 때 굉장히 내용이 많다. 다양한 정의 및 내용이 나오다보니 개인적으로 헷갈리는 부분이 많았다. 트랜잭션 (Transaction) 애플리케이션에서 다수의 읽기와 쓰기 작업을 하나의 논리적 단위로 묶는 방법 (개념적으로 하나의 트랜잭션 내에서는 모든 읽기 / 쓰기는 하나의 연산으로 실행) 트랜잭션은 전체가 성공(commit) or 실패(abort, rollback) 된다. 트랜잭션이 필요한 이유 1. DB, SW, HW, 모두 언제라도 연산 및 작업이 실패할 수 있다. 2. 네트워크 오류로 인해 노드 사이의 통신 실패 3. Client 사이의 경쟁 조건으로 인해 예상치 못한 버그 유발 가능 ACID 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속.. 2022. 11. 6.
프로그래머스 - KAKAO k진수에서 소수 개수 구하기 [파이썬] 2022 KAKAO BLIND RECRUITMENT - k진수에서 소수 개수 구하기 ( 파이썬 Python ) 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/92335 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0 처럼 소수 양쪽에 0이 있는 경우 P0 처럼 소수 오른쪽에만 0이 있고 왼쪽에는 아무것도 없는 경우 .. 2022. 10. 30.
Service Discovery 패턴 Service Discovery 배경 : MSA 분산 환경 : 서비스 간 원격 호출 구성 (일반적으로 원격 서비스 호출 - IP / port 이용 ) 클라우드 환경 내에서 오토 스케일링 등에 의해 동적 생성, 컨테이너 기반 배포 등으로 서비스 IP가 동적으로 자주 변경될 수 있음 또한 책에 나온 것 처럼 파티션 리벨런싱에 의해 노드에 할당된 파티션이 바뀌는 상황 또한 결국 dest 노드를 찾아야하는 상황 → (service discovery가 필요) 따라서 클라이언트가 서비스를 호출하기 위해서는 서비스의 위치(or Ip/Port) 를 알아야하는데, 이를 보통 service registry 에 등록해놓음 Service Registry 서비스 디스커버리의 가장 중요한 포인트이며, 이 때문에 높은 가용성 및 .. 2022. 10. 28.
데이터중심 애플리케이션 설계 - 6장 [파티셔닝] 리뷰 - 3 이번 포스팅에서는 6장에서의 3번째 주제 파티션 재균형화에 대해 리뷰한다. 파티션 재균형화 재균형화(Rebalancing) : 특정 노드에 대한 데이터와 요청을 다른 노드로 옮기는 과정 재균형화에 대한 요구사항 재균형화 이후에는 부하가 클러스터의 노드들에 대해 균등하게 분배 재균형화 도중에도 DB에 read/write 요청이 가능해야함 재균형화는 빠르게 실행되어야하며, 네트워크, 디스크 I/O 부하를 최소화할 수 있도록 노드간의 데이터 이동은 최소로 이동 파티션 리벨런싱 전략 사용하면 안되는 방법 : 해시값에 mod N 연산 실행 문제점 : 노드 개수 N 이 바뀌면, 대부분의 키의 위치가 노드 사이에서 옮겨진다. 즉, 필요이상의 데이터가 이동하게 되므로 리벨런싱 비용이 너무 많아짐 # 파티션 개수 고정 .. 2022. 10. 22.