[대규모 서비스를 지탱하는 기술] 1장 정리

2021. 7. 29. 19:19기타 개발 스킬

'대규모 서비스를 지탱하는 기술' 책을 읽고 정리하였습니다.

무엇을 '대규모'라고 하는가

취업 준비할 때 공고를 보면, 대규모 서비스를 운영해본 경험이 있는 분을 우대한다는 문구가 많았다. '무엇을, 어떤 것을 보고 대규모 서비스라고 하는지' 궁금했다.

대규모 서비스는 1대의 서버로 운영할 수 없는 서비스 , 즉 서버 확장이 필요한 서비스라고 한다. 고객은 웹 사이트, 앱 및 플랫폼에서 항상 똑같은 서비스를 제공받길 기대한다. 책을 주문하고 있는데 갑자기 웹 사이트가 느려지거나 404 페이지가 난다면? 이는 고객 만족도를 떨어트린다. 여러 번 발생한다면? 고객은 다신 서비스를 이용하지 않거나 다른 경쟁 서비스로 이동할 수 있다. 따라서 회사 입장에선 서비스가 더 빠르게 성장하길 원하기 때문에 확장성을 고려해야할 수 밖에 없는 것이다.

그렇다면 서버 확장하는 방법은 무엇이 있을까

What is Scaling

  • 확장성은 시스템이 제대로 기능하기 위해 요구사항에 맞추어 용량 및 성능을 조정하는 것이다.

Scale up

  • CPU 변경/ RAM 추가 또는 고성능 서버로 교환하여 기존 서버의 성능이나 용량 증강시켜, 더욱 처리 능력을 향상시키는 것이다.
  • 하나의 서버의 능력을 증강하기 때문에 수직 스케일링(vertical scaling)이라고 한다.
  1. 확장성
    • 하드웨어 허용 범위 내에서만 확장 가능하다. 그 이상으로 업그레이드를 하고자 한다, 새로운 장비로 교체해야 한다.
    • 새 장비로 교체할 때, 데이터 전체의 마이그레이션 작업이 필요해 HA 구성이 아닌 이상 다운타임이 불가피하다. 저장된 데이터양에 따라 작업이 수개월 걸릴 수 있다.
  2. 비용
    • 추가적인 네트워크 연결 없이 용량을 증강할 수 있다.
    • 추가되는 용량이나 업그레이드 비용만 부가된다.
    • 인프라의 노후화로 인한 업그레이드 주기는 이전보다 좁혀지는 추세이다. 최근에는 짧게 3년에서 최대 7년까지로 잦은 교체 주기로 인한 비용을 고려했을 때 scale out 대비 상대적으로 불리하다
  3. 장애
    • Server 한 대에 모든 부하가 집중되므로 장애 시 영향을 크게 받을 수 있는 위험성이 있음
  4. 활용
    • 온라인 금융거래와 같이 워크플로우 기반에 빠르고 정확하면서 단순한 처리가 필요한 OLTP(Online Transaction Processing) 환경에서는 고성능의 스케일업 방식이 적합
    • 백업용 스토리지를 구축하는 데 있어서 향후 수년간 데이터 증가 폭이 미미하거나 규모가 작은 경우

Scale out

  • 기존 서버와 동일하거나 비슷한 사양의 서버 대수를 늘려 기존 서버의 성능이나 용량 증강시켜, 더욱 처리 능력을 향상시키는 것이다.
  • 사용자는 분산 파일 시스템이나 글로벌 네임스페이스(global namespace)를 통해 스토리지 서버 클러스터를 하나의 시스템으로써 인식하며, 서버를 추가로 확장하기 때문에 수평 스케일링(horizontal scaling)이라고 한다.
  1. 확장성
    • 확장이 유연하다. 장기적인 용량 증가 추이를 예측할 필요 없이 그 시점에 필요한 만큼 서버를 추가해 용량과 성능을 확장할 수 있다.(pay-as-you-grow)
    • 여러 개의 서버에 부하를 균등하게 분산시키기 위해 로드 밸런싱이 필요하다
    • 복수의 서버를 연결하기 때문에 케이블링이 복잡하다
    • 개별 노드는 scale up 된 하이엔드 하드웨어보다 상대적으로 성능이나 안정성이 떨어질 수 있다.
  2. 비용
    • 기존 서버에 새 서버를 연결해서 사용하거나 다운타임 없이 오래된 서버를 인프라에서 제거하면 된다.
    • 소프트웨어 가격이 스케일업에 비해 비싸다.
  3. 장애
    • Server 한 대가 장애로 다운되더라도 다른 server로 service 제공이 가능하다
    • 노드를 확장할수록 문제 발생의 잠재 원인 또한 추가한 만큼 늘어나게 된다
      • 여러 노드 간 데이터 직렬화 및 동기화 문제 발생 가능
      • 노드가 늘어나도 성능이 증가하지는 않고 노드 증가에 따라 수용가능한 트래픽이 늘어나 대역폭은 증가해 지연이 발생할 가능성이 있다
  4. 활용
    • 여러 노드를 연결해 병렬 컴퓨팅 환경을 구성하고 유지하려면 아키텍처에 대한 높은 이해도가 요구
    • 대량의 데이터 처리와 복잡한 쿼리가 이루어지는 OLAP(Online Analytical Processing) 애플리케이션 환경
      • 데이터 마이닝
      • 검색엔진 데이터 분석 처리
  5. 고민할 부분 Wrap up
요청을 어떻게 여러 서버에 분산할 것인가?
DB를 분산했을 때 데이터 동기화 문제처리는 어떻게 할 것인가?
분산 환경에서 주는 네트워크 지연시간(latency)은 어떻게 처리할까?
서비스간 트랜잭션 처리, 장애 복구는 어떻게 할까?
여러 대 운용은 어떻게 자동화할 것인가?

Reference