전체 글 194

Index, Document를 분리하는 방법을 이용한 대용량 데이터 저장소 설계

Index, Document를 분리하는 방법을 이용한 대용량 데이터 저장소 설계데이터의 용량이 많아 지게되면 관계형 데이터베이스로는 한계가 있다.scale out(sharding) 관계형 데이터베이스로 구현할수 있지만 Application Logic이 복잡해진다index table or look-up table와 document table를 따로 구별하기 설계를 할수 있다.각각의 저장소에는 cache를 두는 방식으로 응답성을 좋게 할수 있다.각각의 cache는 데이터의 성격에따라 다르게 설정을 해야된다.실시간성 데이터, 중요성이 높은 데이터 (ex, 재고 데이터)는 TTL를 적게 두는 방식으로 취한다.잘 바뀌지 않는 데이터, 느리게 바뀌어도 문제가 없는 데이터 (ex, 상품의 타이틀)을 1분~10분 TT..

아키텍처 2018.08.18

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

Domian Name System

Domain Name SystemDNS 또는 Domain Name System은 사람이 읽을 수 있는 도메인 이름(예: www.amazon.com)을 머신이 읽을 수 있는 IP 주소(예: 192.0.2.44)로 변환합니다.DNS를 통해 웹사이트를 접근하는 방법 DNS Message TypeCase 1: Local DNS 서버가 www.naver.com에 대한 IP 주소를 가지고 받는 경우Type=ALOCAL DNS가 www.naver.com에 해당하는 IP주소를 가지고 있는 경우여러개의 IP를 줄수가 있음.Case 2: Local DNS 서버가 다른 DNS 서버의 IP주소를 받는 경우Type=NSDNS서버가 IP주소를 모르는 경우, 상위 DNS서버는 다른 DNS 서버를 알려준다.Case 3: Local ..

인프라 2018.08.13

테이블 설계 - 정규화

데이터베이스 설계 - 정규화 제 1정규화하나의 row에서 하나의 값(원자값 atomic value)만 저장해야 된다.반복되는 데이터를 가로(열 방향)가 아닌 세로(행 방향)로 늘리는 것이 제 1정규화의 제1단계이다정규화 이전상품 번호, 색상1번 상품, 검은색, 빨간색2번 사품, 검은색, 노랑색정규화 이후1:N 구조의 테이블의 생성이 된다상품 테이블1번2번상품 컬러 테이블1번, 검은색1번, 빨강색2번, 검은색2번, 노랑색 제 2정규화제2정규화에서는 데이터 중복하는 부분을 찾아내서 테이블로 분리 한다.세로 행방향의 반복되서 중복되는 데이터를 테이블로 분리를 한다.각각의 속성은 PK에 종속이 되어야 있어야 된다.ex)product_namesPK : productId.. or productNameId이 테이블에..

Database 2018.08.12

AWS SQS

AWS SQS마이크로 서비스, 분산 시스템 및 서버리스 애플리케이션을 위한 완전관리형 메시지 대기열 이점관리 오버헤드 제거메세지를 안정적으로 전달AWS KMS와 함께 민감한 데이터를 안전하게 유지탄력적이고 비용 효율적으로 확장 Queue TypeStandard QueueUnlimited Throughput : 속도의 제한이 없음At-Least-Once Delivery : 최소 1번이상의 메시지 전달Best-Effort Ordering : 최대한 순서를 보장 Fifi QueueHigh Throughput : 초당 최대 300번, 10개씩 배치로 처리한다면 초당 3000개의 메시지를 전달이 ㄱExactly-Once Processing : 정확히 1번의 메시지 전달First-In-First-Out Delive..

인프라/AWS 2018.08.11

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