Akka, Actor Model

민지킴·2021년 4월 26일
0

Actor Model ?

Actor model은 아래와 같은 개념을 가진다.

  • 첫째, 다른 액터에 한정된 개수의 메시지를 보낼 수 있다. (Send a finite number of messages to other actors.)
  • 둘째, 유한한 개수의 액터를 만들어낼 수 있다. (Create a finite number of new actors.)
  • 셋째, 다른 액터가 받을 메시지에 수반될 행동을 지정할 수 있다. (Designate the behavior to be used for the next message it receives.)
  • 마지막으로, 이러한 모든 일이 동시적으로 일어난다.

Actor는 서로간에 공유하는 자원이 없고 서로간의 상태를 건드릴 수도 없다. 오직 message만을 이용해서 정보를 전달할 수 있다.
Actor model은 1973년 칼 휴이트가 제안한 수학적 모델을 기초로 삼고 있다. 이러한 오래된 개념이 다시 관심을 받게 된 이유는 multi processing에 적합한 개념이기 때문이다. multi-core 환경을 효율적으로 활용하기 위해 여러 개의 thread를 사용하여 구현하는 것이 중요해졌다. 하지만 thread 간에 가지는 공유된 자원으로 인해 race condition, deadlock, blocking call 등의 문제가 발생하기 쉽다. 이를 회피하기 위한 방법의 하나로 actor model을 구현한 Akka가 등장했다.

———————————————————————————————————————————————————————————————————————————————————————————

Akka이란?

Akka
회사에서는 주로 사용하는 언어는 C#과 Java인데, 분산처리 환경에 대한 이야기를 보다보면 Akka에 대해 들어보게 됩니다. 그러나 저에게는 너무 생소한 개념이라 한번 정리의 필요성을 느꼈습니다.
Akka란?

  • JVM 상의 동시성과 분산 어플리케이션을 단순화 하는 오픈 소스 툴킷입니다.
  • 동시성을 위해 여러 프로그래밍 모델을 지원하며, Erlang으로부터 영향을 받아서 actor기반의 동시성이 두드러집니다.
  • Akka는 Java환경 및 .net Framework에서 이용가능하며, Actor 모델은 이제 대부분으 개발플랫폼에서 툴킷형태로 사용가능합니다.
    • Akka Scala Document
    • Akka Java Document

Akka의 기술

  1. Actor
  • 배포, 동시성, 병렬성을 위하 단순하고 높은 수준의 추상화를 제공합니다.
  • 비동기식, 비차단식, 고성능 메시지 기반의 프로그래밍 모델입니다.
  • 매우 가벼운 이벤트 기반의 프로세스입니다. (GB당 수백만의 힙 메모리)
  1. Fault Tolerance (내결함성)
  • "let-it-crash" 의미가 있는 Supervisor hierarchies(감독 계층구조)를 가집니다.
  • Actor 시스템은 여러 JVM을 포괄해서 내결함성 시스템을 제공할 수 있습니다.
  • 스스로 문제를 해결하고, 멈추지 않는 내결함성이 높은 시스템을 작성하는데 유리합니다.
  1. Location Transparency (위치 투영성)
  • Akka의 모든 것은 분산 환경에서 작동하도록 설계되었습니다.
  • Actor의 모든 상호작용은 순수한 메시지 전달을 사용하며, 모든 것은 비동기적입니다.
  1. Persistence (지속성)
  • Actor가 경험하는 상태 변경은 Actor은 시작하거나 다시 시작할 때 지속할 수 있습니다.
  • 그렇기 때문에 JVM이 충돌하거나 다른 노드로 마이그레이션된 경우에도 행위자가 자신의 상태를 복구할 수 있습니다.

Akka의 특징

  • Throughput(처리율)
    • 암달의 법칙에서 설명하는 순차적인 부분이 차지하는 면적을 최소한으로 줄이면서 프로그램의 전체적인 처리율은 그와 반비례해서 급등합니다.
  • Scale Out
    • 구성 파일의 내용을 약간 수정함을 통해서 Scale out 할 수 있습니다.
  • Modularity
    • Akka를 이용하여 클래스나 객체를 중심으로 설계하는 방식에서 Actor 방식으로 바뀌게 됩니다.
    • Actor는 서로 완벽하게 독립적이며, 메세지를 주고 받는 방식으로만 통신하기 때문에 코드의 응집성(coherenece), 느슨한 결합(loosely coupled), 캡슐화(encapsulation)이 보장됩니다.

Actor
Akka는 액터 모델을 구현한 라이브러이다. 액터를 활용한 고도의 동시성 코드를 작성하는 것을 가능하게 해준다. 액터는 ‘쓰레드’ 혹은 ‘ 객체’와 구별되는 추상이다. 액터가 차지하는 메모리 공간은 어느 다른 쓰레드 혹은 액터가 접근할 수 없다. 다시 말해서 액터 내부에서 일어나는 일은 어느 누구와도 ‘공유’되지 않는다.

특징
Akka actor를 기반으로하는 애플리케이션의 구별되는 특징은 다음과 같다.

  • 동시성은 메시지 기반이며 비동기 방식으로 이루어진다. 일반적으로 변형 가능한 데이터를 공유하거나 동기화되는 primitive를 사용해선 안된다. Akka는 액터 모델을 구현한다.
  • 동일한 호스트든 분산된 호스트들이든, 직접 통신하든, 몇몇 혹은 다수의 스레드 상에서 동작하는 라우팅 채널을 이용하여 통신하든 actor들이 상호작용하는 방식은 동일하다.
  • 이러한 세부사항들은 프로그램이 수정없이 스케일-업하거나 스케일 아웃 하기 위해 배포 시점의 구성 메카니즘에 따라 변경할 수 있다.
  • Actor들은 프로그램의 오류를 연광성에 따라 계층적으로 분류한다.. 이 오류들은 actor의 supervisor의 이벤트로 처리한다.
profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글