본문 바로가기

Back-end/Basic

SEDA(Staged Event-Driven Architecture)

SEDA(Staged Event-Driven Architecture)란?

 

단계별 이벤트 드리븐 아키텍처

  • 큐로 연결된 스테이지에서 복잡한 이벤트 드리븐 어플리케이션작은 부분으로 나누는 것
  • 스레드 기반 동시 운영 모델과 연관돼 발생할 수 있는 높은 오버헤드를 피할 수 있음
  • 각각의 이벤트 큐로 실행함으로써, 서비스는 좋은 컨디션으로 유지가 가능
  • 서비스의 능력에 비해 리소스들이 과도하게 커밋되는 것을 막아주는 역할을 함
  • 막대한 서버 접속 수요를 지원하며, 서비스 구축을 보다 간편하게 만들어 줌
  • SEDA에서의 최소 단위는 Queue

 

서버 이슈

  • 동시에 많은 사용자에게 서비스를 제공
    - 스레드 기반 모델: 개발이 용이하지만, 오버헤드가 큼
    - 이벤트 기반 모델: 성능이 뛰어나지만, 프로그램의 복잡성이 높음

  • 순간적으로 사용량이 급증하는 상황에서도 정상적인 서비스 가능
    - 순간 최대 사용량에 맞추어 장비를 마련하는 것은 현실적으로 불가능
    - 로드 관리를 위한 특별한 프레임워크는 없음

 

Overview

  • 스레드 + 이벤트 기반 모델
  • 이벤트 기반 Stage의 네트워크로 구성
    - 각각의 Stage는 서로 독립적으로 구성

 

Goals

  • 효과적인 이벤트 기반 동시성 제공
  • 동적인 스레드 풀 관리
  • 코드 모듈화를 위한 구조화된 큐 관리
  • 자동화된 부하 관리
  • 자동화된 리소스 관리

 

Stage

  • Stage는 이벤트 핸들러, 큐, 스레드 풀, 컨트롤러로 구성
  • 이벤트는 스레드에 의해 처리됨
    - 큐에 있는 이벤트를 처리하고 결과를 다음 Stage의 큐로 전달
  • Stage의 동작은 컨트롤러에 의해 제어됨

 

부하관리

  • 시스템 전체 부화 관리 -> Stage 별 부하 관리
  • Stage 상태 모니터링을 통한 부하 관리
    - 스레드 수의 조절
    - 상태에 따른 처리 동작을 변경

 

 

참고: https://www.slideshare.net/HyeonSeokChoi/staged-eventdrivenarchitecture

참고: https://snepbnt.tistory.com/422

'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