SEDA(Staged Event-Driven Architecture)란?
단계별 이벤트 드리븐 아키텍처
- 큐로 연결된 스테이지에서 복잡한 이벤트 드리븐 어플리케이션을 작은 부분으로 나누는 것
- 스레드 기반 동시 운영 모델과 연관돼 발생할 수 있는 높은 오버헤드를 피할 수 있음
- 각각의 이벤트 큐로 실행함으로써, 서비스는 좋은 컨디션으로 유지가 가능함
- 서비스의 능력에 비해 리소스들이 과도하게 커밋되는 것을 막아주는 역할을 함
- 막대한 서버 접속 수요를 지원하며, 서비스 구축을 보다 간편하게 만들어 줌
- SEDA에서의 최소 단위는 Queue
서버 이슈
- 동시에 많은 사용자에게 서비스를 제공
- 스레드 기반 모델: 개발이 용이하지만, 오버헤드가 큼
- 이벤트 기반 모델: 성능이 뛰어나지만, 프로그램의 복잡성이 높음 - 순간적으로 사용량이 급증하는 상황에서도 정상적인 서비스 가능
- 순간 최대 사용량에 맞추어 장비를 마련하는 것은 현실적으로 불가능
- 로드 관리를 위한 특별한 프레임워크는 없음
Overview
- 스레드 + 이벤트 기반 모델
- 이벤트 기반 Stage의 네트워크로 구성
- 각각의 Stage는 서로 독립적으로 구성
Goals
- 효과적인 이벤트 기반 동시성 제공
- 동적인 스레드 풀 관리
- 코드 모듈화를 위한 구조화된 큐 관리
- 자동화된 부하 관리
- 자동화된 리소스 관리
Stage
- Stage는 이벤트 핸들러, 큐, 스레드 풀, 컨트롤러로 구성
- 이벤트는 스레드에 의해 처리됨
- 큐에 있는 이벤트를 처리하고 결과를 다음 Stage의 큐로 전달 - Stage의 동작은 컨트롤러에 의해 제어됨
부하관리
- 시스템 전체 부화 관리 -> Stage 별 부하 관리
- Stage 상태 모니터링을 통한 부하 관리
- 스레드 수의 조절
- 상태에 따른 처리 동작을 변경
참고: https://www.slideshare.net/HyeonSeokChoi/staged-eventdrivenarchitecture
'Back-end > Basic' 카테고리의 다른 글
성능, 부하, 스트레스 테스트 (0) | 2022.03.08 |
---|---|
TCP 3, 4-way handshake (0) | 2022.03.07 |
Kafka Streams API (0) | 2022.03.06 |
Cloud Native 란? (0) | 2022.03.06 |
쿠버네티스(kubernetes)를 왜 쓰는가? (0) | 2022.03.06 |