Queue: 7개의 글
Delivery Acknowledgement Timeout RabbitMQ Server가 Publisher가 보낸 데이터를 가지고 있고, 해당 데이터를 수신한 Consumer가 하나도 없다고 가정 한다. 이런 경우, 새로운 Consumer가 start_consuming()을 수행 하면, 새로운 Consumer는 Queue에 Binding 된 데이터를 모두 수신 할 수 있다. 만약 Consumer가 수행 되지 않아 RabbitMQ Server가 데이터를 계속 가지고 있다면, RabbitMQ Server는 Delivery Acknowledgement Timeout(Default : 30초) 시간 동안 보관 하고 이후 데이터를 ACK 받은 것으로 처리 한다. Delivery Acknowledgement Tim..
CPU 사용률 $ top // 명령을 이용하면 CPU사용률을 볼 수 있다. 아래와 같이 bash가 75.2%의 CPU를 사용하는데 괜찮은 것일까? 가끔 컴퓨터가 버벅거릴때, CPU사용률을 보면 100%가 되는것들이 있다. 그때문에 CPU사용률이 100%가되면 문제가 있는것이라고 생각할 수 있는데, 그렇지 않다. CPU사용률은 특정 시간에 대한 평균값이다. 스레드마다 실행되는 시간이 정해져있고, 시간을 다 소모하게되면 다른 스레드가 돌고, 자기차례가 다시 돌아올때까지 유휴기간을 갖는다. 자신이 CPU사용시간을 받았을때, 사용시간 동안 CPU 를 사용한 퍼센트이기 때문에 높을수록 좋다. 따라서 CPU에 관해서, 성능을 높히기 위한 방법은 짧은 시간 동안 CPU 사용률을 가능한 높히는 것 CPU 사용시간은 두..
이번 글에서는 RabbitMQ Administartion API를 사용해 주기적으로 Dirty Queue를 체크해보겠습니다. 0. Dirty Queue란? Queue 내부에 메시지가 남아있는 Queue를 의미합니다. 일반적인 경우에, 정상적으로 Consumer 들이 Queue의 메세지를 적절히 처리하고 있다면 Queue 내부에 메세지가 쌓여 있지 않습니다. (물론 prefetch 를 낮게 잡았다면 메세지는 consumer의 메모리가 아닌 Queue 내부에서 process를 기다릴 수 있습니다.) 따라서 Queue 내부에 메세지가 대량으로 쌓여있을 경우에는, 무엇인가 잘못되었을 확률이 있습니다. 이를 체크하고 대응하기위해서는 주기적으로 (예를들면 매일 자정) Dirty Queue를 확인한 후 적절한 대응이..
오늘 포스팅할 내용은 래빗엠큐이다. 그 동안에는 카프카를 사용할 일이 많아 카프카에 대한 포스팅이 주였는데, 이번에 래빗엠큐를 사용할 일이 생겨 간단히 래빗엠큐에 대해 간단히 다루어 볼것이다.(예제 코드는 위 깃헙에 올려놓았습니다.) 비동기 작업에 있어 큐를 사용하려면 중간에 메시지 브로커라는 개념이 존재하는데, 이러한 메시지 브로커에는 RabbitMQ, Kafka 등이 대표적으로 있다. 해당 포스트에서는 표준 MQ프로토콜인 AMQP를 구현한 RabbitMQ(래빗엠큐)에 대해 다루어볼 것이다. 간단하게 메시지큐는 아래 그림과 같은 워크 플로우로 이루어져있다. 대부분의 메시지큐는 프로듀서가 있고, 해당 프로듀서가 브로커로 메시지를 발행하면, 적절한 컨슈머가 해당 메시지를 구독(읽다)하는 구조이다. 그렇다면..
[알고리즘] 알고리즘의 개념과 기본 자료구조 1. 알고리즘의 정의와 조건 1) 알고리즘의 정의 주어진 문제를 풀기 위한 명령어들의 단계적 나열 2) 알고리즘의 조건 입력 : 0개 이상의 외부 입력 출력 : 1개 이상의 출력 명확성 : 각 명령은 모호하지 않고 명확해야 함 유한성 : 한정된 수의 단계를 거쳐 반드시 종료됨 유효성 : 모든 명령은 컴퓨터에서 수행 가능해야 함 알고리즘의 조건을 합쳐서 정의하자면 알고리즘이란 주어진 문제에 대한 결과를 생성하기 위해 모호하지 않고 컴퓨터가 수행 가능한 일련의 유한개의 명령들을 순서적으로 구성한 것이다. 2. 알고리즘 생성 단계 3. 알고리즘의 표현/기술 방법 알고리즘은 크게 일상 언어, 의사 코드(Pseudo code), 순서도의 세 가지 방법으로 표현할 수 있..
Spring - Rabbitmq를 이용한 비동기 메시징 서비스 -리액티브 마이크로서비스 Mac OS 환경에서 작성되었습니다. 오늘은 간단히 Spring boot + Rabbitmq를 이용한 비동기 메시징 서비스를 구현해볼 것이다. 일단 이 포스팅을 진행하는 이유는 요즘 시대에는 일체형 애플리케이션이 작은 서비스 단위인 마이크로서비스 단위로 나누어 서비스 단위로 배포하는 아키텍쳐가 대세인듯하다. 이 말은 즉슨, 아주 큰 애플리케이션이 작은 서비스 단위(마이크로서비스)로 나뉘어 각각 단독적으로 독립적으로 실행가능한 상태로 배포가 된다. 이런 경우 마이크로서비스끼리의 통신은 RESTful한 통신도 있지만 메시지 큐와 같은 서비스를 이용하여 비동기적으로 통신하기도 한다. 그리고 이 구조를 발행구독구조라고 한다...
참조문서 : https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html 1. 컬렉션이란? java.util 패키지에서 가장 핵심, 여러 개의 객체를 보관할 수 있게 만들어진 클래스들(자료구조) 주요 용어 리스트(List) : 순서를 가지고 있으며, 중복을 허용하는 보관 구조(인덱스 번호가 핵심) 세트(Set) : 순서를 가지지 않고, 데이터의 중복을 허용하지 않는 구조 맵(Map) : 키-값을 가지며, 키를 가지고 원하는 데이터를 검색하는 구조 Element : 자료구조 안에 들어가는 데이터를 의미 시간복잡도 사진출처: http://bigocheatsheet.com/ 2. *List 계열 리스트는 내부적으로 무한대의 배열을 가진다. Array..