SlideShare a Scribd company logo
Introduction to Akka
2018. 3
김민호
Agenda
• Background
• Actor model
• Akka
Moore’s law
• 반도체 집적회로의 성능이 24개월마다 2배로 증가한다는 법칙
- 고
든 무어, 1965
Moore’s law
• Multi-core processors
• Multiple calculations in parallel
• CPU 속도가 가까운 시간에 증가하지 않음
공짜 점심은 끝났다
• 더이상 기다리기만 하면 소프트웨어의 성능이 증가하지 않는다.
• 어플리케이션 개발은
- 새로운 프로세스 형태의 장점을 고려
- Distributed Computing 고려
- 동시성(Concurrency) 연산 사용!
Parallelize
• 어플리케이션 성능을 높이기 위해서 병렬화를 수행
• Parallelism: When two thread are executing simultaneously.
그림 출처 : https://randomwire.com/korea/page/7/
Thread
• Shared state(mutable)
• Deadlocks
• Live Locks
• Thread Starvation
• Race Condition
Thread
• Shared state(mutable)
• Deadlocks
• Live Locks
• Thread Starvation
• Race Condition
어렵다
Alternatives
• Message-Passing Concurrency(Actors)
• Software Transactional Memory(STM)
• Dataflow Concurrency
Actors
Actor
• From a 1973 paper, Written by Carl Hewitt
• Scala, Erlang, Elixir etc.
• Encapsulate state and behavior
• Implement Message-Passing Concurrency
Actor Model of Concurrency
• 아무것도 공유하지 않는다
- 싱크를 맞출 필요가 없다
• Isolated lightweight event-based processes
- ~6.5m on 4GB RAM
• 메시지를 통해서 서로 통신
- Asynchronous and Non-Blocking
- 메시지는 immutable
• 각 액터는 메시지를 수신하기 위한 메일박스를 가짐(Message
queue)
• Supervision을 통해 failure를 관리
Akka
Akka
• Lightbend 사에서 만든 toolkit
- 액터 프로그래밍 모델 지원
- Concurrent -> Actor
- Distributed -> Remoting
- Fault tolerant -> Supervision
Akka Actor
• Lightweight object
- ~300 bytes / instance
• Keeps internal state
• Asynchronous / Non-blocking
• Meesage는 mailbox에 보관
Event-driven thread
Actor
Mailbox 1
Behavior
State
SupervisorStrategy
Children
2 3ActorRefTransport
Akka Actor
• Receives a message
- Create new Actors
- Sends messages to other actors
- handle the next message
Event-driven thread
Actor
Mailbox 1
Behavior
State
SupervisorStrategy
Children
2 3ActorRefTransport
Akka actor system
Akka actor system
• Akka application의 최소 단위
• 스케줄링, 로깅, 설정을 공유 관리
• top-level 액터를 생성
- 대부분 Supervisor actor가 top-level actor
• 모든 Actor는 ActorSystem 내부에서 동작을 수행
• Actor를 생성하면 Actor 자체를 반환하지 않고 ActorRef를 반환해서 사용
ActorRef
Event-driven thread
Actor2
Mailbox 1
Behavior
State
SupervisorStrategy
Children
2 3ActorRefTransport
Event-driven thread
Actor1
Mailbox 1
Behavior
State
SupervisorStrategy
Children
Point to Actor
Delivers to Mailbox
ActorRef
Event-driven thread
Actor2
Mailbox 1
Behavior
State
SupervisorStrategy
Children
2 3ActorRefTransport
Event-driven thread
Actor1
Mailbox 1
Behavior
State
SupervisorStrategy
Children
Invokes Actor Instance with Message.
Runs on a dispatcher.
Actor Instance
Event-driven thread
Actor2
Mailbox 1
Behavior
State
SupervisorStrategy
Children
2 3ActorRefTransport
Event-driven thread
Actor1
Mailbox 1
Behavior
State
SupervisorStrategy
Children
Handle message here
Actor Operations
• Create
• Send
• Become
• Supervise
Actor Operations
• Create
Actor Operations
• Send
- Fire and Forget
• Asynchronous
• No expected reply
• tell() or !
- Send and Receive
• Asynchronous
• Expects reply(Future)
• ask() or ?
Actor Operations
• Send
- tell
Actor Operations
• Send
- ask
Actor Operations
• Become
- 상태에 따라 Actor의 Behavior를 변경해서 처리
- 특정 상태에 맞춰 특정 동작을 수행하도록 보장
Actor Operations
• Become
Actor Operations
• Supervise
- Actor가 실패했을 때 해야할 일을 결정
- Supervisor는 특별한 메시지를 통해 어떤 액터가 왜 중단됐는지에 대한 통보를 받음
- Supervisor strategy를 통해 발생한 에러를 어떻게 처리할지 정의할 수 있음
• OneForOneStrategy : 중단된 자식 액터만 처리
• AllForOneStrategy : 자식 액터 중 하나라도 중단되면 같게 처리
• 직접 정의 가능
Actor Operations
• Supervise
Stopping actors
• Stop method
• PoisonPill message
Killing an Actor
• Kill message
- Kill message를 받으면 ActorKilledException을 발생시킴
Actor LifeCycle
그림 출처 : https://medium.com/akka-for-newbies/actor-lifecycle-94b05bd2f600
Actor LifeCycle
Dispatcher
• Control execution flow
• based on Java Executor framework
- ThreadPoolExecutor
• 미리 Pool 장에 여러개의 쓰레드를 생성해 두고 사용
- ForkJoinPoolExecutor
• Fork를 통해 업무를 분담, Join을 통해 업무를 취합
• 기본적으로 ThreadPool과 비슷하나 Thread가 가진 자신의 큐에 잡이 없으면 다른 쓰레드
로 부터 잡을 훔쳐올 수 있음
• 최대한 노는 쓰레드가 없도록 하는 알고리즘
Dispatcher
• Types of dispatchers
- Dispatcher
• 기본 디스패처
• 액터를 스레드풀에 연결
• 기본적으로 forkjoin-executor를 사용
• 스레드 풀 크기가 고정
- PinnedDispatcher
• 액터를 고유한 쓰레드 하나에 연결
• 스레드가 액터 사이에 공유되지 않음
- BalancingDispatcher
• Busy 한 액터에게서 Idle 사앹의 액터에게 메시지를 재배치
- CallingThreadDispatcher
• 현재 스레드를 사용해 액터의 메시지를 처리
• 테스트할 때만 사용
• 단위 테스트에서 액터를 생성하기 위해 TestActorRef를 사용할 때만 사용하는 디스패처
Dispatcher
Pinned dispatcher
Balancing dispatcher
Mailbox
• Types of mailboxes
- Blocking queue : Queue가 가득 차있을 때 삽입, 비어있을 때 추출을 막아주어
thread-safe를 보장
- Bounded queue : Queue 사이즈가 고정, 특정 사이즈보다 더 많은 Element를 삽입
불가
Types Implementation Blocking Bounded
Unbounded
mailbox
java.util.concurrent.ConcurrentLinkedQueue No No
Bounded
mailbox
java.util.concurrent.LinkedBlockingQueue Yes Yes
Unbounded
priority mailbox
java.util.concurrent.PriorityBlockingQueue Yes No
Bounded priority
mailbox
java.util.concurrent.PriorityBlockingQueue
wrapped in akka.util.BoundedBlockingQueue
Yes Yes
Routers
• 메시지를 어디로 보낼지 결정하는 기능
• 액터의 한 종류
• 라우터로부터 메시지를 받는 액터들을 Routee라고 함
Router
• Types of routers
- RoundRobin Router
• 첫번째 도착한 메시지를 첫번째 라우티에 보냄
- Random Router
• 받은 메시지를 임의의 라우터로 전달
- SmallestMailbox Router
• 라우티의 mailbox를 검사해서 mailbox에 가장 메시지가 작은 라우티 선택
- Broadcast Router
• 받은 메시지를 모든 라우티에 전달
- ScatterGatherFirstCompleted Router
메시지를 모든 라우티에 전달하고 최초로 돌아오는 응답을 원래의 sender 객체에 돌려
줌
- ConsistentHashing Router
• 메시지에 대한 consistent hash값을 가지고 라우티를 선택
• 여러 다른 메시지가 같은 라우티에 전달되어야 하지만 어떤 라우티가 어떤 메시지를 처리하는지 중요
하지 않을 때 사용
Approaches to scaling
• 예제 : 업무용 채팅 어플리케이션
목표 전통적인 접근방법 Akka의 접근방법
Scalability
스레드, 데이터베이스로 변경할 수 있
는 상태 공유, 웹 서비스 RPC 호출
메시지를 주고 받고 공유하는 상태가
없음. 변경할 수 없는 이벤트 기록
상호 작용 현재 정보를 polling Event-driven: 이벤트 발생 시 push
네트워크 확장 동기 RPC, Blocking I/O 비동기 RPC, Non-blocking I/O
실패 처리 모든 예외처리 필요. 실패히 작동 문제
문제 발생 시 해당 부분만 중단. 실패한
부분을 격리 시키고 나머지 실행
Questions?
Appendix
• Reactive manifesto
- Non-blocking I/O
• Blocking I/O를 사용하면 병렬성 기회가 줄어든다
- 비동기 처리
• 동기 처리는 병렬성 기회를 줄인다
- 이벤트 기반 처리
• Polling은 자원을 적게 쓸 기회를 줄인다
- 오류를 격리(회복성)
• 어떤 노드가 다른 모든 노드를 중단시킬 가능성이 있으면 자원 낭비
References
• 무어의 법칙, https://ko.wikipedia.org/wiki/%EB%AC%B4%EC%96%B4%EC%9D%98_%EB%B2%95%EC%B9%99
• Introduction to akka, https://www.slideshare.net/RoyRusso1/introduction-to-akka-atlanta-java-users-group
• Introduction to Concurrent programming with Akka Actors, https://www.slideshare.net/datamantra/introduction-to-
concurrent-programming-with-akka-actors-73684310
• Dispatcher and routers, https://www.packtpub.com/books/content/dispatchers-and-routers
• Raymond Roestenburg, Rob Bakker, and Rob Williams, 2016, Akka in Action

