CS/데이터 중심 애플리케이션 설계 요약
-
데이터 중심 애플리케이션 설계 10장 - 일괄 처리CS/데이터 중심 애플리케이션 설계 요약 2023. 1. 11. 00:01
파생 데이터 서로 다른 데이터 시스템을 통합하는 게 힘들다 원본 데이터를 복제해서 읽기 질의 성능을 높이는 데 사용 (캐시, 반정규화) 개요 보통 사용자의 요청에 따라 응답하는 형태로 이루어지고 응답 시간 단축에 많은 노력을 기울입니다. 하지만 이외에도 다양한 시스템이 존재합니다. 1. 서비스(사용자의 요청에 응답) 2. 일괄 처리(매우 큰 입력 데이터를 받아 데이터를 처리) 3. 스트림 처리(서비스와 일괄 처리 사이에 존재하는 준실시간 처리 시스템) 여기서 일괄처리는 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션을 구축하는 데 매우 중요한 구성요소입니다. 유닉스 도구로 일괄 처리하기 유닉스의 철학을 되새겨보며 유닉스가 주는 아이디어와 교훈이 대규모 이기종 분산 시스템으로 그대로 이어집니다..
-
9장 - 일관성과 합의CS/데이터 중심 애플리케이션 설계 요약 2023. 1. 9. 00:01
내결함성 분산 시스템에서는 많은 것들이 잘못될 수 있습니다. 가장 간단하게는 전체 서비스가 실패하도록 두고 사용자에게 오류 메시지를 보여주는 것입니다. 하지만 이런 결정을 받아들이기 어렵다면 결함을 견뎌낼 수 있도록 구성해야 합니다. 이번 장에서는 내결함성을 지닌 분산 시스템을 구축하는데 쓰이는 알고리즘과 프로토콜의 몇 가지를 예를 이야기합니다. 추상화 트랜잭션을 사용함으로써 애플리케이션이 걱정하지 않도록 합니다. 이는 트랜잭션의 추상화인데 이와 같은 방식을 분산 시스템에서는 합의라고 합니다. 합의는 모든 노드가 어떤 것에 동의하도록 만듭니다. 예를 들어 리더가 죽었다면 다른 노드들이 합의하여 새 리더를 뽑을 수 있습니다. 두 노드가 자신이 리더라고 생각하는 스플릿 브레인 상황에서도 올바르게 구현된 합의..
-
8장 - 분산 시스템의 골칫거리CS/데이터 중심 애플리케이션 설계 요약 2022. 12. 22. 00:01
개요 복제 서버 장애 복구, 복제 지연, 트랜잭션의 동시성 제어를 설명하며 시스템이 잘못된 것을 처리하는 방법에 대해 다루었습니다. 하지만 현실은 훨씬 더 암울합니다. 이제는 최대한 비관적으로 어떤 것이든지 잘못된 가능성이 있다면 잘못된다고 가정합니다. 이번장에서는 분산 시스템에서 네트워크 관련 문제와 시계 및 타이밍 문제를 조사하고 어느 정도로 회피할 수 있는지 설명합니다. 결함과 부분 장애 가끔 “운수 나쁜 날” 재부팅하면 흔히 고쳐지는 것처럼 보이지만 보통 잘못 작성한 소프트웨어의 결과입니다. CPU 인스트럭션을 항상 같은 일을 하고 메모리나 디스크에 데이터를 쓰면 온전하게 남아 있고 제멋대로 오염되지 않습니다. 물리적 세계에서는 매우 광범위한 것들이 잘못될 수 있습니다. 네트워크 분단, 전원장애,..
-
7장 - 트랜잭션CS/데이터 중심 애플리케이션 설계 요약 2022. 12. 15. 00:01
냉혹한 현실 세계의 데이터 시스템 쓰기 연산이 실행 중일 때는 포함해서 시스템은 다음과 같은 문제들이 발생할 수 있습니다. - 소프트웨어나 하드웨어는 언제라도 실패할 수 있다. - 애플리케이션은 언제라도 죽을 수 있다 - 네트워크가 갑자기 끊겨서 노드 사이의 통신이 안될 수 있다 - 여러 클라이언트가 동시에 쓰기를 실행할 수 있다 - 클라이언트가 부분적으로만 갱신되어 비정상적인 데이터를 읽을 수 있다 - 클라이언트 사이의 경쟁 조건은 예상치 못한 버그를 유발할 수 있다 시스템이 신뢰성을 갖추기 위해서 이런 결함을 처리해서 장애로 이어지는 것을 막아야 합니다. 트랜잭션 위의 문제를 해결하기 위해 수십 년 동안 트랜잭션은 이런 문제를 단순화하는 메커니즘으로 채택되어 왔습니다. 몇 개의 읽기와 쓰기를 하나의 ..
-
6장 - 파티셔닝CS/데이터 중심 애플리케이션 설계 요약 2022. 12. 10. 00:01
복제의 한계 데이터셋이 매우 크거나 질의 처리량이 매우 높다면 복제만으로는 부족하고 데이터를 파티션으로 쪼갤 필요가 있습니다. 이 작업을 샤딩이라고 합니다. 파티션을 나눌 때는 보통 각 데이터 단위(레코드, 로우, 문서)가 하나의 파티션에 속하게 됩니다. 각 파티션은 그 자체로 작은 데이터베이스입니다. 파티셔닝과 복제 보통 복제와 파티셔닝을 함께 적용해 각 파티션의 복사본을 여러 노드에 저장합니다. 이를 통해 내결함성을 보장할 수 있습니다. 키 -값 데이터 데이터 파티셔닝 대량의 데이터를 어떻게 파티셔닝해야 할까요? 어떤 레코드를 어떤 노드에 어떻게 저장해야 할까요? 파티셔닝의 목적은 데이터와 질의 부하를 노드 사이에 고르게 분산하는 것입니다. 모든 노드가 동일한 분량의 담당한다고 가정할 때 10대의 노..
-
5장 - 복제CS/데이터 중심 애플리케이션 설계 요약 2022. 12. 2. 00:01
분산된 데이터 베이스가 필요한 이유 - 데이터 볼륨, 읽기 부하, 쓰기 부하가 단일 장비에서 다룰 수 있는 양보다 커지면 여러 장비로 부하를 분배하는 확장성을 갖출 수 있다 - 장비 하나가 죽더라도 여러 장비를 사용하여 다른 하나가 그 기능을 이어 수행한다. 즉, 내결함성을 갖출 수 있다 - 글로벌 서비스라면 DB에 접근하기 위해 지구 반 바퀴를 돌 필요 없이 사용자와 가까운 곳에 데이터 센터를 설치하여 저지연성을 제공할 수 있다 고부하를 지탱하는 데이터 베이스로 확장시키는 방법 - 더 좋은 성능의 DB로 스케일업(가장 간단) 하지만 시간이 지날수록 2배의 장비를 투입해도 2배의 부하를 추가적으로 처리할 수 있지 않으며 지수함수 같은 비용 곡선이 발생합니다. - 비공유 아키텍처(수평 확장) 데이터베이스 ..
-
4장 - 부호화와 발전CS/데이터 중심 애플리케이션 설계 요약 2022. 11. 18. 00:01
변화하는 애플리케이션 애플리케이션은 시간이 지나 사용자 요구사항에 따라 변경하거나 비즈니스 환경에 따라 변합니다. 따라서 변경 사항을 쉽게 적용할 수 있게 시스템을 구축해야 합니다. 대부분 기능을 변경하기 위해서는 저장하는 데이터도 변경해야 합니다. 새로운 필드나 레코드 유형을 저장해야 하거나 기존 데이터를 새로운 방법으로 제공해야 할 수 있습니다. 서버에서는 한 번에 몇 개의 노드에 새 버전을 배포하고 새로운 버전이 원활하게 실행되는지 확인한 후 모든 노드에서 실행되게 하는 순회식 업그레이드 방식을 사용합니다. 새로운 코드가 예전 코드가 기록한 데이터를 읽을 수 있는 건 어렵지 않습니다. 하지만 예전 코드는 새로운 코드가 기록한 데이터를 읽는 건 어렵습니다. 이번장에서는 데이터 부호화를 위한 다양한 형..
-
3장 - 저장소와 검색CS/데이터 중심 애플리케이션 설계 요약 2022. 11. 17. 00:01
DB의 내부 상황 항상 주변을 단정히 정돈하는 사람은 단지 찾기를 너무 귀찮아하는 사람이다. DB는 대표적으로 두 가지 작업을 수행합니다. 1. 데이터 저장 2. 데이터 조회 2장에서 여러 데이터 모델들을 알아보았고 질의 언어를 통해 조회하는 것도 알아보았습니다. 데이터베이스가 데이터를 어떻게 저장하고 어떻게 조회할까요? 데이터베이스가 저장과 검색을 내부적으로 처리할 때 개발자가 주의해야 하는 이유는 무엇일까요? DB를 강력하게 만드는 데이터 구조 많은 데이터베이스는 내부적으로 추가 전용 데이터 파일인 로그를 사용합니다. 사람이 읽을 수 있는 형식일 필요는 없으며 특정 읽기 전용 프로그램만 읽을 수 있는 바이너리여도 상관없습니다. 색인 어떤 부가적인 메타데이터를 유지하며 이정표의 역할을 하여 원하는 데이..