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

Compare with Current View Page History

« Previous Version 77 Next »


목차



Unable to render {children}. Page not found: AKKA-Training.

장애처리에 유연하고 고성능 분산처리 개념을 익히기위해 AKKA를 선택했으며

관련 지식(영문메뉴얼,구글링)을 한글화하고 카테고리화 하는데 목적이 있는 문서페이지입니다.

C# 코드베이스로 테스트하며 작성예정이지만, 상황에따라 스칼라/자바 코드등이 언급될수도 있습니다.

ACTOR는 동시성/분산처리 해결을 쉽게하는 언어에 종속적이지 않는 개발 패턴이며

개발패턴과 상관없이 본질적인 문제를 파악하교 해결하는 과정은 라이브러리 혹은 툴깃에 종속적이지 않습니다.

AKKA의 근본 철학은 Erlang의 Actor에서 영향을 받아 탄생이된 툴킷이며

이것을 배우는 과정에서 어떠한 패턴/개발언어에 종속적이지 않는 일반적인 분산환경에서의 필요한 개발 상식이 조금더 풍부해 질것으로 기대해봅니다.

*그림 : JAVA와 .NET의 이기종 통신을 지원하는 Jnbridge.com 에서 발췌

Akka

Akka는 오픈 소스 툴킷으로 동시성과 분산 애플리케이션을 단순화하는 런타임이다.  

동시성을 위한 여러 프로그래밍 모델을 지원하며, Erlang으로부터 영향을 받아 actor기반의 동시성이 두드러진다.

Akka는 Java환경및 .net Framework에서 이용가능하다. 


번외 - MS Orleans ( https://dotnet.github.io/orleans/ ) : MS에서도 Actor 개발 패턴의 장점을 인지했는지?

Actor 모델을 지원하는 Orleans 라이브러리를 Microsoft. 네임스페이스에 포함하기 시작했으며  

다음 .net framework에는 기본 탑재될것으로 예상해봅니다.( 항상 틀리는 플래폼에 대한 예측)

MS가 프레임워크에 공식적으로 포함시키면, Microsoft. 네임스페이스를 제거해버립니다.

이 여부에따라 라이브러리이냐? 프레임워크냐? 분류가되는듯 합니다.

MS Orleans에서 언급되는 스택이 AKKA에서 언급되는 스택의 범위가 유사합니다. .

Java(JVM) ↔ C#(CRM) 환경을 넘나들기 위해서는 개인적으로 AKKA를 추천합니다.


특징

  • 동시성은 메시지 기반이며 비동기 방식으로 이루어진다: 일반적으로 변형 가능한 데이터를 공유하거나 동기화되는 primitive를 사용해서는 안됩니다: Akka는 액터 모델을 구현한다. ( 객체 공유는 죽음의 칵테일과 같다라고 비유하기도 합니다.)
  • 동일한 호스트든 분산된 호스트들이든, 직접 통신하든, 몇몇 혹은 다수의 스레드 상에서 동작하는 라우팅 채널을 이용하여 통신하든, 혹은 이외의 방법으로 통신을 하든 actor들이 상호작용하는 방식은 동일하다. 이러한 세부사항들은 프로그램의 수정 없이 스케일-업(더 성능이 뛰어난 서버를 사용)하거나 스케일-아웃(더 많은 서버를 사용)하기 위해 배포 시점의 구성 메카니즘에 따라 변경할 수 있다.
  • Actor들은 프로그램의 오류를 연관성에 따라 계층적으로 분류한다. 이 오류들은 actor의 supervisor의 이벤트로 처리된다(어느 actor가 오류를 발생했다는 메시지인지를 가리지 않음). 얼랭과는 대조적으로 Akka는 parental supervision을 강조한다. 이는 각 actor가 parent actor에 의해 생성되고 감독받는 것을 의미한다.


1. 프리미티브 (Primitive)

  ㅇ 영어 뜻으로는 `원초적인`,`원시적인`,`가장 기초적인`

  ㅇ 공학적 의미로는, 가장 기본적인 동작에 대한 의미적 표현을 뜻함
     - 어떤 동작을 실행하거나, 수행될 동작에 대한 통보(통지)의 의미를 갖음

 2. 프리미티브 例)통신 계층에 의해 제공되는 계층간 서비스로써의 `프리미티브(동작)` 
     - 사실상 통신계층과 관련되어, 서비스는 한 계층이 상위계층에게 제공하는
       프리미티브(동작)의 집합이라 할 수 있음
        . 이때, 하위계층은 서비스의 제공자가 되고 상위계층은 서비스의 사용자가 됨

  ㅇ 그래픽 표현으로써의 `프리미티브`
     - 그림을 만드는 기본 요소 즉, 그래픽(그림)에 대한 가장 기초가되는 표현(서술) 요소
        . 그래픽 요소를 기술하는데 사용되는 그래픽 패키지 내의 관련 함수를 지칭하기도 함
     - `점은 좌표 위치를 지정`하게되며, `선분은 두 좌표를 지정`하는 등


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


참고링크: 주요참고 문서

영문 메뉴얼이 익숙하면,재해석된 정보보다 원문을 보는것을 추천합니다.  이문서는 원본문서+추가정보 조합을하였으며 개인적 취향에따라

이해가 쉽고 잘정리된 문서위주로 재해석의 과정을 거쳤으며, 실습은 작동검증의 과정과 더불어 새롭게 구성하였습니다. 

진행사항


문서화도 어떠한 개발 프로세스임으로 JIRA의 기능을 1퍼 활용

AKKA의 문서화는 다음과 같이 요란하게 진행중입니다.

  • 카테고리화 범위를 위키로 작성
  • 문서 카테고리별 지라 Task 작성
  • 문서작성중 예제코드 작성 필요시 지라 Task 작성
  • 예제 코드는 Git(Bitbucket)을 이용하여 작성
  • 예제 코드에대한 설명 위키에 카테고리내에 문서화
  • 예제 코드 리뷰기능 사용가능
  • 스크럼보드를 통한 추후 문서계획 위키내에 자동반영

Atlassian PreView 에서 자세하게 설명


Unable to locate Jira server for this macro. It may be due to Application Link configuration.


이 문서 검색

인기있는 주제

특별 페이지

Space Index

Total number of pages: 137

0-9 ... 24 A ... 27 B ... 1 C ... 8 D ... 1 E ... 1
F ... 3 G ... 1 H ... 0 I ... 3 J ... 1 K ... 4
L ... 3 M ... 4 N ... 0 O ... 1 P ... 5 Q ... 0
R ... 9 S ... 6 T ... 3 U ... 3 V ... 0 W ... 2
X ... 0 Y ... 0 Z ... 0 !@#$ ... 0    

0-9

