Page History
...
- 비동기 : 다른 녀석에게 일을 넘기고 내일을 한다. ( 논블럭킹)
- 동기 : 다른 녀석이 일을 마칠때까지 기다린다. ( 블럭킹 )
- 능동적 : 나만의 큐와 스케쥴러를 가지고 있음
용어중 패턴에대한 설명이 가장 어려워서 설명을 따로 정리하였습니다하였습니다.
Expand | ||
---|---|---|
| ||
그 이후 위 약점을 보완하려고, 다양한 언어로 디자인 패턴 활용방법에 대한 책이 쏟아져 나왔지만 개인적인 디자인패턴에대한 경험은 다음과 같습니다. 디자인 패턴은 이러한거다란 정도 알고 넘어갑시다. |
OOP와 비교해본 Actor Model
OOP(Object-oriented programming)
...
멀티스레드 측정을 위해 Tace하거나 중단을 통해 작동의 연관성을 찾는것은 어렵기때문에, 스레드 프로파일러 시각화 툴의 도움을 받습니다.
만약 위와같은 스레드모델를 직접 작성하게될시 스레드제어를 직접 제어하는 구현체를 개발했을시 서비스코드의 복잡도증가및 숙련도에따라 서비스의 불안정으로 이어질수 있습니다.
동시성 프로그래밍을 위해 꼭 Akka가 있는것은 아니며, 동시성을 처리해주는 여러가지 라이브러리및 툴킷들은 훨씬더 이러한 문제에대해 공통적인 집단 지식으로
스레드의 복잡성문제를 단순화하려는 노력을 해왔습니다.
AKKA에서는 단지 튜닝을 위한 목적으로 스레드사용에대한 전략을 설정화로 이루어냅니다.
목적과 성능에따라 액터를 관리할 dispatcher를 분리하게되면 Actor의 성능에 대한 문제 파악이 용이해집니다.
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
my-blocking-dispatcher { type = Dispatcher executor = "thread-pool-executor" thread-pool-executor { fixed-pool-size = 16 } throughput = 1 } // 이것은 런타임 코드가 아니라, 설정사항입니다튜닝요소입니다. AKKA에서는 Thread를 직접 생성하는 코드를 작성하지 않습니다. // 장비 1개 성능 최적화와 관련된 튜닝사항으로 스케일업과 관련이있습니다. // 만약 스레드풀을 직접 설계를 하였다고 해도, 튜닝설정이 없다고 하면 성능조정에 어려움이 생깁니다. // 다양한 튜닝 옵션이 설정화로 빠질수 있는것은 스레드를 잘 이해하고 유연함을 의미합니다. |
관련 액터들만, 스레드를 특정개수로 제한할수가 있으며 처리시간이 짧은 액터일경우 훨씬더 작은 수의 스레드로도 충분히 빠르게 작동을 합니다.
실제로 내부 장비에서 액터간 초당 50만 메시지가 처리가능하다라고 함 : http://letitcrash.com/post/20397701710/50-million-messages-per-second-on-a-single
OOP설계방식으로 직접구현 방식을 사용하여 패킷을설계하고, 저수준 TCP전송 프로토콜을 사용하여 멀티스레드 기법으로 고성능 전송을 구현한다고 했을시
1:1 안정적인 고성능 전송기능이될때까지 엄청난 노력을 기울여야할것입니다. (그것이 c++이던 java이던간에)
그리고 100 유져의 안정적인 멀티 커넥션을 까지 처리하기까지 고난의 연속입니다.
AKKA에서는 이 고민의 시간을 줄이고 , 우리의 개발 서비스를 어떠한 라우팅전략을 써고 클러스터링으로 잘 구성할것인가에대해서 집중하도록합니다. 이 부분에 대한 실습은 RemotActor,Route,Cluster 실습에서 조금더 다루도록 하겠습니다
단순하게 액터는 로컬 컴퓨터의 동시성 처리를 위한것이 아닌 리모트,클러스터로 유연하게 확장할수 있습니다.