요약 마이크로서비스를 위한 조건을 이해함. 조직의 변화 → 업무 기능 중심 팀 관리체계의 변화 → 자율적인 분권 거버넌스, 폴리글랏 개발 생명주기의 변화 → 프로젝트가 아니라 제품 중심 개발 환경의 변화 → 인프라 자동화 저장소의 변화 → 통합 저장소가 아닌 분권 데이터 관리 위기 대응 방식의 변화 → 실패를 고려한 설계 MSA의 성공을 위해서는 아키텍처 및 개인 역량에만 집중할 것이 아니라 조직 문화, 일하는 절차 등을 고려해야 함. 메모 1.3 마이크로서비스를 위한 조건은 무엇인가? MSA의 주요 특징을 살펴본다. 마이크로서비스를 잘 구현하고 있는 조직의 사례 기술에만 의존한 아키텍처 스타일을 추구하는데 그치지 않고, 개발 환경, 문화, 일하는 방식과도 연계돼 있음. 1.3.1 조직의 변화: 업무 기..
요약 현실의 분산 트랜잭션에 대한 내용을 이해함. 데이터베이스 내부 분산 트랜잭션 이종 분산 트랜잭션 메시지를 정확히 한번 처리하는 원자적 커밋 지원할 수 있음. XA 트랜잭션을 통해 이종 분산 트랜잭션을 구현함. 장애 발생시 의심스러운 트랜잭션 발생할 수 있음. 코디네이터의 장애를 복구해야함. 이러한 분산 트랜잭션에도 제약이 있음. 코디네이터 자체가 일종의 데이터베이스로 간주해야 하기 때문 내결함성을 지닌 합의에 대한 내용을 이해함. 균일한 동의 무결성 유효성 종료 내결함성을 지닌 합의 알고리즘은 위 형식보다는 전체 순서 브로드캐스트를 구현함. 이 또한 합의의 과정임. 합의의 합의가 필요할 수 있음. (리더 선출과 전체 순서 브로드캐스트) 이 경우 에포크 번호를 붙여 해결할 수 있음. 합의 알고리즘도 ..
요약 기업의 비즈니스 민첩성에 대한 내용을 이해함. 클라우드 환경의 등장으로 유명한 기업의 비즈니스 민첩성이 장점으로 두드러지게 됨. ex) 아마존의 배포속도는 초당 1.5번임. 클라우드 인프라의 등장 시스템 인프라 구축에 시간을 단축시키고 손쉽게 구축 가능함. 클라우드 인프라르 사용하는 애플리케이션은 블록이 작으면 작을수록 효율적임. 스케일 아웃, 스케일 업 궁극적으로 클라우드 프렌들리에서 클라우드 네이티브로 전이되야 함. 마이크로 서비스란? 모노리스 하나의 단위로 개발되는 일체식 애플리케이션임. SOA 애플리케이션은 모듈별로 분리했지만 데이터 저장소까지 분리하지는 못함. MSA 애플리케이션 모듈별 분리와 함께, 저장소도 분리함. 메모 01. 아마존 비즈니스 민첩성의 비밀 1.1 성공한 인터넷 기업들과..
책너두 3기를 시작했다. 2기는 진행 중인데, 책장에 박혀있는 책이 책너두 3기 개발 책 목록에 있었다. 올해는 책너두와 함께 독서 습관을 꾸준히 가져가면서 쌓아뒀던 책을 하나씩 읽어내고 싶다..! 전반적인 내용 도메인 주도 설계로 시작하는 마이크로서비스 개발 책을 읽는다. 도메인 주도 설계(DDD)와 마이크로 서비스(MSA)에 대한 내용을 다룬다. 책은 총 10장으로 이루어져 있음. 1장 : 아마존 비즈니스 민첩성의 비밀 2장 : MSA의 이해 3장 : 마이크로서비스 애플리케이션 아키텍처 4장 : 마이크로서비스와 애자일 개발 프로세스 5장 : 마이크로 서비스 설계 6장 : 사례 연구 - 마이크로서비스 도출과 아키텍처 구성 7장 : 사례 연구 - 백엔드 마이크로서비스 구현 8장 : CQRS 패턴을 활용한..
요약 분산 트랜잭션과 합의에 대한 내용을 이해함. 분산 컴퓨팅에서 가장 중요하고 근본적인 문제임. 노드간의 동의를 만드는 것임. 원자적 커밋과 2단계 커밋에 대한 내용을 이해함. 단일 노드에서 원자적 커밋은 저장소 엔진에서 구현됨. 다중 노드에서는 위 내용만으로 분산 트랜잭션을 안전하게 구현할 수 없음. 2단계 커밋을 이용한다. 모든 노드가 커밋되거나모든 노드가 어보트되도록 보장하는 알고리즘임. 단점은 코디네이터가 죽으면, 복구될 때까지 기다려야함. 블로킹 원자적 커밋 프로토콜이라고도 부름. 3PC를 대안으로 제시하기도 하지만 신뢰성 있는 장애 감지기 역할을 하지 못함. (네트워크 지연, 프로세스 중단에 대한 제한이 깔려있기 때문) 메모 분산 트랜잭션과 합의 합의는 분산 컴퓨팅에서 가장 중요하고 근본적인..
요약 데이터 순서화 보장에 대한 내용을 알게됨. 순서화는 인과성을 보존하는데 도움을 줌. 인과적 의존성을 보존하기 위해 일련번호를 사용한다. 일련번호의 순서화임. ex) 램포트 타임스탬프 전체 순서 브로드캐스트는 연산의 순서를 보고 전체 순서를 정한다. 메모 순서화 보장 순서화는 이 책에서 되풀이된 주제임. 중요한 근본적 아이디어일 수 있음을 시사함. 순서화, 선형성, 합의 사이에는 깊은 연결 관계가 있음. 이 개념은 시스템이 무엇을 할 수 있고 무엇을 할 수 없는지에 대한 이해를 명확하게 하는데 큰 도움이 됨. 순서화와 인과성 순서화가 인과성을 보존하는 데 도움을 줌. 인과성은 이벤트에 순서를 부과함. 결과가 나타나기 전에 원인이 발생함. 시스템이 인과성에 의해 부과된 순서를 지키면 그 시스템은 인과적..
요약 선형성에서 요구되는 주요 영역을 이해함. 잠금과 리더 선출 제약 조건과 유일성 보장 채널 간 타이밍 의존성 선형성 시스템을 구현하기 위한 복제 방식의 방법을 이해함. 합의 알고리즘을 사용한다. 단일 리더 복제 외에는 비선형으로 볼 수 있다. 선형성의 비용과 그에 따른 트레이드 오프를 고려해야 함. 내결함성 vs 성능 메모 선형성 기대기 시스템이 올바르게 동작하도록 만들기 위해 선형성이 중요한 요구사항이 되는 영역이 몇 가지 있음. 잠금과 리더 선출 단일 리더 복제를 사용하는 시스템은 리더가 여러 개가 아니라 진짜로 하나만 존재하도록 보장해야 함. 리더 선출하는 방법 중 하나로 잠금을 사용한다. 이 잠금을 어떻게 구현하든지 선형적이어야 함. 모든 노드는 어느 노드가 잠금을 소유하는지에 동의해야 함. ..
요약 분산 시스템의 일관성과 합의에 대한 내용을 알게됨. 가능하다와 불가능하다에 대한 범위를 이해해야 함. 일관성 보장에 대한 내용을 이해함. 분산 일관성은 대개 지연과 결함이 있더라도 복제본의 상태를 코디네이션하는 것에 관한 것임. 선형성에 대한 내용을 이해함. 선형성은 최신성 보장이다. 시스템에 데이터 복사본이 하나뿐인 것처럼 보이게 만드는 것이 선형성을 뒷받침하는 기본 아이디어임. 메모 9장. 일관성과 합의 내결함성을 지닌 분산 시스템을 구축하는 데 쓰이는 알고리즘과 프로토콜의 몇가지를 얘기한다. 내결함성을 지닌 시스템을 구축하는 가장 좋은 방법 유용한 보장을 해주는 범용 추상화를 찾아서 구현하고 애플리케이션에서 이 보장에 의존하게 만든다. 7장의 트랜잭션이 다루는 방법과 같음. 분산 시스템의 가장..
요약 분산 시스템에서 일어날 수 있는 내용 (지식과, 신뢰성, 악의 요청)에 대한 생각과 대응에 대해 알게 됨. 정족수를 통해 노드의 문제를 과반수로 정하고 판단할 수 있음. 그럼에도 시스템 문제가 유발할 수 있는데, ex: 리더가 잠금을 획득하는 예시가 있음. 펜싱 토큰을 사용하여 문제를 해결할 수 있음. 비잔틴 결함에 대한 내용을 이해함. 악의적인, 거짓말을 통해 문제가 발생할 수 있음. 클라이언트의 행동이 악의적이므로 그에 대한 대책을 애플리케이션에서도 마련해야 함. 현실에서 시스템 모델은 다양하며, 정의할 수 있어야 함. 알고리즘의 정확성에 대한 내용을 생각할 수 있음. 알고리즘의 속성을 기술할 수 있듯이 분산 시스템의 속성을 기술하여 시스템 모델의 정확도를 체크해볼 수 있음. 어려운 시스템 모델..
요약 신뢰성 없는 네트워크 중, 동기와 비동기 네트워크에 대한 내용을 이해함. 동기 → 제한 있는 지연 / 고정 대역폭 비동기 → 제한 없는 지연 / 전송률 동적 조절 가능 신뢰성 없는 시계에 대한 내용을 이해함. 일 기준 시계 벽 시계 단조 시계 시간으 흐름을 잼 시계 동기화와 정확성에 대한 내용 신뢰가 낮음 동기화된 시계에 의존 이벤트 순서화용 타임스탬프 시계 읽기 신뢰구간 프로세스 중단에 따른 응답 시간처리가 필요 응답 시간 보장 가비지 컬렉션 영향 제어 메모 동기 네트워크 대 비동기 네트워크 동기 네트워크 ex) 전화 네트워크에서 통화 시, 회선(circuit)이 만들어짐. 회선은 통화가 끝날 때까지 유지됨. 데이터가 여러 라우터를 거치더라도 큐 대기 문제를 겪지 않음. 큐 대기가 없기에 네트워크..
요약 분산 시스템의 골칫거리에 대한 내용을 이해함. 결함과 부분장애에 대한 내용을 이해함. 하드웨어 동작은 중간 장애 없이 잘 동작하거나 전체 장애가 발생한다. 분산 시스팀에서는 부분 장애가 발생할 수 있는데, 비결정적임. 인터넷 서비스는 클라우드 컴퓨팅이며, 슈퍼컴퓨팅은 분산 시스템과 거리가 멀다. 신뢰성 없는 네트워크에 대한 내용을 이해함. 분산 시스템은 비공유 시스템이며, 비동기 패킷 네트워크이기에 전송측과 수신측 패킷의 신뢰를 할 수 없음. 현실적으로 네트워크 결함은 피할 수 없음. 결함 감지를 하기 위해서는 응답측에서 응답을 받아야 함. 타임아웃의 트레이드오프를 잘 결정해야 함. 메모 8장. 분산 시스템의 골칫거리 결함과 부분 장애 좋은 소프트웨어가 설치된 각각의 컴퓨터는 완전하게 동작하거나, ..
요약 트랜잭션의 완화된 격리 수준 중 하나인 직렬성 스냅숏 격리에 대해 이해하게 됨. 직렬성 격리와 좋은 성능을 공존할 수 있는 방법임. 낙관적 동시성 제어 기법으로 볼 수 있고, 스냅숏 격리를 기반으로 함. SSI 는 쓰기 스큐를 처리하기 위해 뒤처진 전제에 기반한 결정 을 이용한다. 오래된 MVCC 읽기 감지 과거의 읽기에 영향을 미치는 쓰기 감지 직렬성 스냅숏 격리는 트랜잭션 상세 동작 추적시 오버헤드 발생함. 2단계 잠금과 달리 잠금을 기다리지 않아도 되기에 빠름 단일 CPU 코어 처리량에도 제한되지 않으므로 여러 파티션으로부터 읽고 쓸 수 있음. 메모 직렬성 스냅숏 격리(SSI) 직렬성 격리와 좋은 성능을 공존할 수 있는 방법임 이 알고리즘 (Serializable Snapshot Isolati..