Page: 00. Prepare
Page: 00. Streams Quickstart Guide
의존 <dependency> <groupId>com.typesafe.akka</groupId> <artifactId>akka-stream_2.12</artifactId> <version>2.5.14</version> </dependency> import akka.stream.*; import akka.stream.javadsl.*; import akka.Done; import akka.NotUsed; import akka.actor.ActorSystem
Page: 00.At-Least-Once Delivery
At-Least-Once Delivery - 적어도 메시지를 한번 보내려는 메카니즘으로 PersistenceActor와 결합하여 실패없는 메시지 전송 목표를 달성할수 있습니다. 적어도 한번 보내려는 메카니즘으로 인해 중복 메시지 발생할수 있음에 유의하여 작성 해보겠습니다. http://erlang.org/faq/academic.html#idp32880720 http://erlang.org/faq/academic.html#idp32880720 : 초창기에
Page: 00.Dispatcher
Dispatcher는 ActorSystem 내에서 실행되는 모든 코드를 스케줄링을 하며 각 Actor의 처리량과 시간 점유율을 조정하여 각자에게 공정한 리소스를 제공합니다. 스케줄러방식을 복잡한 스레드 코드 구현이 아닌, 전략적인 설정화를 통해 구상할수가 있습니다. Dispatcher의 탄생배경? 전통적인 개발방식에서 병렬처리를 통해 스케일업과 관련한 성능문제를 해결하였으며 고급적인 여러 스레드모델이 등장하여 동시성 경합문제등을 해결을 하였으나, 장비한
Page: 00.Finite State Machines
Actor API중 Become/Unbecome으로 간단한 상태변환 액터 설계가가능하지만 조금더 복잡한 상태머신이 필요할시 AbstatractFSM 객체 활용이 가능합니다. 상태머신 디자인샘플 image2018-5-9_23-14-47.png image2018-5-10_0-54-48.png 언랭에서의 유한상태머신 디자인 컨셉에서 영향을 받았습니다. http://erlang.org/documentation/doc-4.8.2/doc/design_princip
Page: 00.Lifecycle
액터가 생성되고 삭제되기 까지 어떠한 생명주기를 가지는가에대한 주제로 OOP에서도 우리가 만든 객체가 어떠한 생명주기를 가지고 메모리에 해제가 되는가와 연관된 주제입니다. 가비지 컬렉터가 관여하는 생명주기와, 설계된 액터의 생명주기 관리는 많은 차이가 있습니다. 일반적으로 액터는 직접 종료하거나,장애에 의해 제거조건이 생기지 않는한 자동으로 소멸되지 않습니다. image2018-5-1_15-43-53.png 액터의 생명주기를 잘 표현한 그림입니다. 액터
Page: 00.RemoteActor
Actor로 설계된것은 원격으로 확장이 가능하기때문에 RemoteActor라는 객체는 존재하지 않습니다. 단지 로컬액터와 동일한 방식으로, 원격지 액터와 대화를 할수 있으며 직렬화,TCP 통신방식등은 몇가지 설정으로 변경가능하며 Akka에게 맞기면 됩니다. 사용준비조건 //메이븐 설정추가 <dependency> <groupId>com.typesafe.akka</groupId> <artifactId>akka-remote_2.12</artifactId> <
Page: 00.UnitTest
Junit에서 지원하는 일반적인 유닛테스트 방법은 순차적으로 테스트 진행이됩니다. 동시성 처리에서 이러한 방법은 한계가 있습니다. 예를들어 어떠한 메시지를 보내고나서 그 메시지를 검증 하기위해서 액터 작동방식을 동기적으로 값을 반환하는 방식으로 사용해야하며 비동기적 처리 원칙에 어긋나게 되며 순차적 검증방식에서 이것을 확인하기가 어렵습니다. 그래서 AKKA Testing 툴킷은 기존 모듈을 비동기적으로 처리하되, 메시지 큐를 검사하여 메시지가 올바르게
Page: 01. ACTORS
Actor란? 액터는 매우 가벼운 동시성 엔터티들이다. event-driven receive loop를 이용하여 비동기적 메시지를 처리한다. 메세지에 대응되는 패턴매칭은 액터의 행동을 나타내는 굉장히 편리한 방법이며 추상레벨을 높혀서 Akka 를 가져다가 사용하는 개발자들이 분산/병렬 코드를 작성하기 굉장히 쉽게 해준다. 멀티스레드 → 비동기프로그래밍 에 이은 새로운 패러다임 다양한 역활을 하는 AKKA에서 준비된 액터에대해 알아봅니다.
Page: 01. Future
Actor와 같은 비동기 메시지 객체를 이용하기위해서는, 그것을 호출하는 쪽에서도 비동기처리가 가능한 언어 스펙을 지원해야한다는것입니다. 이것은 AKKA를 이용하지 않더라도, 외부 비동기처리 메시지시스템과 연동을 할때도 중요한 요소입니다. Actor 메시지처리기법은 몰라도 되지만 JAVA가 제공하는 중요한 비동기처리 방식에대한 이해는 더 중요한 요소입니다. Future(미래)와 Promice(약속)은 비동기처리에 있어서 중요한 개념입니다. 미래에는 블록
Page: 01. Working with Graphs
Stream Basic1 - Sum(1~10) package com.psmon.cachedb.actortest; import org.springframework.stereotype.Component; import akka.*; import akka.stream.*; import akka.stream.javadsl.*; import java.util.Arrays; import java.util.concurrent.CompletionStage; /* Act
Page: 01.EventSourcing
이벤트 소싱(및 샤딩) 은 커다란 웹사이트를 수십억명의 사용자 규모로 확장하는 아이디어이며 이아이디어는 매우 간답합니다. 메시지가 발생할때 명령의 이벤트 목록을 생성하고 저장을 합니다. 이 계획은 이벤트만이 저장소에 추가되고 아무것도 변이되지 않는 점이며 이를 통해 이벤트 스트림의 소비자를 완벽하게 복제하고 확장할수 있습니다. 이벤트 소싱을 실현하기 위해서, AKKA에서 PersistenceActor 가 사용이 됩니다. Event Driven 이벤트
Page: 02. Remoting
Remote 는, 기존 작성했던 액터를 그대로 재활용하여 , 액터설계의 코드변경없이 원격지에서 사용이 가능합니다. 이것은 아주 큰장점입니다. 대부분의 비동기처리에 있어서 로컬에서도 휼륭한 역활을 하지만 , 코드 변경없이 원격 배치가 가능합니다. akka { actor { provider = "Akka.Remote.RemoteActorRefProvider, Akka.Remote" } remote { helios.tcp { port = 8001 #bound
Page: 02.Actor
다음과 같은 간단한 액트를 설계해보자 인사를 받아주는 액트(Greeter) 인사에 반응하여 로그를 찍는 액트( Printer) package com.psmon.akka.study; import com.psmon.akka.study.Printer.Greeting; import akka.actor.AbstractActor; import akka.actor.ActorRef; import akka.actor.Props; //#greeter-messages pu
Page: 02.Snapshots
스냅샷은 앞장 이벤트소싱과 함께 사용이되었습니다. 그 컨셉은 간단합니다. 무수히 발생하는 이벤트로 인해 우리가 설계한 어떠한 객체의 상태는 지속적으로 변경된다는 점이며 필요한 순간의 청사진만 찍어서 그것을 적절하게 활용할수 있다란 것입니다. 상태를 기록하는 범위와 주기에따라 아래와 같은 차이가 있으며, 그 차이를통해 스냅샷을 이해할수가 있습니다. 발생 이벤트 저장 : 상태복원은 연속된 이벤트 재생을 통해 가능할수있으며 리플레이와같은 구현을 위해 이벤트
Page: 03. Persistence
Persitence의 경우 액터의 상태를 메모리에 지속 또는 영속적으로 보존하여 다양한 성능및 분산전략에 사용이됩니다. 유사한 목적인 Redius의 경우도 메모리 데이터의 영속성을 보장하지만 KeyBase로 복잡한 분산전략에 단순한 대응만을 하기때문에 한계가 있으며 Actor의 Persitence는 FSM(유한상태머신)까지 활용가능하며, 다양한 전략에서 대응을 할수가 있습니다. Persitence를 사용하기위해 몇가지 PersitenceActor가 제공
Page: 03.TimerActor
주기적으로 작동하는 타이머/스케쥴러 기능은 오랫동안 사용된 방식입니다. 일반적으로 타이머 스레드를 직접 생성하거나, 프레임웍이 제공하는 타이머기능을사용할수도 있지만 액터는 능동적인 객체로, 액터에게 타이머기능을 직접 설계반영도 가능하지만 AKKA에 의해 제공되어지는 액터입니다. 액터설계 import java.time.Duration; import akka.actor.AbstractActorWithTimers; public class MyActor ext
Page: 04. Clustering
RemoteActor와 Router을 통해서 노드수가 고정된 분산 어플리케이션을 만드는 방법을 알게되었습니다. 하지만 이것만으로 충분하지 못합니다. 운영중 노드개수를 유연하게 조정하거나 부분장애발생시 전체시스템에 영향이 없는 시스템이 필요로하게되며 감시하고 제어할수 있는 그러한 환경이필요하게됩니다. 그것이 Cluster이며 Cluster를 소개하는 가장 좋은 방법은 Cluster가 해야할 역할에대해 간략하게 소개하는것입니다. Cluster의 역할 구성
Page: 04.FSM Actor
유한상태기계(Finite State Machine) 위키백과, 우리 모두의 백과사전. 유한 상태 기계(finite-state machine, FSM) 또는 유한 오토마톤(finite automaton, FA; 복수형: 유한 오토마타 finite automata)는 컴퓨터 프로그램과 전자 논리 회로를 설계하는데에 쓰이는 수학적 모델이다. 간단히 상태 기계라고 부르기도 한다. 유한 상태 기계는 유한한 개수의 상태를 가질 수 있는 오토마타 https://ko
Page: 05. Streams
오늘날 우리가 인터넷에서 서비스를 사용하는 방식은 데이터 전송을 비롯한 많은 스트리밍 데이터 인스턴스를 포함하고 있습니다. 그것이 다운로드 서비스이든,영화스트리밍 서비스이든 대용량의 데이터를 우리의 어플리케이션이 가진 메모리와 네트워크대역으로는 순간적으로 처리할수가 없습니다. 스트리밍은 항상 생산자와 소비자로 구분되어 있으며 어떻게 생산자와 소비자의 다양한 속도차이를 고려하여 잘처리하느냐에 대한 고민이 필요합니다. akka-stream은 스트림처리에 제
Page: 05.RouterActor
분산 어플리케이션 내에서 고성능 메시지전송을 위해 이러한 라우팅 전략이 필요하며 어플리케이션에 내재하여 손쉽게 사용이 가능합니다. 라우팅전략 Routing strategy 심플 라우팅 워커 설계 라우팅 전략은 다양한 유입처리를 어떻게 분배하여 성능적 또는 안정적으로 유실없이 모두 처리할것인가? 에 대한 해결책으로 , AKKA에서는 서비스코드 내에 직접 설계가 가능하도록 몇가지 툴을 제공해줍니다. 물론 이러한 목표를 달성하기위해 KAFKA와 같은 외부
Page: 06. Utilities
Page: 06.FaultTolerance
장애 허용시스템 장애에 대응하기 위해서는 크게 두가지 방법이 있습니다. 시스템및 서비스가 절대로 장애가 발생하지 않아서 아무것도 하지않는 경우 반대로 모든 장애에 대해 대응책을 세우는것입니다. 전자는 거의 불가능하고, 후자또한 어떠한 장치로 모든것에 대응하는 전략을 세우는것은 아주 어렵고 서비스코드에 썩임으로 서비스코드의 흐름을 복잡하게 만들수가 있습니다. AKKA자체로 이러한 장애에대한 대응을 자동으로 할수 있는것은 아닙니다. 단지 ,이러한 대응을 일
Page: 07. Deployment Scenarios
AkkaSystem 사용은 다양한 방식으로 실행화 할수 있습니다. Akka.net 설치 PM> install-package Akka PM> install-package Akka.Remote Console 실행 시나리오 using Akka; using Akka.Actor; using Akka.Configuration; namespace Foo.Bar { class Program { static void Main(string[] args) { //conf

A

Page: Actor
액터는 매우 가벼운 동시성 엔터티들이다. event-driven receive loop를 이용하여 비동기적 메시지를 처리한다. 동시 처리성을 높이려면 Dispatcher 를이용 ,분산처리 확장은 Cluster가 활용될수 있으며 로컬용으로 작성된 개발방법이 크게 달라지지 않습니다. AKKA는 액터를 전반적으로 활용하기때문에 액터패턴에 대한 컨셉을 먼저 살펴보겠습니다. 간단한 용어설명 Active Object https://en.wikipedia.org
Page: Actor Address
액터는 어디든 생성할수 있고, 어디에서든지 참조하여 메시지 전송이 가능합니다. 이와 관련한 액터의 특징을 살펴보겠습니다. actor의 주소는 원격과 로컬로 구분될수 있으며 Rest api의 주소체계와 유사하며 탑다운 방식으로 생성되게됩니다. RestAPI를 설계할시에도 앞의 네이밍이 큰범주(Parent)를 표현하는것이 일반적입니다. ActorOf vs ActorSelection // 'user/myActor' 경로에 사용자가 설계한 MyActor를 생성
Page: Actors
가장 기본적인 Actor의 설계방법을 살펴보겠습니다. Actor에 대한 사용패턴/컨셉은 언어/플래폼이 틀려도 큰 차이가 없습니다. 액터메시지의 특징 image2018-4-8_14-43-10.png 액터는 각각 고유의 메시지 큐를 가지고 있고, 하나의 액터는 메지큐에 순차적으로 끄집어 처리하기때문에 일반적인 상황에서 순서보장이 됩니다. 더 자세한 참고자료: Actor 주요 액터 모듈 import akka.actor.ActorSystem ActorSyst
Page: AKKA AI Labs
AKKA는 AI 기술자체가 포함된 툴킷은 아니며 AI기술을 잘 다루기 위해서 AkkaStream기술을 포함 분산처리 기술이 이용될수 도있습니다. GPT를 포함 AI를 활용하기 위한 AKKA 연구공간입니다. 컨텐츠항목
Page: Akka Cluster with Spring BOOT
Spring BOOT에서 AkkaCluster를 이용 , Spring Boot Application을 클러스터화하는것을 시도해보겠습니다. 최초 클러스터화 하는것은 어렵게 보일수 있지만, 한번 클러스터 구성이 된이후에는 분산처리 필요한 복잡한 도메인 처리를 메일박스를 가진 액터모델을 이용해 간단하게 할수있습니다. AKKACluster(이하 클러스터)의 개념을 먼저 살펴보고 Spring Boot에 탑재하여 클러스터로 작동시키는 구현 코드까지 알아보겠습니
Page: Akka for Java
최근 자바진영 오픈소스들은 Maven,Graddle 빌드환경 둘다 지원함으로 자바 개발환경에서 AKKA역시 둘중하나 선택 가능합니다. AKKA에서 특이점은 SCALA를 사용한다고 했을시, SBT라는 조금 특이한 형태의 빌드환경도 사용가능합니다. 기존에 사용하던 빌드환경과, 웹서비스에 통합 할수 있으니 개발 IDE에따라 빌드환경을 선택할수 있습니다. Eclipse IDE 준비하기 Eclipse : https://www.eclipse.org/ https:/
Page: AKKA Labs
AKKA는 서비스내에서 비동기 메시지처리에 있어서 유연하고 확장가능한 메시지 설계를 직접할수 있는 방법을 제공하며 또한 그것을 외부 시스템과도 상호운영이 잘될수 있는 방법을 제시합니다. 아카의 이러한 상호운영가능성에 대한 의문을 풀기위해 여러가지 외부 시스템과 상호운영할수 있는 변종을 만드는 실험을 해보겠습니다. image2017-10-6_7-58-32.png 실험체
Page: AKKA NEWS
AKKA와 관련된 기술 뉴스를 다룹니다.
Page: AKKA TestAPP
학습 테스트환경 구축 AKKA 코드를 테스트를 하기위해서 다음과 같은 방법이 있습니다. 간단하게 사용자 정의 클래스 생성하여 학습 코드 집합 VisualStudio에 유닛테스트 프로젝트활용 분산환경 메시지 Test를 위해 AKKA Test Toolkit사용 Actor 개념을 익히기까지는,유닛테스트를 사용하지 않고 사용자 정의 테스트 클래스를 통해 실습을 진행하겠습니다. 유닛테스트는 충분한 이해를 바탕으로 다양한 시나리오를 검증하는것이기때문에 Acto
Page: Akka vs WebFlux
akka를 이용 kafka를 이용하는것과 weblux를 이용 kafka를 이용하는것의 차이점에대해 알려주세요 Akka와 WebFlux 모두 비동기 프로그래밍과 리액티브 프로그래밍을 지원하는 라이브러리이며, Kafka와 연동할 수 있습니다. 그러나 두 라이브러리는 설계 철학, API, 사용법 및 적합한 사용 사례에 따라 다르기 때문에 주요 차이점을 아래에 정리하겠습니다. 설계 철학: Akka: Actor 모델을 기반으로 하는 동시성과 분산 시스템 설계를
Page: AKKA with Http
Akka Http는 코어 웹프레임워크를 바꿔서 웹서버의 프레임워크를 변경하는게 아닌 기존 웹프레임워크를 유지하면서 Http에 대한 통합레이어 구축에 중점을 두고 있습니다. link : https://doc.akka.io/docs/akka-http/current/scala/http/index.html https://doc.akka.io/docs/akka-http/current/scala/http/index.html AkkaHttp가 적용된 웹프레임워크:
Page: Akka 국내활용 사례
루나소프트 이상한 툴킷 AKKA 활용편 분산환경에서의 동시성 처리에대한 해결모델은 언어및 플랫폼에 종속적이지 않으며,AKKA가 아니여도 됩니다. AKKA는단지 분산처리에있어서 필요한 기본개념을 먼저 알려주고 이벤트중심 설계를 활용한 단순화된 개발모델을 제시하며 개발자는 그것을 이용하여 응용프로그램내에 직접 작성 할수있습니다. 그 중심엔 액터가 있으며 선택가능한 수많은 스택중 하나입니다. AKKA는 OOP에서 디자인 패턴과 함께, 다양한 메시지 전송전략및
Home page: Akka-Home
image-2023-8-23_13-7-46.png 분산처리환경에서 단순화된 개발방법을 제시하는 AKKA 분산환경에서의 동시성 처리에대한 해결모델은 언어및 플랫폼에 종속적이지 않으며,AKKA가 아니여도 됩니다. AKKA는단지 분산처리에있어서 필요한 기본개념을 먼저 알려주고 이벤트중심 설계를 활용한 단순화된 개발모델을 제시하며 개발자는 그것을 이용하여 응용프로그램내에 직접 작성 할수있습니다. 그 중심엔 액터가 있으며 선택가능한 수많은 툴중 하나입니다. 다음
Page: AKKA.JAVA
목차 Akka 를 JAVA에서 사용하는것은 몇가지 언어적인 사용법의 차이이며, Actor 를 이용하는 방식은 SCALA/JAVA/.NET 와 유사합니다. 여기서는 JAVA 버젼으로 ACTOR를 이용하는 방식을 설명하고 외부 메시징 시스템과 어떻게 자연스럽게 상호연동을 할수 있는가 를 살펴보겠습니다. AKKA 연구소 GIT : https://github.com/psmon/java-labs/blob/master/springweb/src/test/java/c
Page: AKKA.NET
최근(.net core 3.0) 작동기준, 작동가능 최신 내용은 다음 링크에 정리가 되어있습니다. 컨셉 변경없으나 실습은 다음 링크에 정리된 자료를 권장합니다. Link : .NET Core With Akka - 윈도우와/리눅스환경에서 작동을 크로스 검증을 실시 하고 있습니다. 실습을 통한 AKKA의 기능학습 개발환경 Visual Studi Code / 2019 GIT ( 연습 코드를 가져오기위한 용도 ) .net core 크로스 플랫폼 지원 실
Page: Akka.net on linux
akka.net 을 이용하기위해서는 .net Framework가 필요하며 윈도우에 최적화 되어있습니다. 하지만, 리눅스구동 모노 프로젝트가 visual studio 2017에 공식적으로 통합됨으로 ms에서 공식적으로 닷넷도 리눅스로의 서비스를 지원합니다. 더욱이 도커와 완전 통합되어 기존과 같이 그냥 개발하고, 리눅스 설치 없치 리눅스 실행 명령을 알필요없이 기존과 동일한 로컬 개발을 경험을 유지하면서 리눅스에서 우리의 코드를 실행할수있습니다. 리눅스정
Page: akka.net with neo4j
neo4j graph db를 닷넷에서 이용하는 방법을 먼저 알아본후 액터 메시지큐에 그래프db이벤트를 발생시켜, 메시지큐를 통해 추천용 이벤트를 추가하는 방법을 알아보겠습니다. 추천에서의 그래프DB 활용방법및 닷넷의 구체적인 DI(AKKA연결)설정등은 생략되었습니다. 사전셋팅 StandAlone Neo4j image2021-7-18_18-28-4.png docker-compose를 통해 로컬환경구축이 가능하며, neo4j 프로토콜을 사용하여 초기에 로그
Page: Akka.NetCore
.NET Core With Akka
Page: AkkaWithAduino
Akka.net 액터메시지를 통해 분산처리및 로드밸런싱에 라우터장치를 살펴보고 분산처리 되는 목적지인 라우티를 아두이노 연결된 장비에 실제 램프를 켜는 변종실험을 해보겠습니다. 작동코드위치 : https://github.com/psmon/AkkaUno https://github.com/psmon/AkkaUno 아두이노란 아두이노란 물리적인 세계를 감지하고 제어할 수 있는 인터랙티브 객체들과 디지털 장치를 만들기 위한 도구로, 간단한 마이크로컨트롤러(
Page: AKKA활용요소
유닛테스트 image-2023-8-13_14-33-33.png 전통적 유닛테스트에서는 함수호출의 결과값을 기다려야하는 동기적 검사 위주로 작성되지만 이벤트 메시징 큐기반으로 작성된 모듈기반에서는 이러한 테스트 방식을 채택한다고 하면 작동중인 코드를 중단한후 검사해야하지만 액터의 특성을 이용 관찰자를 연결하여 관찰자의 메시지 검사를 통해 서비스 액터의 블락킹없이 유닛 테스트를 수행할수 있습니다. # hello 이벤트를 받으면, world를 반환하는 액터의
Page: alpakka
Alpakka 특징 알파카(Alpakka)는 레액티브(Reactive) 스트림 처리를 위한 라이브러리입니다. 이 라이브러리의 주요 장점은 다음과 같습니다: 다양한 스트림 처리 기술 지원: 알파카는 다양한 스트림 처리 기술을 지원합니다. 예를 들어, Apache Kafka, Amazon S3, Amazon Kinesis, RabbitMQ 등과 같은 다양한 데이터 소스와 Sink를 처리할 수 있습니다. 높은 확장성: 알파카는 대용량 데이터 처리를 위한 높은
Page: Alpakka - AWS LocalStack - S3
image-2024-1-10_20-9-1.png LocalStack의 AWS의 요소를 로컬또는 온프레미스기반 구축을할수 있으며 로컬또는 개발환경에서 테스트 서버로 이용될수 있습니다. https://www.localstack.cloud/ https://www.localstack.cloud/ https://docs.localstack.cloud/user-guide/tools/localstack-desktop/ https://docs.localstack.c
Page: Alpakka Kafka Test -JAVA
JAVA에서 KAFKA활용을 하기 위한 툴중하나인~ Alpakka Kafka를 활용하는 UnitTest기를 작성해보았습니다. 로컬환경 Kafka준비 version: '3.5' services: zookeeper-1: image: confluentinc/cp-zookeeper:5.5.1 ports: - '32181:32181' environment: ZOOKEEPER_CLIENT_PORT: 32181 ZOOKEEPER_TICK_TIME: 2000 kaf
Page: apache camel with akka
아파치 카멜: 카멜은 서로 다른 프로젝트간 통합(intergration)에대해 참신한 아이디어를 제공합니다. 라우팅과 중계 엔진 ENTERPRISE INTEGRATION PATTERNS (EIPS) DOMAIN-SPECIFIC LANGUAGE (DSL) 풍부한 컴포넌트 라이브러리 페이로드에 독립적인 라우팅 MODULAR와 PLUGGABLE 아키텍처 POJO 모델 손쉬운 구성 자동 타입 변환 LIGHTWEIGHT CORE 테스트 킷 활발한 커뮤니티 아카
Page: At-Least-Once Delivery
At-Least-Once Delivery - 적어도 메시지를 한번 보내려는 메카니즘으로 PersistenceActor와 결합하여 목표를 달성할수 있습니다. 보낼려는 메시지가 유실될수 있는 가능성을 제거하며 적어도 한번보내려는 메카니즘으로 인해 중복 메시지 발생에 유의하여 작성 해보겠습니다. 이것은 메시지를 무조건 한번만 보내야할때 유용합니다. 아주 착한 택배 서비스 시나리오를 가정해봅시다. 택배 아저씨는 택배를 대상에게 일반적으로 아주 빠르게 대부분
Page: AWS LocalStack - Lambda
LocalStack은 함수형 작동도 AWS와 유사하게 작동지원을 하며 서버리스의 장점이 있으나~ 클라우드 비용없이 간단한 함수를 작동해볼수 있습니다. DataLake에서는 간단한 ETL을 익숙한 언어로 작동하고자할때 활용될수있습니다. 일반적으로 Jupyter와 같은 Notebook에서 작동검증된 코드를 작동시킬때 등록시도해볼수 있습니다. ETL은 추출(Extract), 변환(Transform), 로드(Load)를 의미합니다. 사용된 도커구성 - Dock
Page: AWS LocalStack - S3
image-2024-1-10_20-9-1.png LocalStack의 AWS의 요소를 로컬또는 온프레미스기반 구축을할수 있으며 로컬또는 개발환경에서 테스트 서버로 이용될수 있습니다. https://www.localstack.cloud/ https://www.localstack.cloud/ https://docs.localstack.cloud/user-guide/tools/localstack-desktop/ https://docs.localstack.c

B

Page: Basics and working with Flows
흐름정의를 통한 병렬 스트림처리 다음을 구현해야된다고 해봅시다. 원본 소스는 1부터 100까지 입니다. 1차 연산은 x+1을 하며 2차 연산은 1차연산 결과값 * 2 을 합니다. 최종 연산값은 콘솔에 표시가됩니다. (Sink) 전제조건으로 덧셈연산과 곱하기 연산이 아주 비싸다고 가정을 하고 연산의 효율을 위해 각각의 연산을 비동기적으로 병렬처리로 분리를 하는것을 구현해봅시다. image2017-10-8_1-28-43.png 위 흐름과 같이 , 비동

C

Page: chat-core-api
ChatCore API ( SignalR with Akka.net http://Akka.net) 웹소켓(Signalr)이 액터와 연동되어 세션단위 채널관리가 되며 API를 통해 채널 푸시기능을 지원합니다. 도메인에대한 기능은 가지고 있지않으며 여기서 제공하는 채널기능을 이용하여 다음과 같은 다양한 서비스를 커스텀하게 구현할수 있습니다. 다중채널지원 채팅솔루션 다중채널지원 푸시 시스템 채널내 라운드로빈 처리기능(채팅상담 분배) image2023-1-5_1
Page: ChatGPT QNA
akka stream을 이용해서 불특정 이벤트를 고성능으로 저장하는 프로그램을 자바로 작성해죠 Akka Stream을 사용하여 불특정 이벤트를 고성능으로 저장하는 자바 프로그램을 작성하는 방법에 대해 설명드리겠습니다. Maven 또는 Gradle을 사용하여 Akka Stream 라이브러리를 프로젝트에 추가합니다. Source와 Sink를 정의합니다. Source는 이벤트를 생성하고, Sink는 이벤트를 저장하는 역할을 합니다. 이 예제에서는 파일 시스템
Page: ChatGTP+ElasticStack+AkkaStream
ChatGPT AKKA 연계 활용편 ChatGPT OpenAPI 연동 image2023-5-6_15-29-22.png 다양한 프롬프트를 테스트해야하기때문에 ChatGPT(OpenAI) API를 이용하는 유닛테스트기를 먼저 생성 일반적인 응답속도가 30초 이상이여서 이대로는 서비스로 활용불가 프롬프트 유형화 유형별 인사이트를에 필요한 프롬프트 : 트렌드/제품품질/고객만족과 관련한 것들로 작성 프롬프트 데이터 프롬프트도 중요하지만, 프롬프트에 활용된 데이
Page: Cluster Routing
클러스터를 이해하기위해 실제 실습 코드를 통해 클러스터를 작동시켜보겠습니다. 클러스터 라우터는 이전에 설명한 Actor-라우터와 동일함으로 라우터별로 별도의 부가 설명을 생략하겠습니다. 클러스터 설계 다음과 같은 클러스터를 설계한다고 합시다. 클러스터내 라우터는 라운드 로빈으로 실행되는 노드중 하나씩 순차적으로 수행합니다. 클러스터내 라우터는 설정정변경없이 스케일업/스케일아웃이 가능합니다. 노드가 늘어나고/줄어남에 따라 순차적실행 즉 라운드 로빈 기능
Page: Clustering
Higher level Cluster tools Cluster Singleton For some use cases it is convenient or necessary to ensure only one actor of a certain type is running somewhere in the cluster. This can be implemented by subscribing to member events, but there are several co
Page: Concepts
AKKA를 배우기전, 동시성/분산처리 프로그래밍에서 언급되는 몇가지 컨셉을 간단하게 살펴보겠습니다.
Page: Config
AKKA의 구성요소들은 대부분 설정화를 통해 기능방식 변경이 가능하며 설정내용을 파악하는것만으로 어떠한 기능을 제공하는지 파악도 가능합니다. 소스코드를 통해 런타임설정도 가능하지만, application.conf 와같이 외부로 설정파일을 분리하는것이 권장됩니다. 기본 akka 설정 akka { loggers = ["akka.event.Logging$DefaultLogger"] loglevel = "INFO" stdout-loglevel = "ERROR"
Page: CRM Service Akka Use Case - 루나소프트
이상한 툴킷 AKKA 활용편

D

Page: Dispatcher
Dispatcher는 ActorSystem 내에서 실행되는 모든 코드를 스케줄링 합니다. 각 Actor의 처리량과 시간 점유율을 조정하여 각자에게 공정한 리소스를 제공합니다. 구성 변경을 하지 않는한 일반적으로 시나리오에 맞게 최적화 된 각 프레임워크가 가지고 있는 ThreadPOOL을 각각 활용합니다. JAVA의 경우 JVM에서 제공하는 스레드풀 전략을 사용 .net의 경우 .net CLR이 제공하는 스레드풀 전략을 사용 Dispatcher 설정기능

E

Page: EventSourcing
이벤트 소싱(및 샤딩) 은 커다란 웹사이트를 수십억명의 사용자 규모로 확장하는 아이디어이며 이아이디어는 매우 간답합니다. 메시지가 발생할때 명령의 이벤트 목록을 생성하고 저장을 합니다. 이 계획은 이벤트만이 저장소에 추가되고 아무것도 변이되지 않는 점이며 이를 통해 이벤트 스트림의 소비자를 완벽하게 복제하고 확장할수 있습니다. 이벤트 소싱을 실현하기 위해서, AKKA에서 PersistenceActor 가 사용이 됩니다. 장바구니를 예를 들어봅시다.

F

Page: Fault Tolerance
장애에 대응하기 위해서는 크게 두가지 방법이 있습니다. 시스템및 서비스가 절대로 장애가 발생하지 않아서 아무것도 하지않는 경우 반대로 모든 장애에 대해 대응책을 세우는것입니다. 전자는 거의 불가능하고, 후자또한 어떠한 장치로 모든것에 대응하는 전략을 세우는것은 아주 어렵고 서비스코드에 썩임으로 서비스코드의 흐름을 복잡하게 만들수가 있습니다. AKKA자체로 이러한 장애에대한 대응을 자동으로 할수 있는것은 아닙니다. 단지 ,이러한 대응을 일괄적이고 유연한
Page: Finite State Machines
FSM을 간단하게 정리하면 아래와 같습니다. 유한 상태 기계는 자신이 취할 수 있는 유한한 갯수의 상태들을 가진다. 그리고 그 중에서 반드시 하나의 상태만 취한다. 현재 상태는 특정 조건이 되면 다른 상태로 변할 수 있다. 유한 상태 기계는 가능한 상태들의 집합과 각 상태들의 전이 조건으로 정의 될 수 있다. 상태들의 노드와 그 노드들을 연결하는 조건의 엣지로 표현할 수 있다(그래프) 이러한 상태머신을 메시지 처리기에 설계하여 적용가능하다란것이 액터가
Page: Future and Promise
Future(미래)와 Promise(약속)은 JAVA 비동기처리에 있어서 중요한 개념입니다. 미래에는 블록킹이 없기때문에 어느시점 사용가능한 함수의 결과(성공또는 실패등을) 를 담을수 있는 용기라고 보면 됩니다. Scala에서 지원하는 키워드이지만 일반적으로 결과에대한 비동기적인 핸들이라고 보면 되겠으며 C#/JAVA에서도 유사한 모델을 가지고 있습니다. 이것은 AKKA의 요소가아닌 기존 개발 플랫폼의 비동기처리 요소로 나중에 Actor, Akka St

G

Page: GraceFulShotDown
도커기반으로 작동하고 SpringBoot+KAFKA채택시 고려해야할 우아한 종료(안전한 자동종료)를 작동시키기 위해서 정리한내용이며 Linux Signals/Spring Boot/Docker 과 관련된 종료사이클 3가지를 먼저 이해해야합니다. Signals UNIX 시스템의 핵심 중의 하나인 Signal은 프로세스에게 어떤 Event의 발생을 알리기 위해 전달 되는 소프트웨어 인터럽트다. 유닉스/리눅스 운영체제는 매우 다양한 종류의 Signal이 있으

H

I

Page: Install_Configuration
콘솔 APP 프로젝트 생성 실습은 콘솔 APP로 진행예정입니다. SeviceA로 생성 ( 실습에서 ServiceB,C,D 등 여러가지 테스트 서비스 생성예정 ) image2017-9-1_16-25-33.png LIB 설치 ServiceA 프로젝트에 nuget을 이용하여 라이브러리를 설정합니다. Akka - Akka.Remote - Akka.Cluster 필요한것만 설치가능하지만, Cluster는 Remote와 Akka 기반 패키지를 모두 포함함으로
Page: Introduction
Akka가 가진 구성요소와 할수 있는것 몇가지를 소개를 합니다. AKKA가 분산환경에서 쓸모있는 컨셉인가? 또는 진보된 시스템에서 도움이될것인가? 코드를 실행할 필요없이 이해와 비판의 관점에서 살펴보시면 되겠습니다. 목차:
Page: Introduction to activator
운영에서는 Maven으로 기존 빌드환경과 충돌없는 AKKA버젼으로 조합해야할수도 있지만 학습과정에서, 빌드환경을 구성하고 조합하는것은 아주 귀찮은 일입니다. 빠르게 해당 기능을 사용해보고 학습하고 검토해야하기때문에 Intelli J IDEA 에 기본으로 탑재되어 있는 Activator 로 우리가 학습하고자 하는 AKKA의 기능을 스토어에서 고르듯 , 기존 개발자가 잘 구성해놓은 템플릿을 그냥 이용하는 방법을 알아보겠습니다. 다음장에서는 Spring Bo

J

Page: JUNIT with AKKA
AKKA를 학습하기위해서는, 자신에게 맞는 유닛테스트 가능한 구조를 설계하는것이 중요합니다. 여기서 소개되는 방식은 UnitTest를 위한 최상의 설계는 아니며 , 학습과정에서 액터패턴을 검증하고 시도하는것에 대한 불편함을 현재까지 조금씩 개선한 버젼입니다. src : git-CachedbApplicationTests.java http://git.webnori.com/projects/WEBF/repos/spring_cachedb/browse/src/te

K

Page: kafka and akka.net
Apache Kafka(아파치 카프카)는 LinkedIn에서 개발된 분산 메시징 시스템으로써 2011년에 오픈소스로 공개되었다. 대용량의 실시간 로그처리에 특화된 아키텍처 설계를 통하여 기존 메시징 시스템보다 우수한 TPS를 보여주고 있다. akka.net http://akka.net을 통해 kafka 와 연동하여 kafka의 전송기능을 조금더 풍부하게 개조해보겠습니다. src위치 : http://git.webnori.com/projects/AKKA/r
Page: kafka with akka
kafka 자체로 고성능 전송처리를 간편하게 이용할수 있으며 kafka client를 통하여 여러 플랫폼에서 전송 처리가 가능합니다. kafka 기능을 Actor혹은 Akka Stream과 연동하여 조금더 유연하고 커스텀한 메시지 처리기능을 만들어 보겠습니다. 이것을 하기전 kafka를 기본적으로 사용하는 방법부터 간단하게 알아 보겠습니다. http://wiki.webnori.com/download/attachments/4489391/image2017-
Page: KafkaToS3WithPaquet
DataLake의 데이터 구성요소중 Kafka연동 Parquet 다루는부분을 연구중 Kafka에서 출발한 Json이 최종 S3( Paquet 형식)저장되기 까지 Flow를 단일 로컬지점 유닛테스트화 하여 모두작동하는 변종코드를 작성해보았습니다. MSA 관점에서 생산과 소비의 책임이 다르기 때문에 어플리케이션이 각각 분리 작동되어야하지만 그것이 잘 작동하는지검증하고 다양한 실험을 해보기까지 너무 오랜시간이 걸릴수 있으며~ 유닛테스트를 이용해 우리가 사용
Page: KubeCluster + AKKA Cluster
image2023-3-26_17-23-2.png 준비중 : 쿠버환경의 클러스터에서 Akka클러스터를 활용하는 컨텐츠 준비중...

L

Page: Lagom for Java MicroService
다음을 목표로 연구중에 있습니다. 자바 빌드/배포 환경에 고통을 받고싶지 않다. ( 정확하게는 메이븐) 작은 서비스를 여러개 만들어 유기적으로 작동시키고 싶다. 모던웹은 선택사항이나, Akka의 구성요소를 사용하고 싶다. 원클릭으로 로컬에서 개발한것을 도커로 만들고 AWS에 작동시키고 싶다. 라곰 for MicroService image2018-7-8_16-20-13.png Maven대신 SBT를 선택한이유 If you are a Java develop
Page: LeakyBucketThrottler
네트워크로의 데이터 주입 속도의 상한을 정해 제어하고 네트워크에서 트래픽 체증을 일정하게 유지한다. 일정한 유출 속도(유출 속도는 고정된 값)를 제한하여 버스트 유입 속도를 부드럽게 한다. 고정 용량의 버킷에 다양한 유량의 물이 들어오면 버킷에 담기고 그 담긴물은 일정량 비율로 떨어진다. 들어오는 물의 양이 많아 버킷의 용량을 초과하게 되면 그 물은 버린다. 입력 속도가 출력 속도보다 크면 버킷에서 누적이 발생하고 누적이 버킷 용량보다 큰 경우 오버플로
Page: load test for multiplayer game - 2005
2005년 분산처리(성능테스트) 시스템 구현을위해 사용했던 용어및 기술이 어떻게 변화되었는지? 경험기준, AKKA와 연관하여 작성해보았습니다. 로드 테스트를 위한 분산처리 시스템 image2021-9-26_18-7-48.png 2005년제작되었으며, 저수준 모듈을 포함(TCP) 모두 구현해야 했던 시기입니다. 로드 테스트 컨트롤러 image2021-9-26_19-27-51.png 분산되어 있는 Agent에게 게임 플레이어를 가능하게하는 명령이 가능하였습

M

Page: MailBox / Inbox
Actor메시지는 일반적으로 보낸순서에의한 순서가 보장이 되지만 MailBox의 경우 동시에 보낸 메시지중 우선으로 처리해야할 메시지에대해 정의가 가능합니다. 덜바쁜 녀석에게 작업을 분배한다던지, 메시지 자체에 우선순위를 높일수 있습니다. image2020-3-14_19-59-2.png 우선순위 정의 코드 using Akka.Actor; using Akka.Event; using Akka.Dispatch; //namespace ServiceA.STUDY
Page: Message protocol
RestAPI는 단순하고 직관적입니다. 하지만 미들웨어 고성능통신 또는 미들웨어 분산 마이크로 서비스 구축시 RestAPI 로만은 분명, 고성능 Push메시지를 처리하기에 성능적으로 한계가 있습니다. 선택가능한 전송모델 몇개를 간략하게 소개합니다. 연결 방식에의한 분류 RestFul(폴링방식) 일반적으로 웹서비스에 많이 사용하는 Rest방식입니다. 어떠한 웹브라우져또는 외부 고객에게 Rest-API를 통해 서비스를 제공하는것은 가장 무난하고 일반적입니
Page: MessageDeliveryReliability
액터를 사용한 신뢰성있는 메시지 전송 전략 수많은 노드로 규모를 확장하는것이, AKKA 메시지의 궁극적인 목표입니다. 여러분의 로컬에서만 실행되는 코드를 하나도 바꾸지 않고 분산시스템에서 실행되게 할수 있을까요? 짧게 답하면 '아니오' 입니다. 로컬과 원격의 환경차이를 그냥 추상화해서 없애 버릴수는 없습니다. 다음과 같은 무시할수 없는 네 영역이 있기때문입니다. 지연시간: 노드사이의 네트워크를 통해 전송되는 지연시간을 예측할수 없습니다. 부분실패: 분산
Page: MicroWebService For AKKA
요구사항 스탠드 언론으로 실행되는 경량화된 Rest 웹서비스 작성해보고 Akka Actor모듈과 연동을 해보겠습니다. 준비하기 Step0-프로젝트 생성 image2017-10-11_20-58-31.png namespace MicroAKKAWebService { class Program { static void Main(string[] args) { } } } 마이크로 웹서비스를 만들기 위해, 빈 어플리케이션을 만드는것입니다. 이것은 MS.VS를 사용하여

N

O

Page: Other Concept
유용한 외부 자료및 AKKA를 이용한 설계컨셉 Links: Actor Caching : https://yeghishe.github.io/2015/05/22/simple-caching-for-akka-actors.html https://yeghishe.github.io/2015/05/22/simple-caching-for-akka-actors.html MarkedUp In-App Marketing Demo : http://www.aaronstannard.

P

Page: Persitence
Persitence는 다음과 같은 사전적의미를 가지고 있습니다. image2018-2-20_20-21-23.png 상태(Data or State)를 저장하고 유지한다는점에서 IT전반적으로 사용되어지는 단어입니다. RDBMS는 안정적이고 범용적으로 그러한 목표를 이루어내는 대표적인 장치입니다. 대용량분산처리를위해 DB사용을 줄이는 탈중앙화가 이루어지고 있고, DB에 저장되기 전까지 각각의 분산된 객체의 상태를 어떻게 유지하고 복구를 할것인가? 사용하는
Page: Possible with akka
AKKA System은 수많은 Router전략을 지원하지만 L7,Haproxy 를 대체하는 솔류션및 시스템이 아닙니다. 또한 고성능 Data 메모리 처리를 위해 메모리유지 기술을 지원하지만 Redis를 대체하는 시스템도 아닙니다.. 실시간 분산처리를 위해 Cluster-샤딩을 지원하지만 하둡을 대체하는 분산 저장 기술도 아닙니다. 다양한 통신메카니즘을 사용하지만 사용자에게 제공하는 RESTAPI 를 대체하는 프로토콜도 아닙니다. 도대체 이것을 어디다 쓸
Page: Preparation for Cluster Practice
클러스터를 테스트 하기위해서는, 기본적으로 원격으로 구동하여 각 서비스포트를 멤버쉽화하여야합니다. 물론 실제 로컬 테스트 환경구축을 위해, VisualStudio에서는 도커-HyperV 연동을통해 가상 컴퓨터에 디버깅도가능하며 가상 네트워크구축을 통해 실제와 유사한 클러스터 환경을 구축할수도 있습니다. 이러한게 있고 실제로도 사용가능하지만 우리는, 어플리케이션 하나에 옵션을 주면 여러가지 포트및 롤변경을하는 방식으로 학습환경을 구축하도록 하겠습니다.
Page: python with actor
용도 - 파이썬에서 액터활용안 스레드 생성코드 작성하지 않고, 동시성 비동기 프로그래밍 지원 파이썬간 원격 메시지 처리를 위해 기존 액터개발 패턴을 활용함으로 언어변경간 갭을 줄임 초경량및 파이썬을 통한 자동화등 여러가지 목적이 있음 tulip_coro.png 파이썬 3.5이상에서 기본 지원하는 Async(coroutines) 모델 ,C#의 Async Task와 크게 다를바 없으며 액터모델 은 이러한것을 더 단순화하고 추상화하는게 목적입니다. 서비스가
Page: Python을 이용한 웹 수집시스템
분산처리가 되는 파이썬 수집 시스템을(웹 데이터수집 : 크롤 ) 인터넷에 존재하는 유용한정보와, 실제 프로젝트진행한 경험을 바탕으로 요약을 해 보았습니다. 공통 파이썬 모듈 로컬에서 동시성 처리 우선 파이썬 내부에서 1노드에서 동시성처리를 위해(여러개의 요청을 동시에처리) 다음과 같은 선택가능합니다. 순수 스레드모델 : http://hamait.tistory.com/752 http://hamait.tistory.com/752 동시성 비동기처리(코르틴)

Q

R

Page: Rancher 쿠버
https://wiki.webnori.com/display/rancher https://wiki.webnori.com/display/rancher
Page: Reactive Stream의 기원
image-2024-1-11_0-34-57.png Spark - Kafka - Akka 는 ReactiveStrem을 준수하는 오픈스택이며 상호연결이 기본적으로 가능합니다. 끝말잇기가 가능한것은 ReactiveStream의 기원과는 무관합니다. 기원을 찾다보면은 다양한 유용한 Stacks들을 알게되며 ReactiveStream이 자바진영에 먼저 크게 성공하고 닷넷진영에도 영향을 준것으로 오해할수도 있으며 그 기원을 찾아가 보겠습니다. Rx.NET, R
Page: ReactiveStreams
Reactive Streams는 비동기 데이터 처리를 위한 표준으로 다양한 장점을 제공합니다: 비동기 처리 및 백프레셔(Back-Pressure): Reactive Streams는 데이터 스트림을 비동기적으로 처리하면서, 소비자(Consumer)가 처리할 수 있는 속도를 초과하지 않도록 제어합니다. 이를 통해 시스템의 과부하를 방지하고, 메모리 사용을 최적화합니다. 확장성과 자원 효율성: 비동기 처리는 시스템 자원을 보다 효율적으로 사용할 수 있게 해주
Page: ReceiveActor
ReceiveActor은 Actor의 기본 메시지 처리기가 정의된 기본 클래스이며 대부분의 기본 메시지처리는 ReceiveActor에서 가능합니다. 액터모델의 특징 요약 동시및 분산 시스템작성을 위해 높은수준의 추상화제공 개발자가 명시적 잠금처리및 스레드 관리 안해도됨 이로인해 병렬 시스템 작성에 용이 ActorSystem 주요 메서드 Create : ActorSystem을 생성( 어플케이션당 하나 ) ActorOf : 자신의 레벨(탑)하위에 액터를 추
Page: Remote
Actors 편에 설명된 모든 것은 로컬에서 작성한 방식그대로 활용하여 원격으로 확장이 가능합니다. Actor는 Remote라는 별도의 객체가 필요하지 않으며 여기서는 원격으로 사용하기위한 추가적으로 필요한 약간의 컨셉과 설정을 설명을 합니다.
Page: remote-router
Local Actor를 Remote Actor로 확장하는것은 아주간단한것을 알게되었습니다. 이제는 이 RemoteActor를 Router기능(예를들어 라운드로빈)으로 확장을 시도해보겠습니다. 시나리오 ANODE를 UP 인사를 그대로 돌려주는 EchoActor2 작성 ANODE는 h1~h3 까지 3가지의 동일한 액터가 있음 BNODE를 UP BNODE는 ANODE에게 설정된 라우터로 메시지를 만개보내고 그결과를 비동기적으로 받음 using System;
Page: Routers
라우터는 액터의 목적지 대상 경로를 정의하는 특수한 속성입니다. 동일메시지가 여러개의 경로에 복제 전달될수도 있으며, 최적화된 어떠한 경로를 동적으로 선택할수 있습니다. 메시지 전송 전략에따라 다양한 라우터 선택이 가능합니다. 라우터 설정전략 라우터 설정은, 코드가 아닌 설정파일을 통해 하는게 일반적입니다. 라우터에 해당하는 고정된 노드는 운영중 변경될수 있기때문입니다. 하지만 어떠한 패턴에의해 동적으로 변경할수 있는 가능성도 있기때문에, 런타임 코드
Page: Routing strategy
성능관련 스케일 아웃은 라우팅 전략과 관련이 있고 운영중 장비를 Down없이 스케일 늘리고 줄일수 있는 전략은 클러스터링과 연관이 있다고 볼수 잇습니다. 기술적으로 AKKA내에서 클러스터는 목표는 병목 현상이 없는 탄력적인 분산형 피어 투 피어 네트워크라고 정의 내릴수 있습니다. AKKA에서는 다양한 라우팅 전략을 디플로이 환경설정 전략으로 최소의 코드변경만으로 적용가능합니다. 또한 이러한 전략을 적용하기 위해 운영중 장비를 Down없이 다이나믹하
Page: RoutingTest
AKKA의 라우팅은 액터에서 발생하는 메시지를 분배처리 전략을 세울수 있습니다. 로컬에만 사용시에는 동시성/병렬처리에 대한 도메인 문제를 해결할때 이용할수 있으며 클러스터내에서 이용이된다고 하면 분산처리에 대한 문제를 해결할때 사용할수 있습니다. 분배와 배분은 글자 순서만 바꾸어놓았을 뿐이데 경제학 기준 다른의미를 가지고 있습니다. 일반적으로 배분은 자원을 투입하는 경제활동의 앞 부분에서 일어나고, 분배는 생산의 결과물이 나온 뒤에 소득을 나누는 과정을

S

Page: Snapshots
스냅샷은 액터의 복구속도를 높일수가 있습니다. SaveSnapShot을 호출하여 내부상태의 스냅샷을 저장할수가 있습니다. 나의 마지막상태, 예를 들면 내가 마지막에 본 페이지를 서비스가 기록을 하고 다른기기를 옮겨가도 그 상태를 복구하여 그대로 보여줄수 있는 서비스가 있다고 가정해봅시다. 사용자가 페이지를 이동할때마다 전통적인 개발방법은 메인 DB에 기록을 할것이며, 메인 DB에 부하를 주게될것입니다. 어쨋든 어플리케이션은 종료가 되거나 재시작이 될수
Page: spark with akka
MapReduce의 대안으로 최근 아주 뜨거운 기술이 있는데 바로 Apache Spark http://spark.apache.org/입니다. Spark는 Hadoop MapReduce와 비슷한 목적을 해결하기 위한 클러스터 컴퓨팅 프레임웍으로, 메모리를 활용한 아주 빠른 데이터 처리가 특징입니다. 또한, 함수형 프로그래밍이 가능한 언어인 Scala를 사용하여 코드가 매우 간단하며, interactive shell을 사용할 수 있습니다. akak와는 어
Page: spark with webapi
대용량의 데이터 수집이 하둡또는 카산드라에서 이루어지고 Spark의 분석엔진을 사용하여 검색 API를 제공한다고 가정해봅시다. Spark와 하둡은 웹전용 플랫폼이 아니기때문에 서비스 API를 제공하기에는 한계가 있다고 합시다. 이때 웹을 어떻게 상호운영을 하면 좋은지 몇가지 선택지를 살펴보겠습니다. 이 선택전략의 포인트는 익숙한 웹프레임워크를 선택하고 Spark엔진을 활용하는것입니다. PlayFrameWork With Spark Palyframework
Page: Spring Boot With AKKA
스프링부트와 아카상호 운영하기 자바- 웹 프레임웍 진영에 있는 Spring Boot에 AKKA를 내장시키는 방법을 알아보겠습니다. AKKA 준비과정은 이것보다 훨씬더 간단하지만 SpringBoot에 AKKA라는 외부툴킷을 내재시키고 상호운영하기위해서는 SpringBoot에서 제안하는 표준적인 방법으로 확장시켜야하며 약간의 수고가 필요합니다. Sprint Boot 을 사용하는 방법은 AKKA주제와 별개로 Spring-BOOT 정리되었습니다. 메이븐설정 S
Page: Streams
오늘날 우리가 인터넷에서 서비스를 사용하는 방식은 데이터 전송을 비롯한 많은 스트리밍 데이터 인스턴스를 포함하고 있습니다. 그것이 다운로드 서비스이든,영화스트리밍 서비스이든 대용량의 데이터를 우리의 어플리케이션이 가진 메모리와 네트워크대역으로는 순간적으로 처리할수가 없습니다. 스트리밍은 항상 생산자와 소비자로 구분되어 있으며 어떻게 생산자와 소비자의 다양한 속도차이를 고려하여 잘처리하느냐에 대한 고민이 필요합니다. akka-stream은 스트림처리에 제
Page: Streams Quickstart Guide
기본 using Akka; using Akka.Streams; using Akka.Streams.Dsl; actorSystem = ActorSystem.Create("ServiceB"); Source<int, NotUsed> source = Source.From(Enumerable.Range(1, 100)); using (var materializer = actorSystem.Materializer()) { source.RunForeach(i => Co

T

Page: Terminology
Akka - 위키백과 https://ko.wikipedia.org/wiki/Akka Akka는 오픈 소스 https://ko.wikipedia.org/wiki/%EC%98%A4%ED%94%88_%EC%86%8C%EC%8A%A4 툴킷으로, JVM https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%ED%94%8C%EB%9E%AB%ED%
Page: Throttle Actor
이벤트를 분산처리하기 위해 다음과 같은 잘 알려진 라우팅을 활용할수 있으며 Round Robbin : 순차 분배합니다. Random : 랜덤 분배 BroadCast : 분배없이 전체 발송 MailBox : 덜바쁜 작업자에게 우선발송 분산처리 장치인 라우터는 다음과 같은 요소를 가지고 있습니다. 라우터 : 분배가 발생하는 지점 또는 장치 라우팅 : 분배의 방식 ( Robund Bobbin과 같은 분배로직 ) 라우티 : 분배가 도달하는 최종 위치로 최종
Page: Top-Level Architecture
actor_top_tree.png Akka는 기본적으로 탑레벨 아키텍쳐의 설계방식으로 Actor를 위치시키고 접근을 하며 (최상위부터 생성하여 구조화하는 방식 ) 다음과같은 특성이 있습니다. 액터접근 : 트리구조이지만, FullName을 알고있을시 최하위 자식노드에게 직접 리모트 메시지전송이 가능합니다. 액터접근 : someActor의 자식에게 모두 메시지를 보내고 싶으면 someActor/* 를 할수 있습니다. 라우팅화 가능 : 분산처리를 위해

U

Page: UnitTest with NBench
닷넷 환경에서 비동기적으로 작동하는 이벤트의 Message Delivery Once 를 검증하는방법과 Nbench를 이용하여 유닛테스트환경에서 성능측정을 할수 있는방법을 소개합니다. 이 샘플에서는 액터메시지 모델이 이용되었지만 액터모델과 상관없이~ 유닛테스트내에서 성능측정 기법을 이용할수 있습니다. 측정할 수 없는 것은 관리할수 없다 - 피터 드러크 테스트 탐색기 테스트 탐색기를 통해 성능유닛 테스트를 수행하고 측정할수 있습니다. image-2023-
Page: UntypedActor
UntypedActor는, 이전 섹션에서 익힌 ReceiveActor 처럼 생성자에서 Type매칭에의해 메시지 처리기를 등록하는게 아닌 , 기본 처리 메스드를 재정의하여 기본 메시지 처리외에 커스텀한 기능을 부여할시 사용됩니다. 이번장에서는 Actor의 기능을 확장하여 유용한 몇가지 기능들을 살펴보겠습니다. OnReceive - 기본 메시지 처리 재정의 public class MyActorSame : UntypedActor { protected over
Page: Utilities
분산환경에서의 메시지는 복잡하고 다양한 기능을 가질수 있으며 액터로 처음부터 모든것을 구현하려고 하면, 복잡해질수 있으며 복잡성의 증가는 분산환경에서 실패할 가능성이 있습니다. 액터를 조금더 유용하게 사용하기위해 몇가지 유틸리티를 제공하며 같이사용할시 액터를 통한 메시지 처리가 조금더 단순해질수 있습니다. https://doc.akka.io/docs/akka/current/index-utilities.html https://doc.akka.io/docs

V

W

Page: Websocket With Actor
웹소켓을 액터와 연결하여 조금더 실시간 웹소켓 기능을 풍부하게 사용할수 있는 방법입니다. 사용되는 웹프레임워크및 웹소켓모듈에따라 웹소켓핸들러를 연결하는방법은 다양할것이지만 웹소켓을 AKKA의 Actor로 연결한것만으로, AKKA에서 제공되는 여러가지 분산처리 기능들을 웹소켓과 연동되어 활용이 가능해집니다. 언어에 종속적이지 않는 설계에관련된 컨셉이며, 유연한 웹소켓설계를 위해서 몇가지 전략이 필요합니다. 설계 image2018-4-21_13-55-35.
Page: Working with Graphs
image2017-10-8_17-6-30.png 스트림처리는 AKKA의 주제에서도 광범위하고 어렵습니다. 배관공 게임도 분명 끝판 스테이지는 어렵듯이 우리는 위와같이 복잡한 스트림처리를 단순화하기위해 그래프 DSL을 이용해보겠습니다. 여러개의 입출력이 필요한 복잡한 스트림 처리를 위해서, AkkaStream은 그래프 DSL을 사용하여 여러개인 팬인 또는 팬아웃시나리오를 기술할수 있게 해줍니다. 이것은 마치 화이트보드에 그린 프로토콜사양의 그림을 Akka

X

Y

Z

!@#$

최근에 변경된 페이지

  • No labels