분산 웹 시스템 설계 시 판단 기준

https://d2.naver.com/helloworld/206816

고려사항

  1. 가용성(Availability)

    • 중요한 컴포넌트의 이중화

    • 실패가 발생 시 빠른 복구 방법

    • 문제 발생 시 전면 장애가 발생하지 않도록 구성(graceful degration)

  2. 성능(Performance)

    • 빠른 응답

    • 낮은 레이턴시

  3. 신뢰성(Reliability)

    • 동일한 요청에는 동일한 결과를 제공해야 함

    • 시스템이 항상 정상적으로 동작해야 함

  4. 확장성(Scalability)

    • 더 많은 부하 처리를 위해 처리량을 증가시키기 위한 노력

    • 얼마나 많은 트래픽을 처리할 수 있는지

    • 저장 공간을 추가하기가 얼마나 쉬운지

    • 얼마나 더 많은 트랜젝션을 처리할 수 있는지

  5. 관리성(Manageability)

    • 쉽게 운용 가능한 시스템 설계

    • 문제 발생 시 분석이 용이해야 함

    • 문제를 이해하기 쉬워야 함

    • 업데이트와 수정이 쉬워야 함

  6. 비용(Cost)

    • 시스템을 빌드하는데 걸리는 시간

    • 시스템을 실행 시키는데 투여되는 운용 노력의 양

    • 모든 고려사항에 대해 필요한 교육 비용

  7. 읽기와 쓰기 (Read & Write)

    • 읽기는 비동기일 수 있음

    • gzip, chuncked transfer encoding 으로 성능 최적화 가능

    • 일반적으로, 웹서버의 초당 읽기 요청 처리수 > 최대 커넥션 수

    • 쓰기는 업로드 동안 커넥션을 열어 놓아야 함

    • 서버의 동시 커넥션이 100이라면 동시에 100개의 쓰기만 처리 가능

    • 읽기와 쓰기 분리 시 독립적인 확장이 가능

  8. 이중화(Redundancy)

    • 중요한 핵심 기능은 여러 개가 동시에 동작하도록 하는 것이 필요

설계 방식

  1. SOA(Service-Oriented Architecture)

  2. 기능별로 서비스를 구성하는 방식

  3. 각각의 서비스는 다른 서비스와 상호 작용을 위한 추상화된 인터페이스 제공

  4. 객체지향 프로그래밍과 유사

주의사항

  • 하나를 향샹 시키면 다른 하나를 희생해야 할 수 있음(예: 서버 수평 확장 시 관리성과 비용 증가)

  • 시스템 설계 시 확장성을 미리 고려하는 것은 결과적으로 시간과 자원을 절약하는데 도움

Last updated