[대규모 서비스를 지탱하는 기술] Chapter 01. 대규모 웹 서비스 개발이란

Falco·2023년 9월 22일
0
post-thumbnail

대규모 웹 서비스 개발이란

대규모 서비스와 소규모 서비스

대규모 서비스를 제공하며 어떤 문자나 어려움을 겪을 수 있을까요?

이번 장에서는 대규모 서비스를 운용하며 필요한 개념에 대해 설명합니다.

확장성 확보 및 부하 분산

서버 1개로 처리할 수 없는 대량의 액세스를 어떻게 처리할까요??

이 문제를 해결하기 위해서는 2가지 방법이 있을 수 있습니다.

  • 스케일 아웃 : 서버를 횡으로 전개, 즉 서버의 역할을 분담하거나 대수를 늘림으로써 시스템의 전체적인 처리 능력을 높여 부하를 분산합니다.

  • 스케일 업 : 하드웨어의 성능을 높여 처리 능력을 끌어올립니다.

하드웨어의 성능은 가격과 비례하지 않으며, 대량생상되는 보급형 하드웨어 여러개를 구하는 것이 훨씬 더 저렴하고 가성비 좋기에 해당 방법을 사용합니다.

하지만 서버 1대였을 때에 비해서 다양한 문제가 발생할 수 있습니다.

  • 사용자의 요청을 어떻게 분배할 것인가?
    • 로드밸런서를 활용하고자 한다면 어떤 알고리즘을 활용해 분배할 것인가?
  • 데이터 동기화는 어떻게 진행할 것인가?
  • 네트워크 지연시간을 어떻게 극복할 것인가?

등등 스케일 아웃에는 다양한 문제를 동반합니다.

다중성 확보

시스템에서의 다중성이란 특정 서버가 고장 나거나 성능이 저하되더라도 서비스를 계속할 수 있는 개념을 의미합니다.

서비스가 대규모화되면 될수록 시스템 정지의 사회적 충격도 늘어남으로 다중성 확보가 중요해 집니다.

효율적 운용 필요

서버 대수가 100대 , 200대가 넘어가면 특정 서버가 무슨역할을 하고 있는지 기억해두는 것 조차 곤란해집니다. 서버의 상황을 파악하는 툴과 이를 관리하는 감시 소프트웨어를 올바르게 구축하는 것이 필요합니다.

개발자 수, 개발방법의 변화

대규모 서비스가 되면 당연히 혼자서는 개발이나 운용이 어려워지므로 여러 기술자가 역할을 분담하게 됩니다.

이에 따라 표준화, 소스코드 관리 정책 등 다양한 표준화가 필요하게 됩니다. 개발자 개개인과 팀에서 표준화 규칙을 잘 규정하고, 팀 매니지먼트가 필요하게 됩니다.

대규모 데이터량에 대한 대처

해당 책에서 가장 크고 넓게 다루는 것이 데이터량에 대한 것입니다.

컴퓨터틑 보조기억장치(HDD, SDD)에서 데이터를 로드해서 메모리에 저장하고, 메모리에 저장된 데이터를 CPU가 패치하여 특정 처리를 수행합니다. 이 과정 중 처리 속도간의 차이를 극복하기 위한 캐싱이 활용됩니다. 현대 OS는 이런저런 방법을 시도하며 다중 캐싱 전략을 수행하며, 캐싱 뿐만 아니라 속도차를 의식한 데이터 구조, 구현을 채용하고 있습니다.

그러나 데이터량이 많아지면 자연스럽게 캐시 미스가 많이 발생하게 되고, 그 결과로 I/O속도가 느려지게 됩니다. I/O대기에 들어선 프로그램은 읽기 완료되기 까지 대기하기 때문에 시스템 전체의 속도저하를 초래하게 됩니다.

성장하는 서비스와 대규모화의 벽

웹 서비스의 어려움

웹 서비스는 사용자가 늘어나면 늘어날 수록 저장해야할 데이터 및 트래픽도 계속 늘어나게 됩니다. 서비스가 성장함에 따라 시스템 확장을 위해 무엇을 해야하는지 살펴봅니다.

하테나의 성장과정 톺아보기

책의 저자는 하테나라는 회사에서의 웹 서비스의 성장과 그 경험에 대해 서술하고 있는데 이에 대해 간략히 요약하면 다음과 같습니다.

  1. 기존 1대의 서버로만 서비스를 제공하였는데, 서비스가 히트를 쳤다.
  2. 상용 로드밸런서는 너무 비쌌기에 다양한 오픈소스를 사용하여 부하를 분산하였다.
  3. 그래도 서버가 자주 터졌고, 개발자가 야간에 출근해 다시 서버를 재부팅하는 사태가 발생
  4. 다양한 서버의 다양한 호스트를 계속 추가하자 서버룸의 전력이 부족하게 되어 전류 차단기가 내려가게 되었다.

데이터 센터의 등장과 시스템 쇄신

하테나는 4번 과정을 겪은 후 인터넷 데이터 센터를 구축하고, 네트워크 설계를 수정하였습니다.

  • I/O가 중요한 서버, CPU가 중요한 서버로 최적의 구성으로 하드웨어를 구축하였습니다.
  • 로드밸런서와 가동감시 기능을 하는 오픈소스 LSV + keepalived를 도입하여 활용하였습니다.
  • DB 스키마 최적화 및 OS가상화 진행

개발 담당, 인프라 담당이 하나가 되어 시스템 품질개선을 계속 진행합니다.

시스템의 성장 전략

초기 서비스 부터 완벽한 부하분산을 구축하고자 한다면 비용이 너무 많이 들게 됩니다. (웹 서비스의 성공 가능성이 낮기에)

따라서 저자는 불완전하게 시작해도 괜찮지만, 어느정도의 수용능력 관리나 서비스 설계 시 필요 이상으로 데이터를 증가시키지 않도록하는 설계를 유지하도록 추천합니다. -알잘딱깔센 할 것-

서비스 개발의 현장

대규모 서비스를 구성하는 기술팀 체제

엔지니어링에 관한 팀은 크게 두 부서로 나뉘어져 있습니다.

  • 서비스 개발부 : 각종 서비스 구현을 담당하는 팀, 매일 어플리케이션 측면의 개선을 담당
  • 인프라부 : 서버/인프라 시스템의 운용을 담당하는 팀, 서버 준비, 데이터 센터 운용, 부하 분산 등을 담당합니다.

따라 서비스 개발부에서 인프라에 영향을 줄만한 서비스를 구동한다면 상호간의 협력을 통해 대응하게 됩니다.

그 이외에도 저자는 하테나의 개발 과정, 개발 툴, 데이터, 미들웨어, 프레임워크 등을 소개해주는데 이는 각자 본인의 회사의 상황에 따라 알잘딱깔센 해야 합니다.
-> 신입으로써 팀의 규칙에 따라야되는 지금의 상황에서는 그다지 크게 와닫지 않음

profile
강단있는 개발자가 되기위하여

0개의 댓글