전체 글 194

Grafana - 시계열 데이터 Dashbaord

Grafana- 시계열 데이터를 저장을 하고 그래프를 표현을 할때 직접 UI 개발을 통해 구현을 할수 있지만, 오픈 소스인 Grafana를 통해 쉽게 그래프 대시보드를 만들수가 있다. 지원하는 Database- Graphite- Influxdb- ElasticSearch- etc.. Docker를 이용하여 Quick Start$ docker run \ -d \ -p 3000:3000 \ --name=grafana \ -e "GF_SERVER_ROOT_URL=http://grafana.server.name" \ -e "GF_SECURITY_ADMIN_PASSWORD=secret" \ grafana/grafana backend for grafana- Mysql- SQLiteDashboardRerference..

Apache Airflow

Airflow- Airflow는 스케쥴, workflow 모니터 플랫폼이다.- 작업의 단위는 DAG(Directed acyclic graphs)로 표현한다.- Python 언어로 DAG File를 구성하고, 그 내부에는 여러개의 Task가 존재를 한다.특징- Dynamic : Airflow는 Pipeline의 설정은 코드(Python) 언어로 작성이 되기 때문에 동적으로 작동되는 코드를 작성을 할수가 있다.- Extensible : operators, executors, ...- Elegant : 간결하고, 명확, jinja 템플릿 엔진을 이용한 템플릿 기능 등.- Scalable : 스케일 아웃이 가능하다. message queue를 이용하여 task를 worker에게 분배를 한다. (celery, d..

무중단 배포, Blue Green Deployment

무중단 배포, Blue Green DeploymentAPI 서버를 새로운 기능을 추가할려고 하면 서버를 일단 정지를 시키고 새로운 기능과 함께 배포하는 방식을 사용할수 있지만 서비스 정지가 되기 때문에 서비스의 영향이 미치게 된다. 무중단 배포를 할 필요성이 있는 데 그중 Blue Green Deployment에 대해 정리해보자. Blue, Green?- Blue는 기존 버전, Green은 새로운 기능을 포함한 새로운 버전- Router를 통해 Blue로 이동하는 트래픽을 Green으로 변경을 할수가 있다. - 여기에서의 Router는 Http 일경우에는 Nginx, AWS ELB와 같은 LB이다배포 절차1. Green을 배포를 진행을 한다.2. Router를 통해 Green을 트래픽을 보낸다.3. Bl..

인프라/Deploy 2018.06.29

RabbitMQ Mirrored Queue

RabbitMQ Mirrored QueueRabbitMQ는 Single Node에서 사용을 할수 있으나 SPOF이 되기때문에 여러개의 Node구성된 Cluster를 사용할수가 있다.SPOF : Single point of fail, 실패의 하나의 점, 하나의 서버, 하나의 노드이면 서버가 다운된 경우에는 서비스를 할수가 없다.Mirroed Queue는 하나의 Node에 Queue Message가 들어오게 되면 다른 Node로 메시지를 복제(Replication)을 한다.queue의 Master Node, Slave Node로 구별이 된다. - 해당하는 Queue가 Mirroed되는지 확인하는 방법은 management UI를 이용하여 확인할수 있다. Queue Agruments that control m..

Akka Stream Operator Fusion

Akka Stream Operator Fusion- 기본 설정으로 Akka Stream은 stream operator (source, sink)를 하나로 합치는데(fused), 이는 하나의 actor에서 stream graph를 실행되는 것을 의미한다.- 하나의 Operator에서 다른 Operator로 데이터를 전달하는 것은 fused stage간의 전달보다는 더 빠르다 (비동기 메시지 overhead때문에)- fused stream operator는 동시에 실행되지 않는다. 이말은 CPU Core는 하나의 fused part만 실행을 시킨다.- 병렬 프로세싱 (Parallel Proccess)를 하기위해서는 Asynchronous Boundaries를 직접 손으로 넣어줘야한다.Source.range(..

Programing/Akka 2018.06.29

Akka Stream 기본 개념 Source, Sink, Flow

Akka Stream 기본 개념 Source, Sink, FlowSource- 하나의 아웃풋(output), 데이터를 발생시켜 다운스트림으로 흐리게 한다- 데이터가 발생되는 점이라고 생각하면 된다.- 예를 들어 Kafka 등 MQ에서 데이터를 받을수 있다.- 파일, List, Queue 등을 원천으로 할수 있다.Sink- 하나의 인풋(input)- 데이터가 끝나는 지점, 데이터를 처리하는 지점- 데이터의 결과값을 CompletionStage객체로 받을수가 있다.- 예를 데이터를 들어오는 MySQL에 저장을 한다. Flow- 하나의 인풋(input)과 하나의 아웃풋(output)- 데이터의 Transform(변경)이 된다.- 예를 데이터를 다른 형태의 데이터를 컨버팅을 한다. RunnableGraph- S..

Programing/Akka 2018.06.29

Spock Framework을 이용한 Unit test 작성

Spock Framework을 이용한 Unit test 작성Java Application을 개발하면서 Unit Test를 작성을 할때 jUnit과 Mockito를 이용하여 작성을 할수도 있지만 테스트 코드만 다른 코드로 간다면 좀더 쉽게 Unit Test를 작성을 할수 있다. 그 중에 Groovy를 언어를 이용한 Test 코드 작성에 대해 알아보자. Reference- http://spockframework.org/spock/docs/1.1/index.html gradleapply plugin: "groovy" .... compile "org.codehaus.groovy:groovy-all:2.4.15"testCompile "org.spockframework:spock-core:1.1-groovy-2.4..

Programing/Java 2018.06.25

Kafka Broker의 버전에 따른 Java Client 라이브러리 호환성

Kafka를 이용하다보면 Broker 버전이 서로 다른 cluster를 사용할때가 있다. 아무래도 먼저 클러스터를 구성한 브로커인경우 업그레이드 하기가 어렵기 때문에 여러개의 버전을 사용할수 있다. 이와 관련해서 자료를 찾아보니 0.10.0 버전을 제외하고는 모든 java client 버전은 broker에 호환이 된다. 물론 각각의 버전에 따른 기능은 지원이 되지 않는 것이 있을수가 있다. - 아래는 Client 라이브러리 관련 호한성을 나타낸것이다. Reference- https://cwiki.apache.org/confluence/display/KAFKA/Compatibility+Matrix Broker 0.10.0Basic client compatibility:Java: clients = 0.10...

Java Stream을 이용한 Inner Join / Left Join 기능

Java Stream을 이용한 Inner Join/Left Join 기능 - NoSQL Database를 사용하다보면 Join 기능이 없기 때문에 Application에서 Join 기능을 만들어야 된다.- Java Stream을 이용하여 손쉽게 inner join/left join을 할수 있게 구현을 할수 있다.- 저장되어 있는 DB가 서로 다른 경우에도 inner join/ left join 가능하다. ex) mysql에서 유저 정보를 가지고 와서 redis에 있는 주문 정보를 조회할수 있는 구조에서의 join 기능을 구현, batch job을 통한 데이터 추출 등..Data Class@Getter@AllArgsConstructor(staticName = "create")static class User..

Programing/Java 2018.06.18