More Related Content

What's hot

카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
Hyunmin Lee
 
Streaming platform Kafka in SK planet
Streaming platform Kafka in SK planetStreaming platform Kafka in SK planet
Streaming platform Kafka in SK planet
Byeongsu Kang
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
nexusz99
 
Understanding of Apache kafka metrics for monitoring
Understanding of Apache kafka metrics for monitoring Understanding of Apache kafka metrics for monitoring
Understanding of Apache kafka metrics for monitoring
SANG WON PARK
 
지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기
Ted Won
 
Cache cloud 최종
Cache cloud 최종Cache cloud 최종
Cache cloud 최종nexusz99
 
AWS lambda, step function, cloud watch
AWS lambda, step function, cloud watchAWS lambda, step function, cloud watch
AWS lambda, step function, cloud watch
Han Sung Kim
 
Scalable webservice
Scalable webserviceScalable webservice
Scalable webservice
DaeMyung Kang
 
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
SANG WON PARK
 
Amazon Aurora 100% 활용하기
Amazon Aurora 100% 활용하기Amazon Aurora 100% 활용하기
Amazon Aurora 100% 활용하기
Amazon Web Services Korea
 
검색로그시스템 with Python
검색로그시스템 with Python검색로그시스템 with Python
검색로그시스템 with Python
itproman35
 
