본문 바로가기
etc

Akka란? - 필요성, Actor model, Akka의 특징

by 돈코츠라멘 2019. 9. 10.

Akka는 오픈 소스 툴킷으로 JVM 상의 동시성과 분산 애플리케이션을 단순화한다.

  • Java와 Scala 모두로 작성 가능하다.
  • Scala로 작성되었지만 Java의 동시성 패키지를 사용하기 때문에 결국은 Java의 Thread나 Task를 사용하는 것과 마찬가지다.

필요성 - 암달의 법칙(Amdahl’s law)

“멀티코어를 사용하는 프로그램의 속도는 프로그램 내부에 존재하는 순차적(sequential) 부분이 사용하는 시간에 의해서 제한된다.”

우리들은 동시성 구현을 위해 Tread나 Task를 ExecutorService에 제출하는 코드를 작성하고, 이를 실행하면 여러 개의 Thread가 동시에 작업을 수행한다. 하지만 Thread 또는 Task를 사용하지 않는 부분이 코드상에 존재하고, 이 부분은 순차적으로 작업을 수행한다. 암달의 법칙은 프로그램이 낼 수 있는 속도의 최대치는 순차적으로 작업이 수행되는 시간에 의해서 제한된다고 말한다. 즉, 순차적 코드 때문에 이미 프로그램의 처리율의 상한은 정해져 있으므로 이를 줄이지 못하면 의미가 없다.

Akka는 곳곳에 존재하는 순차적 부분을 전부 없애거나 최소한으로 만들기 위해 사용한다.


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의 특징

  1. 처리율(throughput): 암달의 법칙에서 설명하는 순차적 부분이 차지하는 면적을 최소한으로 줄이면서 프로그램의 전체적인 처리율은 그와 반비례해서 급등한다.
  2. Scale Out: Scale out을 구성파일의 내용을 약간 수정함으로써 자동으로 보장해준다.
  3. 모듈화(modularity): Akka를 이용하면 클래스나 객체를 중심으로 설계를 하던 방식이 "Actor"를 중심으로 바뀐다. Actor는 서로 완벽하게 독립적이며, 메세지를 주고 받는 방식으로만 통신하므로 코드의 응집성(coherence), loosely coupled, 캡슐화(encapsulation)가 보장된다.

 


Reference

  • 임백준의 아카 시작하기 (Akka 개념 잡기, 한빛미디어) - 임백준

댓글