[Akka] Akka란?

smlee·2023년 8월 21일
0

Akka

목록 보기
1/50
post-thumbnail

Akka

Akka는 Open Source Tool Kit으로 JVM 상에서 동시성과 분산 애플리케이션을 단순화하는 런타임이다. Erlang(범용 병렬 프로그래밍 언어 / 함수형 언어)으로부터 영향을 받아 Actor 기반의 동시성이 두드러진다.

Actor Model
액터 모델은 얼랭(Erlang)으로 구체화된 개념이며, 스웨덴 통신회사인 에릭슨에서 고도의 동시성 프로그램을 구현할 때 사용했다.
Actor는 thread 또는 객체구별되는 추상이다. Actor가 차지하는 메모리 공간은 어느 다른 쓰레드 혹은 액터가 접근할 수 없다. 즉, 액터 내부에서 일어나는 일은 다른 누구와도 "공유"되지 않는다.
액터 내부의 자원이 공유되지 않으므로 lock이나 synchronized 같은 키워드는 필요가 없다.
Actor Model은 이러한 Actor를 기본 단위로 설정한다. 이러한 actor들은 메시지만 주고받으므로 race condition이나 deadlock과 같은 문제를 고민하지 않아도 된다.

Akka는 비동기화 Message 방식의 Actor Model을 구현하여 Erlang의 라이브러리가 지원하는 고도의 동시성 쓰기, 이벤트 주도 애플리케이션을 Java와 Scala에 유사한 기능을 도입하고자 한 라이브러리다.

Akka의 특징

  1. Actor와 Streams를 사용하여 간단한 동시 분산 시스템
  2. 고성능 : 단일 시스템에서 최대 초당 5천만 개의 메시지 / 적은 메모리 / non blocking
  3. 분산 시스템 : actor간 메시지 송수신 / 시스템 하나가 죽어도 다른 시스템에 큰 영향 X

Akka를 사용하는 이유

위쪽에서 Actor Model에 대해 알아보며 왜 Actor Model이 thread 대신 사용되는지를 알게 되었다. 이를 더 자세히 풀어 써볼 예정이다.

CPU 사양이 발전하며 멀티 코어 제품군이 많아졌고, 이에 따라 멀티 스레드 프로그래밍이 발전하였다. 하지만 멀티 스레드 프로그래밍 방식에는 동시성 문제, 가시성 문제와 같은 여러 문제가 발생하였고, Actor Model을 통해 해결하고자 한 것이 Akka다.

위 이미지는 Actor의 구조이다. Actor 내부에는 다른 객체나 스레드가 접근할 수 없으므로
Actor간 통신은 Message 전달이며, Event가 발생하면 비동기적으로 하나의 Actor에서 단일 큐를 사용한다. 여러 액터가 각각의 Message Queue를 이용하여 thread보다 actor의 메모리가 적다.

Actor 내부 요소

  1. Actor Ref : 다른 Actor와 통신을 위해 사용되며, 프록시 디자인 패턴을 따름
  2. Message Dispatcher : 들어오는 Message를 받아 Actor에게 전달하며, 스케줄링 역할 및 Actor의 처리량을 조율하여 리소스를 제공 [ 종속성 줄임 / Actor의 상태를 확인하여 메시지 처리 여부 판단 ]
  3. Mail Box : 내부에 메시지가 들어온 큐가 존재한다. 큐이므로 FIFO 순서를 통해 메시지를 선택하고 처리함.
  4. State : 액터 객체가 가지는 몇 가지 상태(변수) [counter, set of listeners, pending requests]
  5. Behavior : 메시지 처리에 따른 액터의 상태 변화 제어, child actor 생성 및 제거

📚 Reference

0개의 댓글