대규모 서비스를 제공하며 어떤 문자나 어려움을 겪을 수 있을까요?
이번 장에서는 대규모 서비스를 운용하며 필요한 개념에 대해 설명합니다.
서버 1개로 처리할 수 없는 대량의 액세스를 어떻게 처리할까요??
이 문제를 해결하기 위해서는 2가지 방법이 있을 수 있습니다.
스케일 아웃
: 서버를 횡으로 전개, 즉 서버의 역할을 분담하거나 대수를 늘림으로써 시스템의 전체적인 처리 능력을 높여 부하를 분산합니다.
스케일 업
: 하드웨어의 성능을 높여 처리 능력을 끌어올립니다.
하드웨어의 성능은 가격과 비례하지 않으며, 대량생상되는 보급형 하드웨어 여러개를 구하는 것이 훨씬 더 저렴하고 가성비 좋기에 해당 방법을 사용합니다.
하지만 서버 1대였을 때에 비해서 다양한 문제가 발생할 수 있습니다.
등등 스케일 아웃에는 다양한 문제를 동반합니다.
시스템에서의 다중성이란 특정 서버가 고장 나거나 성능이 저하되더라도 서비스를 계속할 수 있는 개념을 의미합니다.
서비스가 대규모화되면 될수록 시스템 정지의 사회적 충격도 늘어남으로 다중성 확보가 중요해 집니다.
서버 대수가 100대
, 200대
가 넘어가면 특정 서버가 무슨역할을 하고 있는지 기억해두는 것 조차 곤란해집니다. 서버의 상황을 파악하는 툴과 이를 관리하는 감시 소프트웨어를 올바르게 구축하는 것이 필요합니다.
대규모 서비스가 되면 당연히 혼자서는 개발이나 운용이 어려워지므로 여러 기술자가 역할을 분담하게 됩니다.
이에 따라 표준화, 소스코드 관리 정책 등 다양한 표준화가 필요하게 됩니다. 개발자 개개인과 팀에서 표준화 규칙을 잘 규정하고, 팀 매니지먼트가 필요하게 됩니다.
해당 책에서 가장 크고 넓게 다루는 것이 데이터량에 대한 것입니다.
컴퓨터틑 보조기억장치(HDD
, SDD
)에서 데이터를 로드해서 메모리에 저장하고, 메모리에 저장된 데이터를 CPU
가 패치하여 특정 처리를 수행합니다. 이 과정 중 처리 속도간의 차이를 극복하기 위한 캐싱이 활용됩니다. 현대 OS
는 이런저런 방법을 시도하며 다중 캐싱 전략을 수행하며, 캐싱 뿐만 아니라 속도차를 의식한 데이터 구조, 구현을 채용하고 있습니다.
그러나 데이터량이 많아지면 자연스럽게 캐시 미스가 많이 발생하게 되고, 그 결과로 I/O
속도가 느려지게 됩니다. I/O
대기에 들어선 프로그램은 읽기 완료되기 까지 대기하기 때문에 시스템 전체의 속도저하를 초래하게 됩니다.
웹 서비스는 사용자가 늘어나면 늘어날 수록 저장해야할 데이터 및 트래픽도 계속 늘어나게 됩니다. 서비스가 성장함에 따라 시스템 확장을 위해 무엇을 해야하는지 살펴봅니다.
책의 저자는 하테나라는 회사에서의 웹 서비스의 성장과 그 경험에 대해 서술하고 있는데 이에 대해 간략히 요약하면 다음과 같습니다.
하테나는 4번 과정을 겪은 후 인터넷 데이터 센터를 구축하고, 네트워크 설계를 수정하였습니다.
I/O
가 중요한 서버, CPU
가 중요한 서버로 최적의 구성으로 하드웨어를 구축하였습니다.LSV + keepalived
를 도입하여 활용하였습니다.DB
스키마 최적화 및 OS
가상화 진행개발 담당, 인프라 담당이 하나가 되어 시스템 품질개선을 계속 진행합니다.
초기 서비스 부터 완벽한 부하분산을 구축하고자 한다면 비용이 너무 많이 들게 됩니다. (웹 서비스의 성공 가능성이 낮기에)
따라서 저자는 불완전하게 시작해도 괜찮지만, 어느정도의 수용능력 관리나 서비스 설계 시 필요 이상으로 데이터를 증가시키지 않도록하는 설계를 유지하도록 추천합니다. -알잘딱깔센 할 것-
엔지니어링에 관한 팀은 크게 두 부서로 나뉘어져 있습니다.
따라 서비스 개발부에서 인프라에 영향을 줄만한 서비스를 구동한다면 상호간의 협력을 통해 대응하게 됩니다.
그 이외에도 저자는 하테나의 개발 과정, 개발 툴, 데이터, 미들웨어, 프레임워크 등을 소개해주는데 이는 각자 본인의 회사의 상황에 따라 알잘딱깔센
해야 합니다.
-> 신입으로써 팀의 규칙에 따라야되는 지금의 상황에서는 그다지 크게 와닫지 않음