일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 우분투
- 토픽
- 오늘도 우라라 펫
- 프로그래밍
- publish
- Linux
- ubuntu
- 환경설정
- 반복문
- 데이터 베이스
- Subscribe
- mariaDB
- LeetCode
- MSG
- mysql
- 기초
- C언어
- 그랑사가
- 등차수열
- ros
- 오늘도 우라라
- C++
- install opencv-4.4.0 on ubuntu 22.04
- while
- JungOl
- 오늘도 우라라 공략
- topic
- 오늘도 우라라 펫 공략
- 리눅스
- 마리아 DB
- Today
- Total
하루의 쉼터
[akka] akka에 대해서 본문
| akka에 대해서 알아보자
1. Outline
1.1 Akka 란?
Open Source Tool Kit으로 JVM(Java Virtual Machine)상에서 동시성과 분산 애플리케이션을 단순화 하는 런타임이다.
- Erlang(범용 병렬 프로그래밍 언어, 함수형 언어)으로부터 영향을 받아 actor 기반의 동시성이 두드러진다.
* JVM이란?
자바 바이트코드를 실행할 수 있는 주체이며 OS에 종속 받지 않고 다른 환경(CPU)에서도 무관하게 동일 동작을 보장한다.
1.2 Why akka?
* 그냥 스레드를 사용하면 되지 왜 akka를 사용하는가?
CPU 사양의 발전으로 인하여 여러 개의 코어를 사용하는 제품군이 많아졌고 이에 따라 멀티 스레드 프로그래밍이 발전하게 되었는데 이에 따라 문제가 발생하게 되었다.
선결론 : 멀티 스레드에서 데이터 접근함에 있어 문제가 발생 되었고 Akka는 이를 해결하기 위해 비동기화 Message 방식의 Actor Model을 구현하여 얼랭 프로그래밍언어의 라이브러리가 지원하는 고도의 동시성 쓰기, 이벤트 주도 애플리케이션을 JAVA와 Scalar에 유사한 기능을 도입하고자 하였음. 따라서 동시성이 필요한 경우 빠른 구현을 위하여 Akka를 이용하여 Actor 및 Message로 시스템을 쉽게 구성할 수 있다.
l 멀티 스레드 프로그래밍 문제
- 공유리소스를 사용하며 여러 스레드에서 데이터 접근을 하며 lock, synchronized을 사용하며 기아, 교착 상태 발생
- 병렬 컴퓨팅에서 병렬화가 불가능한 작업들의 비중이 생기며 속도의 최대치가 정해지는 암달의 법칙
| 해결책
칼 휴이트가 제안한 Actor 모델 사용* Actor Model : Actor가 차지하는 메모리 공간은 다른 쓰레드, Actor에서 접근 할 수 없다.특징 : -> 상태 공유 X-> Actor 간 통신은 Message 전달 (Event)-> 비동기적-> 하나의 Actor에서 단일 Queue 사용. 즉, 여러 Actor 각각의 처리 방식-> Message Queue 이용-> 스레드 보다 Actor의 memory가 상대적으로 적다단점 : -> message를 이용하여 속도가 느림.
Actor 구조
Actor Ref : 다른 Actor와 통신을 위해 사용됨. 프록시 디자인 패턴을 따름.
Dispatcher : 들어오는 Message를 받아 Actor에 전달, 스케줄링 역할 및 Actor의 처리량을 조율 하여 리소스 제공
* Actor의 상태 확인하여 메시지 처리 여부를 판단
* 종속성을 줄이기 위함
Mail Box : FIFO 순서를 따라 메시지를 선택하고 처리함.
State : 액터 객체가 가지는 몇 가지 상태(변수)
- counter, set of listeners, pending requests
Behavior : 메시지 처리에 따른 액터의 상태 변화 제어, Child Actor 생성 및 제거
Actor 계층 구조
Root Guardian : 최상단 루트 가디언, 시스템 내의 모든 Actor의 부모
User Guardian : 사용자가 가지는 모든 액터의 부모 자식 액터의 Path 앞에 /user 이 추가됨
System Guardian : 시스템이 순서대로 종료 하도록 함 시스템 액터를 유지 하고 관리
1.3 Akka 특징
1.3.1 더욱 간단한 동시, 분산 시스템
- Actor, Streams를 사용
1.3.2 고성능
- 단일 시스템에서 Max 5천만 msg/sec
- 적은 메모리 차지
- NonBlocking / Asynchronous을 사용한 빠른 반응성
1.3.3 분산시스템
- 모듈화 Actor는 서로 독립적이며 이를 통하여 캡슐화 프로그래밍 유사하게 구현
- Actor 간의 메시지 송수신
- 시스템 하나가 죽어도 다른 시스템에 큰 영향을 주지 않음.
Reference
https://en.wikipedia.org/wiki/Actor_model
https://ko.wikipedia.org/wiki/Akka
https://blog.rajephon.dev/2018/11/25/akka-00/
https://ko.wikipedia.org/wiki/%EC%96%BC%EB%9E%AD
https://ko.wikipedia.org/wiki/%EC%95%94%EB%8B%AC%EC%9D%98_%EB%B2%95%EC%B9%99
https://doc.akka.io/docs/akka/current/general/actors.html
https://doc.akka.io/docs/akka/current/general/addressing.html
'프로그래밍 - 개발 > JAVA' 카테고리의 다른 글
[문법] .size(), .capacity(),.length, .length()의 차이 (0) | 2021.08.03 |
---|