GCP(13)
-
[GCP 원데이] 무중단 배포 환경 (로드밸런싱)
1. 무중단 배포 환경 지금까지의 도커 컨테이너의 앱을 실행시키는 과정에서 약 5초라는 시간이 소요되는 것을 로그로 확인할 수 있다. 그리고 약 5초의 시간동안 애플리케이션은 요청을 받지 못한다. 즉, 기존에 동작하고 있던 애플리케이션을 내린 순간부터 사용자는 서비스의 중단을 경험한다. 이전 버전(V1) 애플리케이션을 종료하고 새로운 버전(V2) 애플리케이션을 실행하고 새로운 버전 애플리케이션이 요청을 받을 준비가 될 때까지 서비스가 중단된다. 이러한 시간을 다운타임이라고 한다. V1과 V2는 동일한 포트를 사용하기 때문에 하나의 서버에서 하나의 포트를 동시에 서로 다른 애플리케이션이 사용하는 것이 불가능하다. 이를 해결하고자 나온 대안으로는 두 개의 서버 중, 하나의 서버에 배포를 하는 동안 다른 서버..
2021.04.23 -
[GCP 원데이] Jenkins를 이용한 배포
1. 개요 앞서 진행한 방법은 수종 빌드/배포 방식이다. 하지만 Jenkins를 이용한다면 자동화를 할 수 있다. GCP에는 두 가지 인스턴스가 생성이 된다. Jenkins가 실행되는 인스턴스(Jenkins 인스턴스)와 배포 대상이 되는 인스턴스로, 개발한 애플리케이션을 실행시키는 인스턴스(Worker 인스턴스) 두 가지가 있다. 2. 인스턴스 설정 1) 인스턴스 생성 기존에 있던 모든 인스턴스를 삭제하고 새로운 인스턴스 두 개를 만들어준다. jenkins-instance / micro / CentOS 7 worker-instacne / micro / CentOS 7 2) Jenkins 설치 jenkins-instance에 Jenkins를 설치해준다. sudo yum install wget sudo yu..
2021.04.23 -
[GCP 원데이] Dockerized 애플리케이션 배포
1. 개요 로컬에서 Dockerfile을 생성해준다. 로컬에서 Dockerfile을 빌드하여 이미지를 생성한다. 만든 이미지를 DockerHub에 업로드 (push) GCP 인스턴스는 DockerHub에서 이미지를 (pull) GCP 인스턴스에서 이미지를 실행 (run) 2. Dockerfile ※ Spring Boot Docker 문서의 Containerize It 항목부터 동일하게 진행해준다. 1) Dockerfile 생성 FROM openjdk:8-jdk-alpine ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"] 2) 빌드 docker build --build-arg JAR_FILE=bu..
2021.04.23 -
[GCP 원데이] Artillery를 사용한 부하 테스트
1. Artillery 1) 설치 brew install node node -v 2) GCP 애플리케이션 실행 이전에 만들어둔 cpu-bound-application을 실행시켜준다. java -jar cpu-0.0.1-SNAPSHOT.jar 3) Artillery 설정 IP 주소를 복사하여 Artillery 스크립트의 target에 넣어주고 불필요한 부분을 삭제해준다. config: target: "http://[IP 설정]" phases: - duration: 60 arrivalRate: 1 name: Warm up scenarios: # We define one scenario: - name: "just get hash" flow: - get: url: "/hash/123" 여기서 phases는 도큐..
2021.04.23 -
[GCP 원데이] CPU를 극단적으로 사용하는 애플리케이션
1. CPU를 극단적으로 사용하는 애플리케이션 1) 컴퓨터 부품 컴퓨터에서 가장 주요한 부품은 하드디스크, 메모리, CPU이다. 애플리케이션은 일반적으로 하드디스크에 담겨있고 이를 프로그램이라고 지칭한다. 하드디스크에 있는 프로그램을 실행시키면 메모리 위로 올라가는데 이를 프로세스라고 한다. 메모리 위에는 실행시킨 프로그램 외에도 여러개의 프로세스가 함께 올라가 있다. 이 프로세스중 누군가는 CPU에 의해 실행되는데, 어떤 프로세스가 실행될지 결정하는 것일 스케줄링이라고 한다. 2) 메모리가 필요한 이유? 메모리가 필요한 이유는 속도차이 때문이다. CPU는 하드디스크보다 굉장히 빠르게 때문에 CPU가 프로세스를 실행하기 위해 하드디스크에게 직접 요청하게 되면 CPU가 아무리 빨라도 하드디스크의 속도와 같..
2021.04.23 -
[GCP 원데이] Docker
1. Docker 1) VM과 Docker의 차이 VM은 Host 운영체제 위에 완전히 독립적인 머신을 만들어서 그 위에 독립적인 Guest 운영체제를 동작시킨다. 하지만 이 방식은 Host 운영체제와 Guest 운영체제 사이에서 '가상화' 단계를 거치면서 오버헤드가 발생한다. 반면 Docker는 각각의 Docker 애플리케이션을 마치 프로세스처럼 간주한다. 따라서 VM에 비해 오버헤드가 적어서 원래의 장비 성능을 발휘할 수 있게 된다. - IaC (Infrastructure as Code) Docker는 Dockerfile에 운영체제, 실행 명령어를 적어두고 실행하면 항상 동일한 환경이 구성이 된다. 즉, 인프라 설정으로 시간을 소비하지 않아도 된다는 뜻이다. 2) GCP Docker 설치 VM 인스턴..
2021.04.22