layout : post
title : "데이터 중심 애플리케이션 설계 1장"
category : Database
최근 대부분의 애플리케이션은 계산중심(CPU 성능)보다는 데이터 중심(데이터 양, 복잡도, 속도 등)이다.
이러한 데이터 중심 애플리케이션은 기본적으로 데이터베이스
, 캐시
, 검색 색인
, 스트림처리
, 일괄처리
들을 필요로 한다.
- 데이터 시스템
신뢰성
소프트웨어 시스템에서 신뢰성은 애플리케이션은 사용자가 기대한 기능을 수행하는 것이다.
즉, 시스템의 결함에 대하여 예측하고 유저들에게 문제없이 서비스를 제공해주는가 이다.
이와 더불어 시스템은 허가되지 않는 접근과 오남용을 방지해야한다.
여기에서 말하는 결함과 장애는 다르다.
결함은 사양에서 벗어난 시스템의 한 구성요소로 정의된것이다. 반면에 장애는 사용자에게 필요한 서비스를 제공하지 못하고 시스템 전체가 멈춘 경우를 말한다.
만약 하드웨어 결함에 의한 문제를 예방하기 위해서는 하드웨어 성능을 높이면 되지만 소프트웨어 결함에 대해서는 해결하고 예측하기가 더 까다롭다.
확장성
시스템에 대하여 증가한 부하에 대처하기 위해 시스템이 충분한 성능을 지녔는지이다.
이를 위해서는 현재 시스템의 부하를 측정해야한다.
부하 매개변수
는 현재 시스템의 부하를 측정하기 위한 지표이다.
또한 현재 시스템의 성능 또한 기술 할수 있어야 한다.
대표적으로 처리량(하둡과 같은 일괄 처리 시스템은 초당 처리할 수 잇는 레코드 수나 일정 크기의 데이터집합으로 작업을 수행할 때 걸리는 전체 시간)에 관심을 가지며,
온라인 시스템에서는 서비스 응답시간 즉 클라이언트가 요청을 보내고 응답을 받는 사이의 시간을 중요하게 여긴다.
지연시간과 응답시간은 차이가 있다. 지연시간은 서버에서 요청을 받은 후 응답을 받을 때 까지 지연되는 회사이다.
응답시간은 같은 요청이라도 항상 다르므로 단일 값이 아니라 분포로 표현한다. 이 때 서비스 평균 응답시간을 구하기 위해서는 실질적인 평균을 구하는 것보다 백분위의 중앙값을 구하는 것이 더 실제 유저의 경험을
반영하기에 좋다.
여기서 사용자 실제 경험에 중요한 것은 꼬리 지연시간
이란 개념이다.
상위 백분위 응답시간으로 실제 사용자 표본의 95분이, 99분위 , 99.9분위의 응답시간을 살펴보는 것이다. 가령 95분위를 기준으로 한다치면, 95분위 응답시간이 1.5초이면 95프로가 1.5초 미만의 응답시간이
걸리고, 나머지 5%가 1.5초보다 응답시간이 더 걸린다는 의미이다.
아마존의 경우는 99.9분위로 서비스 응답시간 요구사항을 기술하여 까다롭게 응답시간을 관리한다.
이러한 응답지연을 최소화 하기 위해서 서버의 부하에 대응해야 하는데 크게 용량확장(수직적)/규모확장(수평적)/다수의 낮은 사양장비에 부하를 분산(비공유 아키텍쳐) 이 세가지가 있다.
이와 관련해 최근 분산 데이터 시스템이 가장 주목 받고 있다.(기존에는 용량확장을 기반으로 하나의 노드에 데이터베이스를 돌리는 것이 대부분이었다.)
유지보수성
유지보수에 들어가는 비용도 크기 때문에, 이러한 비용을 최소화 하기 위해 소프트웨어 설계부터 신경써야 한다.
a. 운용성 : 운영의 편리함 만들기 (자동화)
b. 단순성 : 복잡도 관리 (추상화) 좋은 추상화는 깔끔하고 직관적인 외관 아래로 많은 세부 구현을 숨길 수 있다. 또한 재사용성을 높여준다.
c. 발전성 : 변화하기 쉽게 만들기
댓글