You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 238 Next »

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


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

  • 분산처리 환경의 이해와 필요한것들
  • 분산처리 개발에서 고전적인 개발방법이 가진 한계와 이를 단순화하는 방법
  • C# 닷넷 진영에서의 AKKA활용
  • JAVA 진영에서의 AKKA활용법

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

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

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


분산처리를 직접 설계한다란것은 비동기 동시성처리에 대한 최신 언어스펙을 사용하게됩니다.

AKKA의 동일컨셉을 가지고 C#/JAVA 버젼으로 각각 활용할수 있는 예제코드를 설명할예정이며

이것은 자신이 알고있는 언어스펙이 상대편에는 어떻게 쓰이는지? 또는 상대편에 있는 스펙인데 자신의 진영쪽에도

알고보니 더 좋은 컨셉이있더라등을 파악할수 있습니다. 모던한 언어스펙은 상호간 영향을 받아

발전을하였기때문에 JAVA와 닷넷 환경을 비교하는것은 좋은 개발방법중에 하나가 될것입니다.

예를 들면 JAVA의 JPA와 QueryDSL 의 컨셉이 닷넷진영에는 뭐가 있는지? 찾아본다고 하면

놀라운 사실을 알게됩니다. ORM은 AKKA와는 별개이지만 메시지중심 설계로 패러다임전환하기위한

전초 단계입니다. JAVA VS NET ORM은 별도로 다루도록 하겠습니다.( http://wiki.webnori.com/display/webfr )


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 서버 및 클라이언트에서 마이크로 서비스를 구축하기위한 훌륭한 플랫폼을 제공합니다.

이것은 AkkaStream에서 지원을 합니다.



역압력 설정에따른 처리량

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

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


메시지흐름의 진보된 모니터링

메시지중심의 스트림 설계가 잘되었다고 하면 Request에대한 흐름과

병목지점에대한 파악및 조정이 가능해집니다. 이것은 한번에 이루어질수 없으며

데이터중심적인 설계방식에서 메시지중심으로 개발 패러다임을 바꾸고

그에 맞는 기반시스템을 먼저 구축할필요가 있습니다.

출처 : https://www.lightbend.com/products/enterprise-suite/intelligent-monitoring





키워드로 살펴본 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


추가 이점

JAVA와 .NET 진영에서 같은 사고방식으로 동시성및 메시징 처리에 관련된 문제를 해결할수 있습니다.




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

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 코딩 공작소 ( 길벗 )


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

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



  • No labels