Transcript
Page 1: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

서버를 위한 동시성 모델과Staged Event Driven Architecture

2011.12.17

chois79

Page 2: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

Contents

• 인터넷 서비스 사용 동향

• 서버 이슈

• 동시성을 위한 서버 모델

– 스레드 기반 모델

– 이벤드 기반 모델

• Staged Event Driven Architecture

• 적용 사례

• 결 론

Page 3: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

인터넷 서비스 사용 동향 (1/2)

• 인터넷 서비스를 이용하는 사용자 수의 급증

페이지 뷰: 1조

유니크 방문자: 8억

페이지 뷰: 240억

유니크 방문자: 3,700만

자료 출처: DoubleClick Ad Planner

Page 4: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

인터넷 서비스 사용 동향 (2/2)

• 순간 트래픽 폭증 현상

Page 5: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

서버 이슈

• 동시에 많은 사용자에게 서비스를 제공해야 한다

– 스레드 기반 모델

– 이벤트 기반 모델

• 순간적으로 사용량이 급증하는 상황에서도 정상적인 서비스가

가능해야 함

– 순간 최대 사용량에 맞추어 장비를 마련하는 것은 현실적으로 불가능

– 로드 관리를 위한 특별한 프레임웍은 없음

Page 6: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

동시성을 위한 서버 모델

Page 7: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

스레드 기반 모델

• 스레드란?

– 경량 프로세스

– 운영체제에서 스케쥴링하는 최소 단위

– 프로세스에 비해 컨텍스트 스위칭 비용이 적음

– 스택을 제외한 Heap 및 코드 영역 공유

– 실행하는 작업이 서로 독립적일수록 더 나은 성능을 가짐

Page 8: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

스레드 기반 서버 모델

• 서비스 요청당 하나의 스레드를 생성하여 처리

– 코드가 직관적이고, 개발하기 편리하다

– Ex) 스레드 기반 HTTP 서버: apache, tomcat

Page 9: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

스레드 기반 서버 모델의 이슈

• 스레드를 많이 생성할 경우 성능 저하가 발생

– 리소스 낭비: Jdk 1.6 기준 1M 스택 사이즈

– 컨텍스트 스위칭, 스레드 생성 및 소멸에 따른 오버헤드

Page 10: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

스레드 기반 모델에서의 부하 관리

• 스레드의 개수를 제한하는 방법

– 스레드 풀을 사용하여 최대 개수를 제한하고, 생성에 따른 오

버헤드를 감소

• 스레드의 개수를 어떻게 결정할 것인가?

– 부하 테스트 이외에는 방법이 없음

Page 11: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

이벤트 기반 모델

• Event-Driven Architecture?

– 이벤트란 어플리케이션 내에서 중요한 상태의 변화

• EX) Network or Disk I/O 읽기 준비 상태, 완료 상태, 타이머 등

– 생성 및 핸들링 모듈로 구성, 서로 다른 프로세싱 유닛에서 동작

– 일반적으로 넌블럭킹 IO와 같이 사용되며, 콜백을 이용하여 상태 변

화에 따른 동작을 등록

– 스레드 모델에 비해 컨텍스트 스위칭 부하가 작음

Page 12: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

이벤트 기반 서버 모델

• 서비스는 FSM(finite state machine)로 구성되고, 최소한의 스레드를 생성하

여 각 이벤트를 연속해서 처리

– 모든 이벤트가 블럭킹 없이 수행될 경우 이상적인 스레드의 수는 코어 + 1

– 스레드 모델 보다 프로그래밍의 복잡도가 증가

– EX) 이벤트 기반 웹 서버: Nginx

Page 13: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

이벤트 기반 서버 모델의 이슈

• 코드의 모듈화가 어려움

• 이벤트의 순서 제어가 어려움

• 블럭킹 작업을 최소화 해야 함

– 스레드를 사용하여 이벤트 처리 간의 블럭킹을 최소화

• 스케쥴러의 이벤트 큐가 풀이 될 경우 오류 발생

Page 14: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

이벤트 기반 모델의 부하 관리

• 트래픽이 급증하는 상황에서도 안정적인 서비스가 가능

– 적은 수의 스레드가 순차적으로 이벤트 처리

– 이벤트 큐의 크기에 의해 동시에 받아 들일 수 있는 요청 수가 결정

Page 15: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

STAGED EVENT DRIVEN ARCHITECTURE

Page 16: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

Overview

• 스레드 + 이벤트 기반 모델

– http://www.eecs.harvard.edu/~mdw/proj/seda/

• 이벤트 기반 Stage의 네트워크로 구성

– 각각의 Stage는 서로 독립적으로 구성

Page 17: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

Goals

• 효과적인 이벤트 기반 동시성 제공

• 동적인 스레드 풀 관리

• 코드 모듈화를 위한 구조화된 큐 관리

• 자동화된 부하 관리

• 자동화된 리소스 관리

Page 18: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

Stage 란?

• Stage는 이벤트 핸들러, 큐, 스레드 풀, 컨트롤러로 구성

• 이벤트는 스레드에 의해 처리됨

– 큐에 있는 이벤트를 처리하고 결과를 다음 Stage의 큐로 전달

• Stage의 동작은 컨트롤러에 의해 제어됨

Page 19: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

부하 관리

• 시스템 전체 부화 관리 Stage 별 부하 관리

• Stage 상태 모니터링을 통한 부하 관리

– 스레드 수의 조절

– 상태에 따른 처리 동작을 변경

• Ex) 진입 제어…

Page 20: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

특 징

• Stage 별 부하 관리가 가능

• 배치 작업이 쉽다

• 모듈화가 용이

– 이벤트 기반 모델에 비해 개발이 용이

– Stage별 분산 처리가 가능

Page 21: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

이 슈

• 의존성이 있는 작업

• Stage별 효율적인 스레드 수 할당

• 효율적인 Stage 분할

• 2007년 성능 문제가 제기되어 더 이상 연구가 중지된 상태

– But, 성능 보다 부하 관리와 개발의 용이성에 초점을 맞춘 구조

Page 22: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

적용 사례

• Dynamo

– Amazon’s Key-value 기반 NoSQL 서버

– 리퀘스트를 SEDA의 Stage와 유사한 이벤트 파이프라인으로 구성

• Cassandra

– 컬럼 기반 NoSQL 서버

– 페이스 북에 의해 개발, 2008년 오프 소스로 공개

– Read, Mutation, Gossip, Response, Load Balancer …

Page 23: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

결 론

• 스레드 기반 모델

– 개발이 용이하지만, 오버헤드가 큼

• 이벤트 기반 모델

– 성능이 뛰어나지만, 프로그램의 복잡성이 높음

• Staged Event Driven Architecture

– 스레드 + 이벤트 기반 모델

– 효율적인 부하 관리가 가능: Stage 단위 관리

Page 24: 서버를 위한 동시성 모델과 Staged eventdrivenarchitecture

Q&A


Recommended