Programing/Akka 29

Akka Cluster Seed Node

Akka Cluster Seed Nodeakka cluster로 join하기 위한 node, akka cluster node 중에 아무 노드의 주소를 사용하면 akka cluster에 join을 할수 있다.akka cluster의 진입점이라고 생각을 하면 된다.akka seed node로 사용하는 node가 모두 running 상태일 필요는 없다.seed node 중 첫번쨰 seed node가 중요하다. Akka Cluster가 처음 시작될때에는 첫번째 seed node는 작동되고 있는 (started) node의 주소로 할당을 한다. 시작하는 Node와 첫번째 seed node가 같을 경우 Akka Cluster가 새롭게 생긴다.cluster가 분리되는 현상이 나타날수 있기 때문에 seed node를 ..

Programing/Akka 2018.08.25

Akka Scheduler

Akka SchedulerAkka Scheduler, 일정 시간 이후 작업을 작동시킨다.Scheduler의 정확도를 높히기 위해서는 application.conf 설정파일의 `akka.scheduler.tick-duration`를 수정해야된다.긴 시간 (long term) Scheduler로서는 부적절하기 때문에 akka-quartz-scheduler 사용하는 것이 좋다.주기적인 메시지나 싱글 메시지를 위한거면 scheduler 사용하는 것 대신 Actor Timer의 사용을 추천한다.Send to Actorsystem.scheduler().scheduleOnce(Duration.ofMillis(50), testActor, "foo", system.dispatcher(), null);Runnablesys..

Programing/Akka 2018.08.21

Akka Stream Asynchronous operators

Akka Stream Asynchronous operatorsAkka steram의 Operator중에 비동기(Asynchronous)로 처리할수 있는 기능ask / mapAsync / mapAsyncUnOrdered 총 3가지가 있다.Source/Flow.askActor(=ActorRef)를 통해 데이터를 주고 받을수가 있다.Source/Flow.mapAsync`CompletionStage` 객체로 리턴하는 함수를 통해 map operator를 작동할수 있다.Source/Flow.mapAsyncUnordered`CompletionStage` 객체로 리턴하는 함수를 통해 map operator를 작동할수 있다.mapAsync와 동일한 기능이지만 `CompletionStage`가 나오는 순서 상관없이 다음..

Programing/Akka 2018.08.17

Cluster Aware Router

Cluster Aware RouterCluster Node에 분배되어 있는 Actor에 대해 Route를 할수 있다직접 Actor를 Deploy(배포)를 할수도 있고, Actor를 직접 찾을수도 있다 (Look up)Router의 종류에는 2가지가 있다, Group / Poolapplication.conf를 이용하여 정의를 할수도 있고, 직접 자바 코드를 작성해서 사용할수 있다.Group RouterActor Path를 통해 Cluster Node에 있는 Actor에 대해 메시지를 보낼수 있는 Router Cluster Node에 해당되는 Path에 해당하는 Actor가 존재하지 않으면 그 Node로는 데이터가 가지 않는다.application.confakka.actor.deployment { /stat..

Programing/Akka 2018.08.16

Akka Actor / Stream / Cluster 을 이용한 확장 가능한 Task 단위의 시스템

Akka Actor / Stream / Cluster 을 이용한 확장 가능한 Task 단위의 시스템컴포넌트Task Coordinator전체 TaskNodeManager를 관리하는 ActorTask Node ManagerCluster Node의 Task를 관리하는 ActorTask ActorTask를 관리하는 ActorTaskAkka Stream으로 구성된 실제 작업의 단위Akka Stream을 하나 하나의 Flow을 Actor를 통해 관리를 할수 있다 (mapAsync operator, ask)Cluster Aware Router 를 이용하면 Scale out이 가능한 기능을 구현을 할수가 있다.Worker Node에는 Flow단위 만를 처리를하고 TaskActor의 Task(Stream)을 Flow만 ..

Programing/Akka 2018.08.15

Akka Distributed Publish Subscribe in Cluster #1.Subscribe/Publish

Akka Distributed Publish Subscribe in Cluster #1.Subscribe/Publishakka cluster 기능 중에 하나인 Akka pub/sub에 대해서 알아보자.cluster에 있는 actor를 알 필요없이 데이터를 전송을 할수 있다.데이터는 topic 단위로 publish가 된다. subscribe은 group id를 통해 메시지가 관리 될수 있다.akka.cluster.pubsub.DistributedPubSubMediator 는 등록된 actor reference (actor ref)를 관리를 한다. 또한 다른 노드에 존재하는 Mediator에 해당하는 actor referfence를 복제를 한다. Gradledependencies { compile group..

Programing/Akka 2018.08.09

Akka Dispatcher를 이용한 성능 튜닝

Akka Dispatcher를 이용한 성능 튜닝Akka를 이용하여 시스템을 개발을 했지만, 생각보다 속도가 나지 않은 경우에는 성능 튜닝이 필요하다. 대부분의 성능이 I/O (Network, File)로 인해 성능이 느려지는 경우가 있다. Akka Dispatcher를 설정을 통해 성능 튜닝을 할 수 있다. Default Dispatcheractor-system이 가지고 있는 기본 Dispatcher대부분 케이스에 성능이 잘나오는 fork-join-executor를 사용한다. Looking Up Dispatcherfinal ExecutionContext ex = system.dispatchers().lookup("my-dispatcher");Setting dispatcher for actormy-disp..

Programing/Akka 2018.08.05

Akka Stream Error Handling

Akka Stream Error HandlingAkka Stream의 Operator에서 에러가 발생되는 경우에는 기본 설정인 Stream의 stop으로 되어있고, 기본적으로 에러 관련 메시지는 나타나지 않는다.실시간 데이터 처리 등에서는 하나의 데이터가 오류가 난다고 전체의 데이터를 받지 못하면 안되기 때문에 Error Handling에 관련된 설정이 불가피하다. Logging ErrorSource.from(Arrays.asList(-1, 0, 1)) .map(x -> 1 / x) //throwing ArithmeticException: / by zero .log("error logging") .runWith(Sink.ignore(), mat);`log()` 를 이용하여 error log를 생성을 할수..

Programing/Akka 2018.08.01

Akka Http

Akka Http소개akka actor, akka stream을 이용한 full server- and client-side Http StackWeb Application 제작하는 곳의 사용은 적절하지 않다REST/HTTP Interface를 제공하는 것에 특화가 되어있다.akka actor와 akka stream을 활용한 프로그래밍이 가능하다.Http Server API도 제공, Http Client API로 제공을 한다. Using Akka Httpgradlecompile group: 'com.typesafe.akka', name: 'akka-http_2.12', version: '10.1.3'compile group: 'com.typesafe.akka', name: 'akka-stream_2.12',..

Programing/Akka 2018.07.28