어떻게 많은 데이터를 잘 보관할 것인가?
보관된 데이터는 어떻게 효율적으로 사용할 수 있는가?
성숙한 오픈소스와 훌륭한 개발자들이 작성한 코드가 모든 작업 부하에 잘 작동한다는 보장이 없기 때문에 시스템 설계와 솔루션 선택은 사람의 직관에 의존할 수밖에 없다.
- 역자 서문
데이터 중심적
- 데이터 양, 데이터 복잡성, 데이터가 변하는 속도 등 데이터가 주요 과제인 애플리케이션
- 오늘날 많은 애플리케이션은 데이터 중심적이다.
계산 중심적(compute-intensive)
- CPU 사이클이 병목인 경우
샤딩
- "조각내다." 라는 뜻의 데이터베이스 저장 기법. 네트워크를 분할하고, 트랜젝션을 영역별로 저장하고, 병렬 처리한다.
ACID : 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어
- Atomicity 원자성 : 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력
- Consistency 일관성 : 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것
- Isolation 독립성 : 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것
- Durability 지속성 : 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함.
CAP 정리
- Consistency 일관성 : 어떤 노드에 연결되었는지와 무관하게 모든 클라이언트가 동시에 동일 데이터를 볼 수 있음
- Availability 가용성 : 하나 이상의 노드가 작동 중지된 경우에도 데이터를 요청하는 클라이언트가 응답을 받음
- Partition tolerance 파티션 허용 : 노드 간의 다수의 통신 단절에도 불구하고 클러스터가 계속해서 작동해야 함
-> 분산 시스템은 위 3개의 특성 중 원하는 2개만 제공할 수 있음
1. 데이터 시스템의 기초
- 내부적으로 문제가 있어도 데이터를 정확하고 완전하게 유지하려면 어떻게 해야 할까?
- 시스템의 일부 성능이 저하되더라도 클라이언트에 일관되게 좋은 성능을 어떻게 제공할 수 있을까?
- 부하 증가를 다루기 위해 어떻게 규모를 확장할까?
- 서비스를 위해 좋은 API는 어떤 모습일까?
신뢰성
- 하드웨어나 소프트웨어 결함, 사람의 에러가 있더라도 시스템은 지속적으로 올바르게 동작해야 한다.
- 내결함성/탄력성 : 결함을 예측하고 대처할 수 있는 시스템. 결함으로 인해 장애가 발생하지 않게끔 내결함성 구조를 설계하는 것이 가장 좋다.
- 소프트웨어 내결함성 기술을 사용하거나, 하드웨어 중복성을 추가해 전체 장비의 손실을 견딜 수 있는 시스템으로 점점 옮겨가고 있다.
확장성
- 시스템의 데이터 양, 트래픽 양, 복잡도가 증가해도 이를 적절하게 처리할 수 있어야 한다.
유지보수성
- 시간이 지남에 따라 새로운 사용자도 시스템 상에서 생산적으로 작업할 수 있게 해야 한다.
성능 기술 - 지연 시간
- 평균보다는 백분위(percentile)을 사용하는 편이 더 좋다.
- 사용자가 보통 얼마나 오랫동안 기다려야 하는지 알고 싶다면 중간 지점인 중앙값(median)이 좋은 지표다.
- 일반적으로 99분위 - 요청 1,000개 중 1개만 영향이 있는 상황에서 최적화가 필요하다.
- 응답 시간이 가장 느린 요청을 경험한 고객들은 많은 구매를 해서 고객 중에서 계정에 가장 많은 데이터를 갖고 있기 때문이다.
- 응답 시간이 100밀리초 증가하면 판매량이 1% 줄어들고, 1초가 느려지면 고객 만족도 지표는 16% 줄어든다.
운용성 : 운영의 편리함 만들기
시스템이 지속해서 원활하게 작동하려면 운영팀이 필수다. 좋은 운영팀은 일반적으로 다음과 같은 작업 등을 책임진다.
- 시스템 상태를 모니터링하고 상태가 좋지 않다면 빠르게 서비스를 복원
- 시스템 장애, 성능 저하 등의 문제의 원인을 추적
- 보안 패치를 포함해 소프트웨어와 플랫폼을 최신 상태로 유지
- 다른 시스템이 서로 어떻게 영향을 주는지 확인해 문제가 생길 수 있는 변경 사항을 손상을 입히기 전에 차단
- 미래에 발생 가능한 문제를 예측해 문제가 발생하기 전에 해결
좋은 운영성이란 동일하게 반복되는 태스크를 쉽게 수행하게끔 만들어 운영팀이 고부가가치 활동에 노력을 집중한다는 의미다.
- 모니터링 툴, 표준 도구를 이용해 자동화, 개별 장비 의존성 회피
추상화
- 고수준 프로그래밍 언어는 기계 언어, CPU 레지스터, 시스템 호출을 숨긴 추상화다.
- SQL은 디스크에 기록하고 메모리에 저장한 복잡한 데이터 구조와 다른 클라이언트의 동시 요청과 고장 후 불일치를 숨긴 추상화다.
'인프라,데이터' 카테고리의 다른 글
데이터 중심 애플리케이션 설계 3장 정리 (0) | 2022.05.22 |
---|---|
데이터 중심 애플리케이션 설계 2장 정리 (0) | 2022.05.15 |
데이터 파이프라인 핵심 가이드 8-10 (0) | 2022.04.24 |
데이터 파이프라인 핵심 가이드 7 (0) | 2022.04.17 |
데이터 파이프라인 핵심 가이드 6 (0) | 2022.04.10 |