공부/단행본

데이터중심의 어플리케이션 설계 1장

내공얌냠 2021. 12. 30. 12:59

01장 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션

 

compute-intensive(계산 중심) < data-intensive(데이터 중심)

 

  • Reliability 신뢰성 : 역경 직면하더라도 올바르게 동작
  • Scalability 확장성: 증가 처리시 적절한 방법 필요
  • Maintainability 유지보수성: 모든 유저가 생산적으로 작업하도록

 

데이터 시스템 <- DB, message queue

  • 분류 간 경계 흐려짐
  • 광범위한 요구사항

 

신뢰성)

fault: 잘못될 수 있는 일 != failure 장애 : 시스템 전체가 멈춘 경우

- 예측, 대처: fault-tolerant 내결함성 or resilient 탄력성

 

  • 카오스 몽키, 넷플릭스
  • MTTF, mean time to failure, 평균 장애시간, 가동시간 / 장애횟수
  • corner case 코너케이스

 

하드웨어 결함

  • 소프트웨어 내결함성 기술 사용
  • 하드웨어 중복성 추가

소프트웨어 오류

  • 약한 상관관계
  • 시스템 내 체계적 오류 system error

 

  • 인적 오류
  • 신뢰성의 중요성 : 버그 -> 생산성 저하, 매추 ㄹ손실, 명성 타격 등 고비용 손실

 

확장성)

  • 성능저하를 유발하는 흔한 이유: 부하증가
  • 부하에 대처하는 시스템 능력을 설명하는 데 사용하는 용어
  • 부하가 증가해도 좋은 성능을 유지하기 위한 전략

 

부하 기술하기

  • 부하 성장 질문
  • 부하 매개변수 load parameter

 

  • fan-out: 트랙잭션 시스템에서 하나의 수신요청을 처리하는데 필요한 다른 서빕스의 요청 수를 설명하기 위해 사용
  • twitter 예

 

성능 기술하기

  • 부하 매개변수 증가, 시스템 자원 그대로
  • 부하 매개변수 증가, 성능 유지 시 필요한 자원은 얼마인지

 

  • throughput 처리량
  • response time 응답시간 -> 매번 달라서 분포로 생각해야
  • latency 지연시간
  • outlier 특이값 -> 가끔 꽤 오래 걸리는
  • arithmetic mean 산술 평균, n개 값일 때 모든 값 더하고 /n
  • percentile 백분위
  • median 중앙값, 백분위의 중간지점
  • tail latency 꼬리 지연시간, 상위 백분위 응답시간, 서비스 사용자경험에 직접 영향
  • 상위 백분위, 99.9분위 -> p999
  • SLO, service level objection, 서비스 수준 목표
  • SLA, service level aggreement, 서비스 수준 협약서
  • queueing delay 큐 대기 지연
  • head-of-line blocking 선두 차단: 서버는 병렬로 소수의 작업만 처리하기에 소수의 느린 요청 처리만으로도 후속 요청 처리가 지체되는 현상
  • tail latency amplification 꼬리 지연 충돌: 작은 비율의 백엔드 호출만 느려도 최종 사용자 요청이 여러번 백엔드를 호출하면 느린 호출이 발생할 가능성이 증가하여 최종 사용자 요청 중 많은 비율의 응답시간이 결국 느려짐

 

부하대응접근 방식

  • scaling up 용량 확장 = vertical scaling 수직 확장, 강력한 장비
  • scaling out 규모 확장 = horizontal scaling 수평 확장, 다수의 장비 -> shared-nothing 비공유 아키텍쳐

 

유지보수성)

  • operability 운용성
  • simplicity 단순성
  • evolvability 발전성
    1. extensibility 유연성
    2. modifiability 수정가능성
    3. plasticity 적응성

 

big ball of mud 커다란 진흙덩어리, 복잡도 프로젝트 수렁에 빠진

 

accidental complexity 우발적 복잡도

  • 제거? 추상화

 

발전성, agile 애자일 작업패턴

  • TDD test-driven development 테스트 주도 개발
  • refactoring 리팩토링
728x90
반응형