RabbitMQ 알아보기
RabbitMQ 알아보기RabbitMQ 알아보기
RabbitMQ 알아보기
frankradio
 
내 맘대로 Lambda 사용기
내 맘대로 Lambda 사용기내 맘대로 Lambda 사용기
내 맘대로 Lambda 사용기
DaewookShin
 
배치잡 대외용 이형규
배치잡 대외용 이형규배치잡 대외용 이형규
배치잡 대외용 이형규
Hyeong-Kyu Lee
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live
세준 김
 
[오픈소스컨설팅]Kafka message system 맛보기
[오픈소스컨설팅]Kafka message system 맛보기 [오픈소스컨설팅]Kafka message system 맛보기
[오픈소스컨설팅]Kafka message system 맛보기
Chanyeol yoon
 
[Azure study group] azure의 부하분산
[Azure study group] azure의 부하분산[Azure study group] azure의 부하분산
[Azure study group] azure의 부하분산
세준 김
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
DaeMyung Kang
 
AWS 상에서 게임 서비스 최적화 방안 :: 박선용 :: AWS Summit Seoul 2016
AWS 상에서 게임 서비스 최적화 방안 :: 박선용 :: AWS Summit Seoul 2016AWS 상에서 게임 서비스 최적화 방안 :: 박선용 :: AWS Summit Seoul 2016
AWS 상에서 게임 서비스 최적화 방안 :: 박선용 :: AWS Summit Seoul 2016
Amazon Web Services Korea
 
