분산 웹 시스템 설계 시 판단 기준
https://d2.naver.com/helloworld/206816
고려사항
가용성(Availability)
중요한 컴포넌트의 이중화
실패가 발생 시 빠른 복구 방법
문제 발생 시 전면 장애가 발생하지 않도록 구성(graceful degration)
성능(Performance)
빠른 응답
낮은 레이턴시
신뢰성(Reliability)
동일한 요청에는 동일한 결과를 제공해야 함
시스템이 항상 정상적으로 동작해야 함
확장성(Scalability)
더 많은 부하 처리를 위해 처리량을 증가시키기 위한 노력
얼마나 많은 트래픽을 처리할 수 있는지
저장 공간을 추가하기가 얼마나 쉬운지
얼마나 더 많은 트랜젝션을 처리할 수 있는지
관리성(Manageability)
쉽게 운용 가능한 시스템 설계
문제 발생 시 분석이 용이해야 함
문제를 이해하기 쉬워야 함
업데이트와 수정이 쉬워야 함
비용(Cost)
시스템을 빌드하는데 걸리는 시간
시스템을 실행 시키는데 투여되는 운용 노력의 양
모든 고려사항에 대해 필요한 교육 비용
읽기와 쓰기 (Read & Write)
읽기는 비동기일 수 있음
gzip, chuncked transfer encoding 으로 성능 최적화 가능
일반적으로, 웹서버의 초당 읽기 요청 처리수 > 최대 커넥션 수
쓰기는 업로드 동안 커넥션을 열어 놓아야 함
서버의 동시 커넥션이 100이라면 동시에 100개의 쓰기만 처리 가능
읽기와 쓰기 분리 시 독립적인 확장이 가능
이중화(Redundancy)
중요한 핵심 기능은 여러 개가 동시에 동작하도록 하는 것이 필요
설계 방식
SOA(Service-Oriented Architecture)
기능별로 서비스를 구성하는 방식
각각의 서비스는 다른 서비스와 상호 작용을 위한 추상화된 인터페이스 제공
객체지향 프로그래밍과 유사
주의사항
하나를 향샹 시키면 다른 하나를 희생해야 할 수 있음(예: 서버 수평 확장 시 관리성과 비용 증가)
시스템 설계 시 확장성을 미리 고려하는 것은 결과적으로 시간과 자원을 절약하는데 도움
Last updated