IoT 플랫폼에서 사용 할 수 있는 대용량 메시지 처리 시스템 개발에 대한 아이디어를 정리한다. 크게 두 가지 아이디어가 있을 건데, 그 중 consistent hash를 이용한 방법을 살펴본다. 이 메시지 처리 인프라는 아래의 특징들을 가지고 있다. 1. 유저간 채팅 서비스가 목적이 아니다. 유저간 채팅 서비에도 사용 할 수 있긴 하지만, IoT를 구성...
도커 스토리지를 다루기 전에 도커 이미지와 컨테이너의 관계를 살펴봐야 할 것 같다. 도커는 하나의 이미지로 부터 하나 이상의 컨테이너가 실행 될 수 있다. 하나의 프로그램 이미지(프로그램 파일)로 부터 하나 이상의 프로세스가 실행되는 것과 같은 이치다. 아래는 프로세스의 실행을 묘사한 그림이다. 프로그램에서 프로세스가 실행되지만 원본 프로그램은 변경이 되지...
컨테이너(Container)를 기반 가상화 시스템이라고 해서 가상머신(Virtual machine) 기반 가상화 시스템과 다를 점은 없다. 컨테이너 가상화를 위한 네트워크, 스토리지 가상화 기술은 가상머신 가상화에서 이미 완성됐다. 단지 머신을 가상화 하느냐 하지 않느냐의 차이만 있을 뿐이다. 그러므로 컨테이너 기반 가상화 시스템을 만든다고 하면, 기존에 ...
백앤드 애플리케이션의 대부분이 REST 방식의 웹 애플리케이션이다. 애플리케이션들은 모두 아파치 웹 서버 방식의 엑세스로그를 남긴다. 일반유저들이 사용하는 API들이다 보니 상당한 크기의 로그파일들이 만들어진다. 일주일만 그냥 둬도 파일의 크기가 수 기가바이트를 넘어갈 판이다. 모든 로그 파일들은 ELK로 어차피 색인이 되기 때문에, 굳이 시스템에 남겨두거...
코드가 많은 사이트다. 그래 아래처럼 웹에서 직접 코드를 수정도 하고 실행도 할 수 있도록 코드 실행기를 붙였다. 유용하긴 한데, 코드를 실행하고 그 결과를 화면에 출력하는 방식이라서 표준입력이나 python interactive mode등을 사용 할 수 없다. 그래서 웹 터미널 애플리케이션을 찾아보기로 했다.구글님에게 물어 물어서 언어 기반이고 tty.j...
이 문서는 도커레퍼런스가 아니다. 기본적인 이해와 사용이 가능하도록 하는데 목적이 있다. 도커는 오픈소스기반의 컨테이너 소프트웨어다. 도커 컨테이너는 애플리케이션을 실행하기 위해서 필요한 코드, 런타임, 시스템 툴, 시스템 라이브러리 등을 모두 포함한채로 배포 할 수 있다. 덕분에 컨테이너는 어떤 환경에서도 동일하게 작동한다.도커는 리눅스 운영체제에서 실행...
우분투 리눅스 운영체제는 데비안으로 부터 파생된 .deb 기반의 패키지 관리 시스템을 가지고 있다. 나는 현재 개발 중인 애플리케이션을 효율적으로 배포하기 위해서 프라이빗 패키지 저장소를 만들기로 했다. 배포 프로세스는 다음과 같다. 1. Git을 이용해서 개발한다. 1. CI툴은 git에서 코드를 가져와서 최신 빌드를 만든다. 1. 빌드가 끝나면 .de...
컨테이너 기반의 PaaS에서는 다양한 서비스들이 네트워크로 연결된다. 이들 서비스를 연결해서 완성된 애플리케이션으로 만들기 위해서는 각 서비스들이 서로를 discovery 할 수 있어야 한다. 가장 쉬운 방법은 서비스에 도메인 이름을 붙여주는 것이다. 예를 들어 워드프레스 애플리케이션을 실행한다고 가정해 보자. 워드프레스를 실행하기 위해서는 PHP+Apac...
NginX를 리버스 프락시 서버로 사용하는 이유는 다음과 같다. 1. 로드밸런싱 1. 유저 요청에 대한 선 처리 1. 캐싱 이중 3번, Nginx를 이용해서 스태틱 페이지를 캐싱해서 서비스하는 방법을 테스트한다.웹 서비스의 성능을 높일 수 있는 가장 확실하고 손쉬운 방법은 컨텐츠 캐시다. 요즘 웹 서버는 매우 바쁘다. 유저의 요청을 받아서 데이터베이스를...
Mesos는 분산 시스템 커널(distributed systems kernel)이다. 뭔가 굉장히 복잡해 보이지만, 기본 개념은 간단하다. 네트워크로 묶여 있는 여러 개의 컴퓨터의 자원 즉, CPU, 메모리, 디스크 등의 자원을 하나로 묶어서 resource pool로 만들어서 마치 하나의 컴퓨터 처럼 보이게 하겠다는 거다. 그리고 커널로서 작동하기 위한 ...
661 POSTS HERE
Consistent Hash 기반의 대량 메시지 처리 인프라
IoT 플랫폼에서 사용 할 수 있는 대용량 메시지 처리 시스템 개발에 대한 아이디어를 정리한다. 크게 두 가지 아이디어가 있을 건데, 그 중 consistent hash를 이용한 방법을 살펴본다. 이 메시지 처리 인프라는 아래의 특징들을 가지고 있다. 1. 유저간 채팅 서비스가 목적이 아니다. 유저간 채팅 서비에도 사용 할 수 있긴 하지만, IoT를 구성...
Docker Storage
도커 스토리지를 다루기 전에 도커 이미지와 컨테이너의 관계를 살펴봐야 할 것 같다. 도커는 하나의 이미지로 부터 하나 이상의 컨테이너가 실행 될 수 있다. 하나의 프로그램 이미지(프로그램 파일)로 부터 하나 이상의 프로세스가 실행되는 것과 같은 이치다. 아래는 프로세스의 실행을 묘사한 그림이다. 프로그램에서 프로세스가 실행되지만 원본 프로그램은 변경이 되지...
Container 기반 가상화 시스템에서의 Service Discovery
컨테이너(Container)를 기반 가상화 시스템이라고 해서 가상머신(Virtual machine) 기반 가상화 시스템과 다를 점은 없다. 컨테이너 가상화를 위한 네트워크, 스토리지 가상화 기술은 가상머신 가상화에서 이미 완성됐다. 단지 머신을 가상화 하느냐 하지 않느냐의 차이만 있을 뿐이다. 그러므로 컨테이너 기반 가상화 시스템을 만든다고 하면, 기존에 ...
logrotate를 이용한 로그 파일 관리
백앤드 애플리케이션의 대부분이 REST 방식의 웹 애플리케이션이다. 애플리케이션들은 모두 아파치 웹 서버 방식의 엑세스로그를 남긴다. 일반유저들이 사용하는 API들이다 보니 상당한 크기의 로그파일들이 만들어진다. 일주일만 그냥 둬도 파일의 크기가 수 기가바이트를 넘어갈 판이다. 모든 로그 파일들은 ELK로 어차피 색인이 되기 때문에, 굳이 시스템에 남겨두거...
tty.js
코드가 많은 사이트다. 그래 아래처럼 웹에서 직접 코드를 수정도 하고 실행도 할 수 있도록 코드 실행기를 붙였다. 유용하긴 한데, 코드를 실행하고 그 결과를 화면에 출력하는 방식이라서 표준입력이나 python interactive mode등을 사용 할 수 없다. 그래서 웹 터미널 애플리케이션을 찾아보기로 했다.구글님에게 물어 물어서 언어 기반이고 tty.j...
도커 개요
이 문서는 도커레퍼런스가 아니다. 기본적인 이해와 사용이 가능하도록 하는데 목적이 있다. 도커는 오픈소스기반의 컨테이너 소프트웨어다. 도커 컨테이너는 애플리케이션을 실행하기 위해서 필요한 코드, 런타임, 시스템 툴, 시스템 라이브러리 등을 모두 포함한채로 배포 할 수 있다. 덕분에 컨테이너는 어떤 환경에서도 동일하게 작동한다.도커는 리눅스 운영체제에서 실행...
우분투 apt 패키지 저장소 구축
우분투 리눅스 운영체제는 데비안으로 부터 파생된 .deb 기반의 패키지 관리 시스템을 가지고 있다. 나는 현재 개발 중인 애플리케이션을 효율적으로 배포하기 위해서 프라이빗 패키지 저장소를 만들기로 했다. 배포 프로세스는 다음과 같다. 1. Git을 이용해서 개발한다. 1. CI툴은 git에서 코드를 가져와서 최신 빌드를 만든다. 1. 빌드가 끝나면 .de...
PowerDNS
컨테이너 기반의 PaaS에서는 다양한 서비스들이 네트워크로 연결된다. 이들 서비스를 연결해서 완성된 애플리케이션으로 만들기 위해서는 각 서비스들이 서로를 discovery 할 수 있어야 한다. 가장 쉬운 방법은 서비스에 도메인 이름을 붙여주는 것이다. 예를 들어 워드프레스 애플리케이션을 실행한다고 가정해 보자. 워드프레스를 실행하기 위해서는 PHP+Apac...
NginX를 이용한 static 컨텐츠 서비스 와 캐시 설정
NginX를 리버스 프락시 서버로 사용하는 이유는 다음과 같다. 1. 로드밸런싱 1. 유저 요청에 대한 선 처리 1. 캐싱 이중 3번, Nginx를 이용해서 스태틱 페이지를 캐싱해서 서비스하는 방법을 테스트한다.웹 서비스의 성능을 높일 수 있는 가장 확실하고 손쉬운 방법은 컨텐츠 캐시다. 요즘 웹 서버는 매우 바쁘다. 유저의 요청을 받아서 데이터베이스를...
Mesos
Mesos는 분산 시스템 커널(distributed systems kernel)이다. 뭔가 굉장히 복잡해 보이지만, 기본 개념은 간단하다. 네트워크로 묶여 있는 여러 개의 컴퓨터의 자원 즉, CPU, 메모리, 디스크 등의 자원을 하나로 묶어서 resource pool로 만들어서 마치 하나의 컴퓨터 처럼 보이게 하겠다는 거다. 그리고 커널로서 작동하기 위한 ...