Optane DC Persistent Memory(DCPMM) 성능 테스트
Optane DC Persistent Memory(DCPMM) 성능 테스트Optane DC Persistent Memory(DCPMM) 성능 테스트
Optane DC Persistent Memory(DCPMM) 성능 테스트
SANG WON PARK
 

What's hot (20)

카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
 
Streaming platform Kafka in SK planet
Streaming platform Kafka in SK planetStreaming platform Kafka in SK planet
Streaming platform Kafka in SK planet
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
 
Understanding of Apache kafka metrics for monitoring
Understanding of Apache kafka metrics for monitoring Understanding of Apache kafka metrics for monitoring
Understanding of Apache kafka metrics for monitoring
 
지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기
 
Cache cloud 최종
Cache cloud 최종Cache cloud 최종
Cache cloud 최종
 
AWS lambda, step function, cloud watch
AWS lambda, step function, cloud watchAWS lambda, step function, cloud watch
AWS lambda, step function, cloud watch
 
Scalable webservice
Scalable webserviceScalable webservice
Scalable webservice
 
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
 
Amazon Aurora 100% 활용하기
Amazon Aurora 100% 활용하기Amazon Aurora 100% 활용하기
Amazon Aurora 100% 활용하기
 
검색로그시스템 with Python
검색로그시스템 with Python검색로그시스템 with Python
검색로그시스템 with Python
 
RabbitMQ 알아보기
RabbitMQ 알아보기RabbitMQ 알아보기
RabbitMQ 알아보기
 
내 맘대로 Lambda 사용기
내 맘대로 Lambda 사용기내 맘대로 Lambda 사용기
내 맘대로 Lambda 사용기
 
배치잡 대외용 이형규
배치잡 대외용 이형규배치잡 대외용 이형규
배치잡 대외용 이형규
 
1711 azure-live
1711 azure-live1711 azure-live
1711 azure-live
 
[오픈소스컨설팅]Kafka message system 맛보기
[오픈소스컨설팅]Kafka message system 맛보기 [오픈소스컨설팅]Kafka message system 맛보기
[오픈소스컨설팅]Kafka message system 맛보기
 
[Azure study group] azure의 부하분산
[Azure study group] azure의 부하분산[Azure study group] azure의 부하분산
[Azure study group] azure의 부하분산
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
 
AWS 상에서 게임 서비스 최적화 방안 :: 박선용 :: AWS Summit Seoul 2016
AWS 상에서 게임 서비스 최적화 방안 :: 박선용 :: AWS Summit Seoul 2016AWS 상에서 게임 서비스 최적화 방안 :: 박선용 :: AWS Summit Seoul 2016
AWS 상에서 게임 서비스 최적화 방안 :: 박선용 :: AWS Summit Seoul 2016
 
Optane DC Persistent Memory(DCPMM) 성능 테스트
Optane DC Persistent Memory(DCPMM) 성능 테스트Optane DC Persistent Memory(DCPMM) 성능 테스트
Optane DC Persistent Memory(DCPMM) 성능 테스트
 

Similar to Introduction to akka

자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2
HyeonSeok Choi
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
YEONG-CHEON YOU
 
Cluster - spark
Cluster - sparkCluster - spark
Cluster - spark
HyeonSeok Choi
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
태준 문
 
REST with Spring
REST with SpringREST with Spring
REST with Spring
강우 김
 
Windows via c/c++ 스터디9장
Windows via c/c++ 스터디9장Windows via c/c++ 스터디9장
Windows via c/c++ 스터디9장
HolyTak
 
Kafka 자료 v0.1
Kafka 자료 v0.1Kafka 자료 v0.1
Kafka 자료 v0.1
Hyosang Hong
 
Kafka 자료 v0.1
Kafka 자료 v0.1Kafka 자료 v0.1
Kafka 자료 v0.1
Hyosang Hong
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영
NAVER D2
 
