참고
대규모 시스템에서 가장 중요한 품질 속성
NOTE
P(Performance, 성능)
S(Scale, 확장성)
A(Availability, 가용성)
T(내결함성)
성능 (Performance)
NOTE
성능의 주요 지표로는 응답시간 과 처리량이 있다!
•
응답시간
◦
처리시간(비즈니스 처리 속도) + 대기시간(네트워크 지연) 으로 구성된다.
◦
latency는 응답시간 혹은 웨이팅 타임을 혼용해서 자칭한다.
◦
단순히 응답시간이 빠르다고 좋은 성능을 가지는 것은 아니다. (QPS 등의 지표도 중요)
•
처리량
◦
일정시간 동안 데이터를 얼마나 받아서 처리할 수 있는지를 나타내는 지표이다.
고려할 점
1.
응답시간을 올바르게 측정해야한다.
Request1의 경우는 10ms, Request2의 경우는 20ms가 걸렸다고 생각한다.
•
대기 큐애 걸린 경우, 마지막 사용자는 응답시간이 늘어날 수 있다.
•
이런 경우를 방지하기 위해 응답시간은 평균을 구해야 한다.
2.
응답시간 분포
Tail Latencty
•
Percentile
◦
ex) P90, P95는 x(ms)안에 들어와야한다는 기준
•
Tail Latency
◦
대부분이 멀쩡한데, 특정 경우에 지연시간이 큰 경우
응답시간/처리량 그래프를 보면 어느순간 응답시간/처리량이 이상해진다.
•
CPU나, Memory 사용률이 너무 높은경우
•
너무 많은 IO 연결이 있는 경우 ( network, db .. )
•
메세지큐가 용량이 꽉찬경우
확장성 (Scale)
NOTE
시스템의 작업 처리능력을 의미한다!
•
확장성이 좋다는 것은?
◦
리소스 투자 대비 작업 처리 능력 향상이 좋다!
시스템은 3가지 방향으로 확장성을 확보할 수 있다.
1.
수직 확장성
•
컴퓨터 자체의 리소스를 업그레이드한다!
•
장점 : 코드 변경 없이 가능, 스케일 업/다운이 쉽다.
•
단점 : 확장에 한계가 존재하며 고가용성과 내결함성을 갖추지 않음
2.
수평 확장성
•
새 인스턴스를 추가해, 리소스를 확장한다.
•
장점 : 확장에 한계가 없으며, 고가용성과 내결함성을 갖춘다.
•
단점 : 초기 코드 변경이 필요하고 리소스 구성이 복잡해진다.
3.
팀/조직 확장성
•
하나의 코드베이스를 여러 엔지니어가 작업하게 되면 어느 순간 투입 대비 생산성이 감소한다.
◦
많은 미팅과 참여인원
◦
코드 병합 충돌
◦
비즈니스 복잡도 증가..
•
코드베이스가 다른 MSA 및 네트워크 구성으로 해결
가용성 (Availability)
NOTE
서버와 네트워크, 프로그램 등의 시스템이 정상적으로 사용가능한 정도를 의미한다!
•
가용성의 정의 및 공식
MTBF → 유효수명
MTTR → 문제 발견 후 회복까지 시간
◦
가용성 = 업타입 (업타입 + 다운타입)
◦
업타임 : 시스템이 운영되어 접근 가능함을 말한다.
가용성 90%는 절대 높은게 아니다!! (99.9가 표준임)
→ 90인경우는 하루 2시간 30분가까이 다운되있다는 의미임
내결함성 및 고가용성
NOTE
성능의 주요 지표로는 응답시간 과 처리량이 있다!
•
HA(고가용성)을 저해하는 원인
◦
휴먼 에러
▪
결함이 있는 구성을 포함
▪
코드 및 명령어 오류
▪
테스트 안된 새 버전 배포
◦
SW 에러
▪
Null Exception
▪
Segment fault
◦
HW 에러
▪
수명 다한 하드웨어
•
내결함성
◦
일부 구성에 오류가 발생하더라도, 전체 시스템은 정상적으로 가동되게끔 유지하는 기능
◦
내결함성을 위한 방법은 3가지가 존재한다.
1.
결함 예방
•
중복성의 종류
◦
공간적 중복성 : DB 레플리카, 복제된 서버
◦
시간적 중복성 : 동일한 수행이나 요청을 성공 혹은 포기할 때까지 반복
•
복제와 중복성의 전략
◦
Active - Active
▪
DB레플리카를 두고, 동기화를 유지한다.
▪
수평확장의 장점 / 동기화 오버헤드
◦
Active - Passive
▪
모든 요청을 받는 주 인스턴스가 있고, 이를 복제하는 스냅샷이 존재한다.
▪
최신의 상태를 유지 /확장능력을 잃는다.
2.
결합 감지 및 고립
1번 인스턴스가 응답이 안되므로, 고립시킨다.
•
health check로 서비스가 정상적으로 응답하는지 점검하는 모니터링 서비스 실행
•
만약 응답이 없다면 해당 서비스를 고립시킨다.
3.
복구
•
트래픽 중단 후 인스턴스 재부팅
•
롤백