분산처리환경에서 단순화된 개발방법을 제시하는 AKKA


다음과 같은 컨셉순으로 정리하고 있습니다.

  • 분산처리 환경의 이해와 필요한것들
  • 분산처리 개발에서 고전적인 개발방법이 가진 한계와 이를 단순화하는 방법
  • akka.net을 사용한 닷넷프레임워크에서 학습샘플
  • akka + java 조합을 사용한 JVM환경에서의 학습샘플

분산환경에서의 동시성 처리에대한 해결모델은 언어및 플랫폼에 종속적이지 않으며,AKKA가 아니여도 됩니다.

AKKA는단지 분산처리에있어서 기본개념을 먼저 알려주고 단순화된 개발모델을 제시하며

개발자는 그것을 이용하여 응용프로그램내에 직접 작성 할수있습니다. 그 중심엔 액터가 있습니다.



ACTOR :

  • 여러가지 개발 플래폼에서 도입 하기 시작하였으며, 분산 미들웨어에서 수많은 일을 하기위한, 능동적 메시지 객체 
  • 마이크로서비스의 구성요소로 적합하며, 마이크로서비스보다 더 작은 단위
  • 어떠한 액터라도, 리모트상에 위치가가능하며 클러스터 구성이 가능하며 고성능 대화가가능

Akka

  • Akka는 오픈 소스 툴킷으로 동시성과 분산 애플리케이션을 단순화하는 런타임이다.  
  • 동시성을 위한 여러 프로그래밍 모델을 지원하며, Erlang으로부터 영향을 받아 actor기반의 동시성이 두드러진다.
  • Akka는 Java환경및 .net Framework에서 이용가능하며, Actor모델은 이제 대부분의 개발플래폼에서 라이브러리릍 통해 사용가능합니다.


AKKA에서 내세우는 강점



액터와 스트림을 사용하면 여러 서버에서 효율적으로 리소스를 사용하여

확장하는 시스템을 구축 할 수 있는 개발 모델지원

현대시스템에서 시스템의 일부가 다운되거나 고장 나는것은 예외적인 현상이아니라

평범한 동작의 일부이다.

장애가 발생할 경우,자가 치유되고 응답 성을 유지하는 시스템을 작성할 수 있는

개발 모델을 제시해줍니다.

Resilient : 탄력적인 , 유연한

단일 기계에서 최대 초당 5 천만 메시지 처리 가능하며

메모리 힙 GB 당 250 만명의 액터생성가능합니다.

단일 실패 지점이없는 분산 시스템. 로드 밸런싱 및 라우팅 노드. 클러스터 소싱을 사용한 이벤트 소싱 및

CQRS CRDT를 사용한 최종 일관성을위한 분산 데이터 프로그래밍 모델지원


신축성: (Elastic)

초기에는 scaleable(확장가능) 이라는 말을자주 사용하고 스케일-아웃만을 의미하지만

Elastic은 트래픽에따라 스케일아웃(확장) 스케일인(축소)을 자유롭게 할수 있는 구조로

리액티브영역에서 Elastic이란 용어를 더 많이 사용


이벤트소싱 (EventSourcing)

이벤트 소싱(및 샤딩) 은 커다란 웹사이트를 수십억명의 사용자 규모로 확장하는 아이디어이며

이아이디어는 매우 간답합니다. 액터가 처리가 될때 명령의 이벤트 목록을 생성하고 저장을 합니다.

이 계획은 이벤트만이 저장소에 추가되고 아무것도 변이되지 않는 점이며 

이를 통해 이벤트 스트림의 소비자를 완벽하게 복제하고 확장할수 있습니다. 

구성요소의 컴퓨터가 고장이나거나 푸시로기능중 손실되는경우 , 이벤트 스트림을 재생하여 쉽게 재구성합니다.

이벤트 소싱은 Akka.net 지속성(Persistence)에서 지원됩니다.  (  참고 소스 : http://getakka.net/articles/persistence/event-sourcing.html  )



CQRS (Command Query Responsiblity Segregation)

대부부의 대용량 트래픽은 Read에서 발생하며

이름에서 알 수 있다시피 코맨드, 즉 C (Create – INSERT), U(Update – UPDATE), D (Delete – DELETE) 쿼리와

R (Read – SELECT) 쿼리를 분리하자는 것이다.


CRDT(Conflict-free replicated data types)

충돌없는 데이터 복제란 : 분산환경에서 데이터복제를 통한 분산처리가 필요하며

이전략을 세우기위해 복제에따른 데이터 불일치 문제를 해결하고자 하는 방법




성능에 있어서 역압력장치(backpressure) 사용으로, 비동기 비 차단 스트림을 모두 처리하려고함.

완전 비동기 및 스트리밍 HTTP 서버 및 클라이언트에서

마이크로 서비스를 구축하기위한 훌륭한 플랫폼을 제공합니다.


불안정한 상태에서는, 입력량을 제어해야 출력량이 더 안정적으로 많이 처리를 할수 있다란 내용


출처 : http://readme.skplanet.com/?p=12465





AKKA.NET-실습에서 샘플코드 기능검증과 활용안을 준비중에있습니다.

키워드로 살펴본 AKKA가 가진 스택범위



  • ReceiveActor
  • UntypedActor
  • Routers
  • Dispachers
  • Mailboxes
  • Inbox
  • FiniteStateMachines
  • FalutTolerance
  • DependencyInjection
  • TesitingActorSystems
  • CorrdinatedShotdown
  • EventSourcing
  • SnapShots
  • AtLeast OnceDelivery
  • Event Adapters
  • PersitentFSM
  • Storage Plugins
  • Custom Serialization
  • Persitence Query
  • Basics and working with Flows
  • Working with Graphs
  • Modularity,Composition and Hierarchy
  • Buffers and working with rate
  • Custom Stream processing
  • Working with stream IO
  • Pipelining and Paralleism
  • Cluster Routing
  • Cluster Configuration
  • Accesing the Cluster Actor
  • Distibuted Publish Subscribe in Cluster
  • Cluster Client
  • Cluster Sharding
  • Distibuted Data
  • Event Bus
  • Logging
  • Scheduler
  • Circuit Breaker


액터모델을 도입한 개발 툴킷들

Akka : http://akka.io/ -Akka (Scala및 Java에서 사용가능)

Akka.net : http://getakka.net/ ( JVM버젼을 닷넷 변환으로 포팅)

Erlang : http://erlang.org/doc/getting_started/conc_prog.html - Actor의 원조

Orleans : https://dotnet.github.io/orleans/ - MS에서도 Actor모델을 도입

LightBend : https://www.lightbend.com/products/reactive-platform (종합선물 셋트 : 중심엔 AKKA가있고 주위에 마이크로서비스를 위한 플랫폼이 있음)

LightBend_한국지원 : http://www.qtii.co.kr/product/LRP.html


그외 기타 정보

액터도입현황 : https://en.wikipedia.org/wiki/Actor_model#Actor_libraries_and_frameworks

파이썬 Actor : http://thespianpy.com/doc/#outline-container-orgheadline7

국내도서 추천 : Akka 코딩 공작소 ( 길벗 )


이곳 문서에서는 동시성처리에 대한 여러가지 내용을 참고하고있으며 주로 위 내용에 영향을 받아 정리중에 있습니다.

최종목표는 여기서 설명된 이론들을 이해하고, 실제로 동일하게 작동하는지 검증을 하는 활동의 문서입니다.