[Solr 스터디] Solr 설정 및 색인 (2017)
[Solr 스터디] Solr 설정 및 색인 (2017)[Solr 스터디] Solr 설정 및 색인 (2017)
[Solr 스터디] Solr 설정 및 색인 (2017)
용호 최
 
NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템tcaesvk
 
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
Ji-Woong Choi
 
Asynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdfAsynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdf
HYUNWOO KIM
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programming
Byeongsu Kang
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
tcp ip study
tcp ip studytcp ip study
tcp ip study
준철 박
 
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드MinGeun Park
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Esun Kim
 
GS Neotek aws_Amazon_CloudFrontDay2018_session4
GS Neotek aws_Amazon_CloudFrontDay2018_session4GS Neotek aws_Amazon_CloudFrontDay2018_session4
GS Neotek aws_Amazon_CloudFrontDay2018_session4
GS Neotek
 
Portfolio
PortfolioPortfolio
Portfolio
ByungHak Jang
 

Similar to Introduction to akka (20)

자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
Cluster - spark
Cluster - sparkCluster - spark
Cluster - spark
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
 
REST with Spring
REST with SpringREST with Spring
REST with Spring
 
Windows via c/c++ 스터디9장
Windows via c/c++ 스터디9장Windows via c/c++ 스터디9장
Windows via c/c++ 스터디9장
 
Kafka 자료 v0.1
Kafka 자료 v0.1Kafka 자료 v0.1
Kafka 자료 v0.1
 
Kafka 자료 v0.1
Kafka 자료 v0.1Kafka 자료 v0.1
Kafka 자료 v0.1
 
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영
 
[Solr 스터디] Solr 설정 및 색인 (2017)
[Solr 스터디] Solr 설정 및 색인 (2017)[Solr 스터디] Solr 설정 및 색인 (2017)
[Solr 스터디] Solr 설정 및 색인 (2017)
 
NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템NDC 2015 마비노기 듀얼 패치 시스템
NDC 2015 마비노기 듀얼 패치 시스템
 
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
[오픈소스컨설팅]Fault Tolerance Architecture by Netflix
 
Asynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdfAsynchronous agents library(aal)pdf
Asynchronous agents library(aal)pdf
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programming
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
tcp ip study
tcp ip studytcp ip study
tcp ip study
 
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
GS Neotek aws_Amazon_CloudFrontDay2018_session4
GS Neotek aws_Amazon_CloudFrontDay2018_session4GS Neotek aws_Amazon_CloudFrontDay2018_session4
GS Neotek aws_Amazon_CloudFrontDay2018_session4
 
Portfolio
PortfolioPortfolio
Portfolio
 

