본문 바로가기

스터디64

[데이터 중심 애플리케이션 설계] 08. 분산 시스템의 골칫거리 [데이터 중심 애플리케이션 설계] 08. 분산 시스템의 골칫거리 1. 결함과 부분 장애 수천 개의 노드가 있는 분산 시스템은 항상 뭔가 고장난 상태라고 가정하는게 합리적이다. 분산 시스템이 동작하게 만드려면 부분 장애 가능성을 항상 받아들이고 내결함성 메커니즘을 넣어야 한다. 즉, 신뢰성 없는 구성 요소를 사용해 신뢰성 있는 시스템을 구축해야 한다. 신뢰성 없는 IP(Internet Protocol)위에 신뢰성 높은 TCP(Transimission Control Protocal)를 두어 패킷 손실 시 재전송하고 순서에 맞춰 재조립되도록 보장해준다. 2. 신뢰성 없는 네트워크 어떤 분산 시스템은 비공유 시스템, 네트워크가 유일한 통신 수단인 다수의 장비들이다. 인터넷과 데이터센터 내부 이더넷은 비동기 패킷.. 2023. 1. 15.
[데이터 중심 애플리케이션 설계] 07. 트랜잭션 [데이터 중심 애플리케이션 설계] 07. 트랜잭션 1. 애매모호한 트랜잭션의 개념 1.1 ACID ACID는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다. 1.1.1 원자성(Atomicity) 원자적이란 더 작은 부분으로 쪼갤 수 없는 것을 가리킨다. 시스템은 연산을 실행하기 전이나 실행한 후의 상태에만 있을 수 있으며 그 중간 상태에는 머물 수 없다. 원자성 덕분에 실패한 트랜잭션은 어떤 것도 변경하지 않았음을 알 수 있으므로 안전하게 재시도 할 수 있다. 1.1.2 일관성(Consistency) 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 말한다. 일관성(C)은 실제로는 ACID에 속하지 않고 애플리케이션의 속성.. 2023. 1. 2.
[데이터 중심 애플리케이션 설계] 06. 파티셔닝 [데이터 중심 애플리케이션 설계] 06. 파티셔닝 1. 복제 VS 파티셔닝 복제 동일한 데이터 복사본 여러 개를 다른 노드에 저장 파티셔닝 데이터셋이 매우 크거나 질의 처리량이 매우 높아 복제만으로는 부족할 때 데이터를 파티션으로 나누어 저장 (= 샤딩) 복제와 파티셔닝의 혼합 보통 복제와 파티셔닝을 함께 적용해 각 파티션의 복사본을 여러 노드에 저장한다. 각 레코드는 정확히 한 파티션에 속하더라도 이를 여러 다른 노드에 저장해서 내결함성을 보장할 수 있다. 한 노드에 여러 파티션을 저장할 수도 있다. 리더 팔로워 복제 모델의 파티셔닝과 복제의 조합 각 파티션의 리더는 하나의 노드에 할당되고 팔로워들은 다른 노드에 할당된다. 각 노드는 어떤 파티션에게는 리더이면서 다른 파티션에게는 팔로워가 된다. 2. .. 2023. 1. 2.
[데이터 중심 애플리케이션 설계] 05. 분산 데이터와 복제 [데이터 중심 애플리케이션 설계] 05. 분산 데이터와 복제 1. 분산 데이터 여러 장비 간 분산된 데이터베이스를 필요로 하는 이유는 아래와 같다. 1.1 확장성 데이터 볼륨, 읽기/쓰기 부하가 단일 장비에서 다룰 수 있는 양보다 커지면 부하를 여러 장비로 분배할 수 있다. 1.2 내결함성/고가용성 장비 하나가 죽더라도 애플리케이션이 계속 동작해야 한다면 여러 장비를 사용해 중복성을 제공할 수 있다. 장비 하나가 실패하면 다른 하나가 이어받는다. 1.3 지연 시간 전 세계에 사용자가 있다면 사용자와 지리적으로 가까운 곳에 서버를 두어 서비스를 빠르게 제공할 수 있다. 2. 고부하로 확장 2.1 수직 확장(scale up) 더 강력한 장비를 사용하는 것 많은 CPU, 메모리 칩, 디스크를 하나의 운영체제로.. 2022. 12. 29.
[데이터 중심 애플리케이션 설계] 04. 부호화와 발전 [데이터 중심 애플리케이션 설계] 04. 부호화와 발전 1. 데이터 부호화 형식 프로그램은 보통 두 가지 형태로 표현된 데이터를 사용 메모리에 객체, 구조체, 배열, 해시 테이블 등으로 데이터를 유지 -> CPU에서 효율적으로 접근하고 조작할 수 있게 최적화됨 데이터를 파일에 쓰거나 네트워크를 통해 전송하기 위해서는 바이트열의 형태로 부호화 필요 인메모리 표현에서 바이트열로의 전환을 부호화(직렬화 또는 마샬링)라고 함 바이트열에서 인메모리 표현으로의 전환을 복호화(파싱, 역직렬화, 언마샬링)라고 함 1.1 언어별 형식 프로그래밍 언어에 내장된 부호화 라이브러리는 편리하지만 문제점도 많음 부호화는 보통 특정 프로그래밍 언어와 묶여 있어 다른 언어에서 데이터를 읽기가 매우 어려움 동일한 객체 유형의 데이터를.. 2022. 12. 28.
[데이터 중심 애플리케이션 설계] 03. 저장소와 검색 [데이터 중심 애플리케이션 설계] 03. 저장소와 검색 관계형 DB와 NoSQL DB에 사용되는 저장소 엔진에 대해 공부한다. 로그 구조(log-structured) 계열 저장소 엔진과 (B-tree 같은) 페이지 지향(page-oriented) 계열 저장소 엔진을 검토한다. 1. 데이터베이스를 강력하게 만드는 데이터 구조 많은 데이터베이스는 내부적으로 추가 전용(append-only) 데이터 파일인 로그(log)를 사용한다. 로그 : 연속된 추가 전용 레코드(an append-only sequence of records) 추가 전용 파일은 조회시 풀스캔을 하기 때문에 데이터베이스에 많은 레코드가 있으면 성능이 매우 나쁘다. 데이터베이스에서 특정 키의 값을 효율적으로 찾기 위해서는 색인(index)이 필.. 2022. 12. 21.
728x90
반응형