본문 바로가기

반응형

IT/서버

Apache Kafka 완전 정복 : 클러스터 구축부터 MSA 환경 활용 - 기본 개념 Event란 비즈니스에서 일어나는 모든 일 (데이터)을 의미한다. 예를 들어 은행은 고객이 월요일 오전 10시 33분에 고객 b에게 300달러를 송금하는것, A 택시가 현재 위치한 GPS좌표, 상점 B의 상품이 오후 3시 33분에 배송을 시작하는 것 이 모든 행위를 이벤트로 볼 수 있다. 이처럼 비즈니스 모든 영역에서 광범위하게 발생함으로 이벤트는 빅데이터 특징을 갖고 있다 그래서 이런 연속적인 많은 이벤트들의 흐름을 Event Stream이라 칭한다. 대표적인 이벤트 스트리밍 플랫폼으로 아파치 카프카가 존재하며 아파치 카프카는 크게 3가지 특징을 갖고 있다. 1. 이벤트 스트림을 안전하게 전송한다. (Pub & Sub 기능) 2. 이벤트 스트림을 디스트에 저장한다. (다른 이벤트 스트림과의 차별점) 3.. 더보기
MSA 가상머신, 컨테이너 VM VS 도커 VM은 각 게스트 OS가 따로 있어 커널, 라이브러리 전부 포함 성능 손실이 발생할 수 있고 이미지가 매우 커 배포, 부팅 속도가 오래걸린다. 그에 반면 컨테이너는 호스트 OS를 같이 쓰기 때문에 손실 위험성이 적으며 배포, 부팅속도가 매우 빠르다 개발 환경 그대로 다른 서버로 복제가 용이하며 컨테이너에는 애플리케이션 구동을 위한 라이브러리와 실행파일만 존재함으로 용량도 매우 작다. 도커는 컨테이너 생성시 필요한 요소들 도커 이미지에 모아두는데 이미지 내용은 여러개의 계층으로 된 바이너리 파일이다. 도커 컨테이너는 도커 이미지로 생성되며 격리된 시스템 자원과 네트워크를 사용할 수 있는 독립된 공간을 의미한다. Dockerfile로 이미지 생성을 자동화 할 수 있으며 빌드 명령어, 컨테이너.. 더보기
MSA 관심사 - 내부/외부 아키텍처 MSA는 여러 서비스간의 연계를 통해 시스템을 구축하는 SOA의 범주에 있다고 볼 수 있다. (SOA :통합 DB를 쓰면서 엔터프라이즈 서비스에서 모든 동작과 서비스를 제공하는 시스템을 의미함) MSA와 SOA의 가장 큰 차이는 저장소를 같이 쓰는지 각자 쓰는지이다. MSA를 구성하기 위해선 많은 시스템을 구축해야 된다. 각각의 레벨에서 기본적으로 구성해야되는 요소들이 패턴화되어 있고 각 영역의 패턴에 맞춰 사용할 플랫폼을 결정하면 된다. 보통 마이크로서비스 아키텍처를 정의할때 아래의 화면처럼 많이들 표현하고 있다. 마이크로서비스 빌드부터 시스템 구성에 대한 흐름을 아래 화면을 통해 살펴볼 수 있다. [참고자료 및 강좌] https://www.inflearn.com/course/%EC%8B%A4%EB%A.. 더보기
MSA 아키텍처 스타일 이벤트 기반 아키텍처 스타일 MSA의 기본이며 많이 사용되는 아키텍처는 이벤트 기반 아키텍처 스타일이다. 이벤트 기반 아키텍처 스타일은 확장성이 뛰어나고 고성은 애플리케이션 개발에 널리 쓰이는 비동기 분산 아키텍처다. 동기랑 비동기의 차이는 업무 처리 속도이다. 예를 들어 커피숍에 1명이 주문과 커피내리는 행위를 다 한다고 생각하면 1시간 동안 처리할 수 있는 주문량은 매우 적을 것이다. 하지만 주문자와 바리스타를 따로 고용하여 서로 맡은 업무만 처리하도록 하면 훨씬 많은 양의 주문를 받을 수 있고 손님이 몰릴때 상황에 맞게 주문자를 늘리거나 바리스타를 늘려 모든 주문량을 소화할 수 있게 확장할 수도 있을 것이다. 이벤트 기반 아키텍처는 다른 아키텍처에 내장이 가능한다. 그 예로 이벤트 기반 마이크로서비.. 더보기
MSA 개념 마이크로서비스 개념이 나오게 된 배경 서비스 변경 빈도가 잦아지면서 변화된 비즈니스 환경에 민첩하게 대응할 수 있는 구조의 필요성이 높아지면서 그런 구조를 갖춘 아마존의 비즈니스 환경에 대한 관심을 갖게 되었다. 현재 아마존은 MSA 환경 덕분에 요구사항에 즉각적으로 대응할 수 있으며 그 서비스 변경 속도는 대략 11초 밖에 소요되지 않는다. MSA에 가장 기본이 되는 개념은 클라우드 인프라이다. 물리서버는 인프라를 구축하는데 많은 비용과 시간을 투자해야 된다. 하지만 클라우드 인프라는 신규 또는 구축되어 있는 인프라를 구성을 빠르게 진행할 수 있다. 그리고 클라우드 인프라의 또다른 장점은 사용량에 따라 리소스 확보가 가능하다는 점이다. 서버의 리소스를 확장하는 방법에는 두가지가 있다. 수직 확장, 수평.. 더보기
Docker Compose를 이용하기 docker-compose.yml 파일을 통해 별도의 도커 명령어를 모르더라도 docker-compose up 명령어를 통해 한번에 원하는 환경을 만들 수 있다. 위 그림과 같이 클라이언트인 웹 브라우저가 있고 워드프레이스인 웹서버와 mysql DB 서버가 존재한다고 생각하고 도커를 통해 구축해보자. 아래 주소에 있는 docker 명령어와 compose 파일을 참고해서 스터디하고자 한다. https://gist.github.com/egoing/b62aa16573dd5c7c5da51fd429a5faa2 docker-compose.md GitHub Gist: instantly share code, notes, and snippets. gist.github.com [Docker 명령어] [Docker Comp.. 더보기
Docker Push (DockerHub, GitHub) 도커 이미지를 다른 사람과 공유하기 위해서 push를 통해 저장소인 docker hub 또는 git hub에 올릴 수 있다. Docker 공유하기 (Push) 1) 도커 허브에 로그인 또는 회원가입을 한 뒤 Repository를 생성한다. 2) 예시로 python3으로 만들면 아래 화면처럼 도커를 Push 할 예시 화면을 확인 할 수 있다. 3) 그럼 예시로 ubuntu OS에 Python3를 설치한 이미지를 도커 허브에 Push해보자 #ubuntu 이미지를 다운받는다. docker pull ubuntu #ubuntu 이미지를 실행 후 바로 명령어를 입력할 수 있게 옵션 -it으로 실행 (실행 이미지 이름은 my-python) docker run -it --name my-python ubuntu #apt.. 더보기
Docker Commit & Build 도커 Commit & Build 도커 커밋은 실행 중인 컨테이너를 백업하는 용도로 많이 사용되며 도커 빌드는 Dockerfile을 기준으로 새로운 이미지를 생성할때 많이 사용된다. 도커 Commit 도커허브를 통해 이미지를 다운받은 다음 run을 통해 실행하면 컨테이너가 실행된다 이때 컨테이너간의 공간이 독립적이기 때문에 run 명령어로 여러 컨테이너를 실행시킬 수 있다. 이후 개발자가 컨테이너에 작업을 하면 오직 해당 컨테이너에만 수정한 로직이 반영되기 이를 커밋을 통해 이미지로 만들고 싶은 것이다. 그럼 그 이미지를 run하여 여러 컨테이너로 실행할 수도 있고 push를 통해 도커허브와 같은 레지스트리에 올려 여러 사용자가 함께 사용할 수 있게 할 수도 있다. 이제 ubuntu를 다운받아 실행시킨 후.. 더보기

반응형