Introduction to akka

  • 3. Moore’s law • 반도체 집적회로의 성능이 24개월마다 2배로 증가한다는 법칙 - 고 든 무어, 1965
  • 4. Moore’s law • Multi-core processors • Multiple calculations in parallel • CPU 속도가 가까운 시간에 증가하지 않음
  • 5. 공짜 점심은 끝났다 • 더이상 기다리기만 하면 소프트웨어의 성능이 증가하지 않는다. • 어플리케이션 개발은 - 새로운 프로세스 형태의 장점을 고려 - Distributed Computing 고려 - 동시성(Concurrency) 연산 사용!
  • 6. Parallelize • 어플리케이션 성능을 높이기 위해서 병렬화를 수행 • Parallelism: When two thread are executing simultaneously. 그림 출처 : https://randomwire.com/korea/page/7/
  • 7. Thread • Shared state(mutable) • Deadlocks • Live Locks • Thread Starvation • Race Condition
  • 8. Thread • Shared state(mutable) • Deadlocks • Live Locks • Thread Starvation • Race Condition 어렵다
  • 9. Alternatives • Message-Passing Concurrency(Actors) • Software Transactional Memory(STM) • Dataflow Concurrency
  • 11. Actor • From a 1973 paper, Written by Carl Hewitt • Scala, Erlang, Elixir etc. • Encapsulate state and behavior • Implement Message-Passing Concurrency
  • 12. Actor Model of Concurrency • 아무것도 공유하지 않는다 - 싱크를 맞출 필요가 없다 • Isolated lightweight event-based processes - ~6.5m on 4GB RAM • 메시지를 통해서 서로 통신 - Asynchronous and Non-Blocking - 메시지는 immutable • 각 액터는 메시지를 수신하기 위한 메일박스를 가짐(Message queue) • Supervision을 통해 failure를 관리
  • 13. Akka
  • 14. Akka • Lightbend 사에서 만든 toolkit - 액터 프로그래밍 모델 지원 - Concurrent -> Actor - Distributed -> Remoting - Fault tolerant -> Supervision
  • 15. Akka Actor • Lightweight object - ~300 bytes / instance • Keeps internal state • Asynchronous / Non-blocking • Meesage는 mailbox에 보관 Event-driven thread Actor Mailbox 1 Behavior State SupervisorStrategy Children 2 3ActorRefTransport
  • 16. Akka Actor • Receives a message - Create new Actors - Sends messages to other actors - handle the next message Event-driven thread Actor Mailbox 1 Behavior State SupervisorStrategy Children 2 3ActorRefTransport
  • 18. Akka actor system • Akka application의 최소 단위 • 스케줄링, 로깅, 설정을 공유 관리 • top-level 액터를 생성 - 대부분 Supervisor actor가 top-level actor • 모든 Actor는 ActorSystem 내부에서 동작을 수행 • Actor를 생성하면 Actor 자체를 반환하지 않고 ActorRef를 반환해서 사용
  • 19. ActorRef Event-driven thread Actor2 Mailbox 1 Behavior State SupervisorStrategy Children 2 3ActorRefTransport Event-driven thread Actor1 Mailbox 1 Behavior State SupervisorStrategy Children Point to Actor Delivers to Mailbox
  • 20. ActorRef Event-driven thread Actor2 Mailbox 1 Behavior State SupervisorStrategy Children 2 3ActorRefTransport Event-driven thread Actor1 Mailbox 1 Behavior State SupervisorStrategy Children Invokes Actor Instance with Message. Runs on a dispatcher.
  • 21. Actor Instance Event-driven thread Actor2 Mailbox 1 Behavior State SupervisorStrategy Children 2 3ActorRefTransport Event-driven thread Actor1 Mailbox 1 Behavior State SupervisorStrategy Children Handle message here
  • 22. Actor Operations • Create • Send • Become • Supervise
  • 24. Actor Operations • Send - Fire and Forget • Asynchronous • No expected reply • tell() or ! - Send and Receive • Asynchronous • Expects reply(Future) • ask() or ?
  • 27. Actor Operations • Become - 상태에 따라 Actor의 Behavior를 변경해서 처리 - 특정 상태에 맞춰 특정 동작을 수행하도록 보장
  • 29. Actor Operations • Supervise - Actor가 실패했을 때 해야할 일을 결정 - Supervisor는 특별한 메시지를 통해 어떤 액터가 왜 중단됐는지에 대한 통보를 받음 - Supervisor strategy를 통해 발생한 에러를 어떻게 처리할지 정의할 수 있음 • OneForOneStrategy : 중단된 자식 액터만 처리 • AllForOneStrategy : 자식 액터 중 하나라도 중단되면 같게 처리 • 직접 정의 가능
  • 31. Stopping actors • Stop method • PoisonPill message
  • 32. Killing an Actor • Kill message - Kill message를 받으면 ActorKilledException을 발생시킴
  • 33. Actor LifeCycle 그림 출처 : https://medium.com/akka-for-newbies/actor-lifecycle-94b05bd2f600
  • 35. Dispatcher • Control execution flow • based on Java Executor framework - ThreadPoolExecutor • 미리 Pool 장에 여러개의 쓰레드를 생성해 두고 사용 - ForkJoinPoolExecutor • Fork를 통해 업무를 분담, Join을 통해 업무를 취합 • 기본적으로 ThreadPool과 비슷하나 Thread가 가진 자신의 큐에 잡이 없으면 다른 쓰레드 로 부터 잡을 훔쳐올 수 있음 • 최대한 노는 쓰레드가 없도록 하는 알고리즘
  • 36. Dispatcher • Types of dispatchers - Dispatcher • 기본 디스패처 • 액터를 스레드풀에 연결 • 기본적으로 forkjoin-executor를 사용 • 스레드 풀 크기가 고정 - PinnedDispatcher • 액터를 고유한 쓰레드 하나에 연결 • 스레드가 액터 사이에 공유되지 않음 - BalancingDispatcher • Busy 한 액터에게서 Idle 사앹의 액터에게 메시지를 재배치 - CallingThreadDispatcher • 현재 스레드를 사용해 액터의 메시지를 처리 • 테스트할 때만 사용 • 단위 테스트에서 액터를 생성하기 위해 TestActorRef를 사용할 때만 사용하는 디스패처
  • 40. Mailbox • Types of mailboxes - Blocking queue : Queue가 가득 차있을 때 삽입, 비어있을 때 추출을 막아주어 thread-safe를 보장 - Bounded queue : Queue 사이즈가 고정, 특정 사이즈보다 더 많은 Element를 삽입 불가 Types Implementation Blocking Bounded Unbounded mailbox java.util.concurrent.ConcurrentLinkedQueue No No Bounded mailbox java.util.concurrent.LinkedBlockingQueue Yes Yes Unbounded priority mailbox java.util.concurrent.PriorityBlockingQueue Yes No Bounded priority mailbox java.util.concurrent.PriorityBlockingQueue wrapped in akka.util.BoundedBlockingQueue Yes Yes
  • 41. Routers • 메시지를 어디로 보낼지 결정하는 기능 • 액터의 한 종류 • 라우터로부터 메시지를 받는 액터들을 Routee라고 함
  • 42. Router • Types of routers - RoundRobin Router • 첫번째 도착한 메시지를 첫번째 라우티에 보냄 - Random Router • 받은 메시지를 임의의 라우터로 전달 - SmallestMailbox Router • 라우티의 mailbox를 검사해서 mailbox에 가장 메시지가 작은 라우티 선택 - Broadcast Router • 받은 메시지를 모든 라우티에 전달 - ScatterGatherFirstCompleted Router 메시지를 모든 라우티에 전달하고 최초로 돌아오는 응답을 원래의 sender 객체에 돌려 줌 - ConsistentHashing Router • 메시지에 대한 consistent hash값을 가지고 라우티를 선택 • 여러 다른 메시지가 같은 라우티에 전달되어야 하지만 어떤 라우티가 어떤 메시지를 처리하는지 중요 하지 않을 때 사용
  • 43. Approaches to scaling • 예제 : 업무용 채팅 어플리케이션 목표 전통적인 접근방법 Akka의 접근방법 Scalability 스레드, 데이터베이스로 변경할 수 있 는 상태 공유, 웹 서비스 RPC 호출 메시지를 주고 받고 공유하는 상태가 없음. 변경할 수 없는 이벤트 기록 상호 작용 현재 정보를 polling Event-driven: 이벤트 발생 시 push 네트워크 확장 동기 RPC, Blocking I/O 비동기 RPC, Non-blocking I/O 실패 처리 모든 예외처리 필요. 실패히 작동 문제 문제 발생 시 해당 부분만 중단. 실패한 부분을 격리 시키고 나머지 실행
  • 45. Appendix • Reactive manifesto - Non-blocking I/O • Blocking I/O를 사용하면 병렬성 기회가 줄어든다 - 비동기 처리 • 동기 처리는 병렬성 기회를 줄인다 - 이벤트 기반 처리 • Polling은 자원을 적게 쓸 기회를 줄인다 - 오류를 격리(회복성) • 어떤 노드가 다른 모든 노드를 중단시킬 가능성이 있으면 자원 낭비
  • 46. References • 무어의 법칙, https://ko.wikipedia.org/wiki/%EB%AC%B4%EC%96%B4%EC%9D%98_%EB%B2%95%EC%B9%99 • Introduction to akka, https://www.slideshare.net/RoyRusso1/introduction-to-akka-atlanta-java-users-group • Introduction to Concurrent programming with Akka Actors, https://www.slideshare.net/datamantra/introduction-to- concurrent-programming-with-akka-actors-73684310 • Dispatcher and routers, https://www.packtpub.com/books/content/dispatchers-and-routers • Raymond Roestenburg, Rob Bakker, and Rob Williams, 2016, Akka in Action

Editor's Notes

  1. 병렬화를 수행해야 한다!