개발일기장

Appendix. 현대 웹 서비스 구축에 필요한 실전 기술 본문

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

Appendix. 현대 웹 서비스 구축에 필요한 실전 기술

게슬 2021. 8. 5. 10:46
728x90

추가강의1. 작업 큐 시스템

웹 서비스와 요청

웹 서비스는 기본적으로 요청이 동기적으로 실행된다. 따라서 계속 성장해가는 웹 서비스에서는 데이터가 축적되면서 점점 무거워진다. 성능이 악화되고 서비스 사용자 경험에 영향을 주는 경우가 발생. 이런 경우 작업큐 시스템을 사용함으로써 나중으로 미뤄도 되는 처리를 비동기로 실행하고, 사용자 경험도 개선할 수 있다.

작업큐 시스템 입문

비동기를 원하는 처리를 독립된 스크립트로 해서 해당 스크립트를 애플리케이션 내부에서 호출하는 방법. 이거는 양이 많아지면 문제가 생기므로 성능상 단점.

어느 정도 양이 있는 비동기 처리를 수행하려면 작업 큐 와 워커를 세트로 한 작업큐 시스템을 사용하는 것이 일반적이다.

 

클라이언트 (웹 애플리케이션)- 작업을 투입하다. 작업을 투입한 다음 처리를 계속 진행할 수 있다

작업큐 작업을 쌓는다.

워커 작업큐를 참조하고 미실행된 작업을 추출해서 작업을 실행한다.

 

로그분석

작업 처리시간과 실제로 처리가 수행되기까지의 지연시간을 기록한다. 측정함으로써 투입된 작업 종류와 양에 대해 워커의 처리능력이 충분한지 여부를 확인할 수 있다. 특히 지연시간이 길어졌을 때에는 아무리 비동기 처리라고 하더라도 사용자 경험상 문제가 되는 경우도 있다. 이런 경우는 워커의 튜닝과 보강을 생각해야 할 시점.

추가강의2. 스토리지 선택

증가하는 데이터를 어떻게 저장할까?

수십GB, TB를 넘는 데이터를 다루는 스토리지는 약간의 구성 변경이나 액세스 패턴 변화로 예상 밖으로 응답속도가 저하되는 경우가 있다. 따라서 적절한 스토리지를 선택하는 것은 대단히 중요하다.

업로드 된 사진 데이터나 블로그 본문과 같이 본질적으로 없어질 수 없는 원본데이터부터, 이를 가공한 가공데이터, 캐시와 같이 사라져도 성능상의 문제 이외에는 다른 문제가 없는 데이터까지 다양한 특성이 있다.

원본데이터는 서비스의 근본적인 신뢰성과 관계되어 있으므로 그에 상응하는 비용을 들여서 최상급 신뢰성을 확보해야 한다.

 

서비스 성장을 예측하는 것은 어려우며 기술도 진화해가므로 스토리지 설계를 전혀 갱신하지 않고 가는 것도 어렵지만, 가능한 한 특성에 맞는 스토리지를 선택함으로써 하나의 스토리지를 오래도록 사용하는 게 더 바람직할 것이다.

스토리지 선택의 전제조건

1. 평균 크기

2. 최대 크기

3. 신규추가빈도

4. 갱신빈도

5. 삭제빈도

6. 참조빈도

크기에 요구되는 신뢰성, 허용할 수 있는 장애 레벨, 예산 같은 부분도 중요하다.

RDBMS

표 형식으로 데이터를 저장하고 SQL 언어로 데이터 조작을 수행하는 시스템 범용성이 높다. MySQL이나 PostgreSQL 등이 있으며 각기 특성이 있다.

주요 스토리지 엔진으로는 MyISAM, InnoDB가 있다.

 

MyISAMMySQL의 표준 스토리지 엔진으로 insert 조작을 빠르게 할 수 있다. 시작, 정지가 빠르며 테이블 이동, 변경을 직접 할 수 있는 등 운용은 용이하지만, 트랙잭션 기능이 없고, 테이블 락으로 되어 있어서 갱신이 많은 용도로는 부적합.

InnoDB는 사전에 정의한 소수의 파일에 데이터를 저장하고, 트랜잭션을 지원하며, 비정상 종료 시 복구기능이 있고, 데이터 갱신이 로우락으로 되어 있는 장점이 있다.

분산 key-value 스토어

Key-value를 저장하기 위한 심플한 스토리지이고, 분산 key-value 스토어는 네트워크를 지원함으로써 다수의 서버로 확장시키는 기능을 지닌 것이다. RDBMS에 비해 기능적으로는 부족하지만, 성능이 10~100배 이상 인 것이 특징이다. Redis같은거임.

분산 파일 시스템

파일시스템의 특성상 보통은 어느 정도 이상인 크기의 데이터를 저장하는 데 적합하다. NFS와 같이 그것이 고려되고 있는 구현을 제외하고 작은 데이터가 대량으로 존재하는 용도에는 적합하지 않은 경우가 많다.

추가강의3. 캐시 시스템

웹 애플리케이션의 부하와 프록시/캐시 시스템

웹 애플리케이션의 부하가 증가해서 시스템 용량이 부족해졌을 때에는 AP 서버나 DB서버를 증설함으로써 대응할 수도 있지만, HTTP 레벨의 캐싱을 수행하는 HTTP가속기를 사용함으로써 낮은 비용으로 효과가 높은 대책을 세울 수 있다. 포워드 프록시와 리버스 프록시 두종류가 있다. 포워드는 내부 클라이언트가 외부로 갈 때, 리버스는 외부 클라이언트가 서버로 요청할 때 캐시 되어있는 데이터를 반환한다.

추가강의4. 계산 클러스터

대량 로그 데이터의 병렬처리

대량으로 쌓인 로그 데이터의 처리는 이를 한 번에 읽어 들이는 것 만도 어려우며, 통계처리나 분석을 하려고 하면 엄청나게 큰 계산 리소스를 필요로 한다. 이와 같은 처리를 빠르게 수행하기 위해서는 병렬처리가 가능한 계산 클러스터가 필요하다

MapReduce, Hadoop

이거는 직접 찾으셈. ^^

 

 

 

728x90
Comments