Programing 101

Reactive Programming

Reactive Programming정의Reactive programming is programming with asynchronous data streams. You can listen to that stream and react accordinglyReactive Programming에서는 데이터의 모든 것을 스트림(Stream)으로 본다. 데이터 처리 스트림을 비동기적으로 처리하는 프로그래밍 리액티브 프로그래밍이라고 한다 (Reactive Programming)Observable (observer 할수 있는 객체 Observable), Observer (Observable에 subscribe 하는 객체)Subscriber에서는 `onNext` `onCompleted` `onError` 를 구현하는 ..

Programing 2018.08.19

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

Java Generic (제너릭)

Java Generic (제너릭)형인자 자료형 (parameterized type) - List실 형인자 (actual type parameter) - String제너릭 자료형 (generic type) - List형식 형인자(formal type parameter) - E비한정적 와일드카드 자료형(unbounded wildcard type) - List무인자 자료형(raw type) - List한정적 형인자 (bounded type parameter) - 재귀적 형 한정 (recursive type bound) 한정적 와이들카드 자료형 (bounded wildcard type) - List

Programing/Java 2018.08.14

GC overhead limit exceeded

GC overhead limit exceeded 발생하는 이유CPU 사용량중 98%이상이 GC가 작동되는 경우 GC Overhead limit exceeded가 발생이 된다.대부분의 GC가 CPU를 사용하기 있기 때문에 user work은 작동이 되지 않는다.한정된 Heap Memory안에서 GC 대상의 객체는 없지만 새롭게 생성되는 객체가 메모리를 할당하지 못할경우에 GC의 시간이 길어지게된다. 에러가 발생되는 예제 코드class Wrapper { public static void main(String args[]) throws Exception { Map map = System.getProperties(); Random r = new Random(); while (true) { map.put(r.ne..

Programing/Java 2018.08.10

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

DAG (Directed acyclic graph)

DAG (Directed acyclic graph) Graph : Edge와 Node를 가진 구조Directed Graph : Graph에서 방향(direction)을 가진 구조Acyclic Graph : 순환 구조가 아닌 GraphDirected Acyclic Graph : 순환 구조가 아닌 방향(direction)을 가진 구조간단하게 생각을 하면 순환 구조가 아닌 데이터의 워크 플로우 Spark에서의 DAG SchedulerRDD operation을 통해 DAG가 정의각 되고 TaskScheduler(Yarn 등)을 이용하여 데이터를 처리 한다 Referecnehttps://en.wikipedia.org/wiki/Directed_acyclic_graph http://simpledbs.blogspot...

Programing 2018.08.06

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

전략 패턴 (Strategy Pattern)

전략 패턴 (Strategy Pattern)특정한 계열의 알고리즘들을 정의하고각 알고리즘을 캡슐화하며이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다. UML Class Diagram 활용상품 구매시 포인트를 적립해주는 시스템이라고 할때 상품의 카테고리마다 포인터의 적립 계산 규칙이 다르게 된다. 포인터를 계산을 하는 부분을 전략 패턴을 적용해서 활용할수 있다.상황에 따라 비즈니스로직이 변하는 부분, 외부 설정 (Config) 등에 따라 비즈니스 로직이 달라지는 부분Interface를 이용하는 방법, java 8 이상에서는 람다 함수(Functional Inteface)를 이용할수도 있다. Referencehttps://ko.wikipedia.org/wiki/%EC%A0%84%EB%9E%B5..

Programing/Java 2018.08.04