개발일기장

Chapter 01. 오리엔테이션 (강의1 ~ 2) 본문

책 정리/대규모 서비스를 지탱하는 기술

Chapter 01. 오리엔테이션 (강의1 ~ 2)

게슬 2021. 7. 31. 12:22
728x90

https://jpub.tistory.com/122

 

웹 개발자를 위한 대규모 서비스를 지탱하는 기술

웹 개발자를 위한 대규모 서비스를 지탱하는 기술 이 책은 현재 절판입니다. 그간 읽어주신 독자들께 감사드립니다. 출판사  제이펍 원출판사  기술평론사(技術評論社) 원서명  [Web開発者の

jpub.tistory.com

이 책으로 공부하고 정리한것.

 

강의1. 문제점 확인.

하테나를 예시로 든다. 2009년 이야기하는 것을 보면 최신 이야기는 아님.

그리고 여기서 이야기하는 것은 대규모 서비스, 구글 같은 초 대규모가 되면 또 다른 어려움이 생길 것.

소규모 서비스와 대규모 서비스의 차이.

 

1.  확장성 확보, 부하분산 필요

scale-out(서버를 횡으로 전개, 역할을 분담하거나 대수를 늘림으로써 시스템의 전체적인 처리능력을 높여서 부하를 분산하는 방법) vs scale-up(하드웨어의 성능을 높여 처리능력을 끌어올리는 방법)

Scale-out이 경제적이지만, 다양한 문제가 발생한다.

1-1.   사용자의 요청을 어떻게 분배할 것인가 -> 로드 밸런서를 사용한다.

1-2.   데이터 동기화를 어떻게 할 것인가 -> DB를 분산시켰을 때 한쪽에 저장된 갱신내용을 다른 DB가 알지 못하면 비정상 사태.

1-3.   네트워크 통신의 지연시간을 어떻게 생각할 것인가 -> 작은 데이터라도 데이터 이동엔 밀리 초가 걸리는데 컴퓨터에 있어서는 매우 긴 시간.

2. 다중성 확보

시스템은 다중성을 지닌 구성, 즉 특정 서버가 고장 나거나 성능이 저하되더라도 서비스를 계속할 수 있는 구성으로 할 필요가 있다.

Scale-out을 해서 서버 대수가 늘어나면 고장률도 필연적으로 올라간다. 웹 서비스는 언제 어떠한 경우라도 고장에 대해 견고해야 한다. 서버가 고장 나더라도 다른 시스템이 자동적으로 처리를 인계 받는 시스템 구축이 필요.

3. 효율적 운용 필요

서버 대수가 100대를 넘어서면 어떤 서버가 무슨 역할을 하고 있는지 기억하는 것이 곤란 해진다. 서버의 상황, 부하 고장 디스코 용량, 보안설정 등 -> 자동화를 하게 된다. 그래도 결국 인간이 관리하는 것.

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

개발 표준화는 어떻게 할 것인가? 언어, 라이브러리 프레임워크를 통일, 코딩 규약을 정해서 표준화, 소스코드 관리를 버전관리 시스템으로 제대로 하기 등등.

대규모 데이터에 대한 대처

컴퓨터는 디스크에서 데이터를 로드해서 메모리에 저장, CPU가 이걸 fetch해서 특정 처리를 수행. 보다 빠른 cache메모리에 caching한다.

각 단계마다 속도차가 크게 난다. 기본적으로는 OS가 이것을 관리해주지만, 데이터가 많아지면 처음부터 캐시미스가 많이 발생 -> 디스크로의 I/O가 많이 발생 -> 리소스를 잡아먹어서 전체의 속도저하를 초래한다.

 

어떻게 하면 데이터를 적게 가져갈 수 있을까, 여러 서버로 분산시킬 수 있을까, 필요한 데이터를 최소한의 횟수로 읽어 들일 수 있을까 등의 본질적인 과제

 

강의2. 계속 성장하는 서비스와 대규모화의 벽

웹 서비스의 어려움

다른 애플리케이션에 비해 어려운 원인은 서비스가 계속해서 성장해간다는 점. 데이터와 트래픽도 늘어난다. 서비스가 성장하면 시스템 확장이 필요해지는 것.

하테나는 처음에 펜티엄PC1, ADSL회선하나뿐. 서비스가 늘어남에 따라 서버 1대로는 다 처리할 수 없어 서비스가 정지해버리는 일이 빈번하게 발생했다. 하지만 상용 로드벨런서는 고가여서 오픈소스 소프트웨어를 활용한다.

1. 시행착오를 거듭한 시스템 규모확장

라우터는 Linux 박스로 저가에 구축, HTTP요청은 아파치의 mod_rewrite대용, DB분산은 MySQL의 레플리케이션 기능을 사용 등 고생 많이 했음.

 

2. 데이터 센터로의 이전, 시스템 쇄신

2-1. 증가해가는 트래픽이나 부하에 대해 계획적으로 대응할 수 없었던 점이 실패 원인.

2-2. 사전에 기존 시스템의 부하상황을 정리, 각 서비스의 구성 중에 병목지점을 측정, 판정하고 I/O 부하가 높은 서버는 메모리를 중요시, CPU 부하가 높은 서버는 CPU를 중요시하는 형태로 서버 용도에 맞게 최적의 구성을 갖는 하드웨어를 준비.

2-3. 다중화의 경우 로드밸런서, 자동감시 기능 SWLVS, keepalived를 도입,

2-4. 서버 교체에 있어서는 OS 가상화도 진행해서 서버 가동률을 높임과 동시에 유지보수성을 높임

2-5. 서버의 정보관리를 위해 독자적인 웹 기반 서버 정보관리 시스템 개발

2-6. 시스템 구성만 아니라 APP의 각종 로직이나 DB 스키마 등의 재검토 비효율적인 부문을 서서히 배제

시스템의 성장전략

어느 정도의 수용능력 관리나 서비스 설계 시에 필요 이상으로 데이터를 증가시키지 않도록 하는 설계를 포함시키는 것이 좋다. -> 미니멈 스타트

728x90
Comments