Akka 01 - Actor 모델

1 minute read

Intro

개인적으로 참여하고 있는 스터디그룹에서 다대다 채팅 어플리케이션 프로젝트를 진행하기 위한 서치중 Akka 라는 오픈 소스 라이브러리를 발견하여 Actor 모델, Akka의 특징 등의 내용들에 대해 학습한 내용을 정리하는 게시글입니다.

Intro2

현대의 컴퓨터는 하나의 칩에 두개 이상의 코어를 결합하는 멀티 코어의 형태로 발전중입니다. 따라서 소프트웨어 개발자들도 이런 변화에 맞추어 멀티코어를 최대한 활용 할 수 있는 방향으로 소프트웨어를 개발 해야합니다.

Akka

Build powerful concurrent & distributed applications more easily. Akka is a toolkit and runtime for building highly concurrent, distributed, and resilient message-driven applications on the JVM.

많은 일반적 관행과 수용되어지고 있는 프로그래밍 모델들은 현대의 컴퓨터 아키텍쳐를 위한 시스템 설계에 내재된 중요한 문제를 해결하지 못하고 있습니다.

< akka 가 제공하는것>

  • 낮은 수준의 동시성 구성(like atomic & lock)을 사용하지 않는 멀티 스레드 동작은 개발자로 하여금 Memory Visibility(메모리가시성) 이슈에 대한 고민을 덜어주게 만들어 줍니다.
  • 시스템과 구성요소간 투명한 원격 통신으로 어려운 네트워크 코드를 작성하고 유지하는것으로 부터 고민을 덜어줍니다.
  • Actor 모델 사용함
  • 기반언어 : scala & java

Actor

ActorEcosystem

akka 환경에서 구현된 Actor 모델을 다룹니다.

Actor 모델 사용에 대한 이점

Event-driven model

Actor는 전달된 메세지에 대한 응답으로 작업을 수행합니다. Actor간의 통신은 비동기적으로 처리 되며, Actor들 간에 메세지를 전송할 수 있고, 응답을 기다리지 않아 blocking없이 그들의 작업을 지속적으로 수행수 있게 합니다.

Strong isolation principles

일반적인 Java 객체와 달리, Actor는 호출 할 수 있는 메소드 측면에서의 public API를 가지고 있지 않습니다. 대신 public API는 Actor가 처리하는 메세지를 통해 정의 됩니다. Actor는 서로의 상태를 공유 할 수 없습니다. Actor의 상태를 확인 할 수 있는 유일한 방법은 요청 메세지를 해당 Actor에 보내는것입니다.

Location transparency

ActorSystem은 factory에서 actor들을 구성하고 인스턴스에 대한 참조값을 반환합니다. actor의 위치는 중요하지 않습니다. Actor 인스턴스는 시작, 중지, 이동, scale up and down 을 위한 재시작이 가능할 뿐만 아니라 예상치 못한 실패에 대해 복구도 가능합니다.

Lightweight

Actor 인스턴스는 수백바이트만 소비할 정도로 매우 가벼워 단일 어플리케이션에서 수백만개의 Actor가 존재 할 수 있습니다.

Actor System
  • Actor들이 실행되는 container 환경이라고 생각하면 쉽다.

References

[1] https://blog.lgcns.com/1084
[2] https://doc.akka.io/docs/akka/current/guide/introduction.html?language=java