- I/O Burst : I/O๋ฅผ ํ๋ ์๊ฐ์ ์๋ฏธํ๋ฉฐ, I/O Burst๊ฐ ๋ง์ ๊ฒ์ I/O Bound Application
- CPU Burst : CPU๋ฅผ ์ฌ์ฉํ๋ ์๊ฐ์ ์๋ฏธํ๋ฉฐ, CPU Burst๊ฐ ๋ง์ ๊ฒ์ CPU Bound Application
npm install -g artillery #Artillery ์ค์นํ๊ธฐ
artillery run --output report.json cpu-test.yaml #ํ
์คํธ ์คํ -> json ํ์ผ ์์ฑ
artillery report ./report.json #json ํ์ผ -> html๋ก ๋ณํํด์ ์คํํ๊ธฐ
config:
target: "http://34.64.213.244"
phases:
- duration: 60
arrivalRate: 2
name: Warm up
scenarios:
# We define one scenario:
- name: "Just get hash"
flow:
# Get the details of the product:
- get:
url: "/hash/123"
e2-micro(vCPU 2๊ฐ, 1GB ๋ฉ๋ชจ๋ฆฌ)
->e2-highmem-8(vCPU 8๊ฐ, 64GB ๋ฉ๋ชจ๋ฆฌ)
duration:360, arrivalRate:2
๋ก ์ค์ ํ, ์์ ์ ์ผ๋ก ํธ๋ํฝ์ ๋ฐ์ ์ ์์๋ค.- ํ๋ ๊ตฌ๊ฐ์ด ์๋๋ฐ ์ด๋ VM์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด์ฉ ์ ์๋ ๊ฒ ๊ฐ๋ค. PM๊ณผ ๋ฌ๋ฆฌ VM์ ์ธ์ ํ ์ธ์คํด์ค์ ์์์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ํ์์ด ๋ฐ์ํ ์ ์๋ค.
- ๋ด๊ฐ ์์ํ๋ TPS๋ณด๋ค ์ฌ์ ๋กญ๊ฒ ์ค์
- ๊ธฐ๋ Latency๋ฅผ ๋ง์กฑํ ๋๊น์ง ์ฑ๋ฅ ํ
์คํธํ๊ธฐ
- ๋จ์ผ ์์ฒญ ๋ ์ดํด์๊ฐ ๊ธฐ๋ ๋ ์ดํด์๋ณด๋ค ๋๋ค๋ฉด, Scale-out์ผ๋ก ํด๊ฒฐ๋์ง ์๋๋ค. ๋ฐ๋ผ์ ์ฝ๋๊ฐ ๋นํจ์จ์ ์ด๋, I/O๊ฐ ๋ณ๋ชฉ์ด๊ฑฐ๋, ๋คํธ์ํฌ์์ ๋ ์ดํด์๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ฐ๋ผ์ ๋ค์ํ ๋ถ๋ถ๋ค์ ๊ณ ๋ คํ ์ ์์ด์ผ ํ๋ค.
- Scale-outํด๋ ์ฑ๋ฅ์ด ๋์ง ์์ผ๋ฉด ๋ณ๋ชฉ์ ์์ฌํ์.
- ์ฒ์์๋ ์งง์ ์๊ฐ์ผ๋ก ์ ์ TPS๋ก ์์ -> TPS๋ฅผ ์กฐ๊ธ์ฉ ์ฌ๋ ค์ ์ธ์ ๋ถํฐ ์งง์ ์๊ฐ์กฐ์ฐจ ๋ฒํฐ์ง ๋ชปํ๋์ง ํ์ธํ๊ธฐ
- ์๋น์ค Peak ์๊ฐ์ ์ ์ ๋๋ ํธ๋ํฝ์ ๋ฒํธ ์ ์๋ ์์ค๊น์ง ํ ์คํธ๊ฐ ํ์ํ๋ค.
- ์งง์ ์๊ฐ ๋งค์ฐ ๋์ ํธ๋ํฝ์ ๊ฒฌ๋ ์ ์๋ ์๋ฒ ๊ฐ์๋ ์ ์ฅ์, ์ฝ๋ ๋ณ๋ชฉ์ ์ฐพ์๋ค๋ฉด ์คํธ๋ ์ค ํ ์คํธ ์๊ฐ์ ์์ฃผ ๊ธธ๊ฒ ํ ์คํธํด๋ณด์. (์ฅ๊ธฐ์ ์ผ๋ก ์์์ด ๊ณ ๊ฐ๋๋ ์ํ์ผ ์ ์๊ธฐ ๋๋ฌธ)
- [max] ๊ฐ์ฅ ์ค๋ ๊ฑธ๋ฆฐ ์์ฒญ โ ์๋ต์๊ฐ
- [p95] ์ ์ฒด HTTP ํธ๋์ญ์ ์ค ๊ฐ์ฅ ๋น ๋ฅธ๊ฒ๋ถํฐ 95%๊น์ง (๋๋ถ๋ถ์ ํธ๋ํฝ)
- [p50] ์ ์ฒด HTTP ํธ๋์ญ์ ์ค ๊ฐ์ฅ ๋น ๋ฅธ๊ฒ๋ถํฐ 50%๊น์ง (์ ๋ฐ ํธ๋ํฝ)
- [min] ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์จ ์์ฒญ โ ์๋ต์๊ฐ
- ์ค์ ๋ฒค์น๋งํฌ๋ฅผ ์ด ๋ p99์ p95 ๋๊ฐ์ง ๊ทธ๋ํ๋ฅผ ๋ง์ด ๊ทธ๋ฆฐ๋ค. p99๋ ๋๋ถ๋ถ ํธ๋ํฝ์ด ํด๋น๋๊ธฐ ๋๋ฌธ์ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์ด๋ค.
- max๋ ๋คํธ์ํฌ๋ ์๋นํ ๋ถ์์ ํ ์กด์ฌ์ด๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์ฑ๋ฅ ์ธก์ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ด ๋ฐ๋์งํ์ง ์๋ค.
- dockerfile์ ๋น๋ํ๋ฉด docker ์ด๋ฏธ์ง๊ฐ ๋๋ค. (๋ก์ปฌ ํ๊ฒฝ)
- Build ๋ช
๋ น์ด
docker build -t ์ฌ์ฉ์์ด๋ฆ/์ ์ฅ์์ด๋ฆ .
- Build ๋ช
๋ น์ด
- ์ด๋ฏธ์ง๋ฅผ ์ ์ฅ์(dockerhub)์ pushํ๋ฉด ํด๋น ์ ์ฅ์์ ์
๋ก๋ ๋๋ค.
- Push ๋ช
๋ น์ด
docker push ์ฌ์ฉ์์ด๋ฆ/์ ์ฅ์์ด๋ฆ
- Push ๋ช
๋ น์ด
- ์ ์ฅ์์ ์๋ ์ด๋ฏธ์ง๋ฅผ pullํ๋ฉด ์ด๋ฏธ์ง๊ฐ ๋ค์ด๋ก๋ ๋๋ค. (GCP Instance)
- Pull ๋ช
๋ น์ด
docker pull ์ฌ์ฉ์์ด๋ฆ/์ ์ฅ์์ด๋ฆ
- Pull ๋ช
๋ น์ด
- ๋ค์ด๋ก๋ ๋ ์ด๋ฏธ์ง๋ฅผ runํ๋ฉด container๊ฐ ๋์ด์ ๋น๋ก์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์คํ๋๋ค.
- Run ๋ช
๋ น์ด
docker run -p {HOST_PORT}:{CONTAINER_PORT} ์ฌ์ฉ์์ด๋ฆ/์ ์ฅ์์ด๋ฆ
- Run ๋ช
๋ น์ด
- Jenkinks ์ธ์คํด์ค, Worker ์ธ์คํด์ค 2๊ฐ ๋ง๋ค๊ธฐ
- Jenkins์์ ๊ฐ์ธํค์ ๊ณต๊ฐํค๋ฅผ ์์ผ๋ก ๋ง๋ค์ด Worker ์ธ์คํด์ค ๋ฉํ๋ฐ์ดํฐ์ ๊ณต๊ฐํค๋ฅผ ๋ฃ์ด์ค๋ค.
- ๋์นญํค: ์ํธํ์ ์ฌ์ฉํ๋ ํค์ ๋ณตํธํ์ ์ฌ์ฉํ๋ ํค๊ฐ ๊ฐ์ ๊ฒ.
- ๋น๋์นญํค: ์ํธํ์ ์ฌ์ฉํ๋ ํค์ ๋ณตํธํ์ ์ฌ์ฉํ๋ ํค๊ฐ ๋ค๋ฅธ ๊ฒ. (๋ค๋ฅธ ๊ฐ์ด์ง๋ง ์ฐ๊ด๋์ด ์๋ ๊ฐ์ด๋ค)
- Publish over SSH ์์ฑํ๊ธฐ
- ๋ฐฐํฌ ์คํฌ๋ฆฝํธ ์์ฑ
bash: docker: command not found
- ๋์ปค๊ฐ ์ค์น๋์ง ์์์ ๋ฐ์ํ๋ ์ค๋ฅsudo yum install docker
sudo systemctl start docker
/var/run/docker.sock: connect: permission denied
- docker.sock ๊ถํ ๋ฌธ์ sudo chmod 666 /var/run/docker.sock
Jenkins์์ ํฐ์บฃ์ด ๋์์ก์ง๋ง, ๋นจ๊ฐ์ ๊ทธ๋ํ๋ ์๊ณ๊ฐ ๊ณ์ ๋๋ ํ์
- Jenkins์์ ๋ฐฐํฌ๊ฐ ๋๋์ง ์์๋ค๊ณ ์ธ์ํ๋ ๋ฌธ์ - ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํ์ด ํ์
nohup docker run -p 80:8080 ์ฌ์ฉ์์ด๋ฆ/์ ์ฅ์์ด๋ฆ > /dev/null 2>^&1 &
- ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํ์ด ํ์
- graceful shutdown
docker ps | grep {์ด๋ฏธ์ง ์ด๋ฆ}
ํ์ฌ ์คํ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ํ์ธํ๊ธฐdocker container kill -s 15 {Container ID}
-s 15
์ต์ ์ผ๋ก ์ฐ์ํ๊ฒ ์ข ๋ฃ(์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ์ค์ธ ์ผ์ ๋ชจ๋ ์ฒ๋ฆฌํ๊ณ ์ข ๋ฃํ๋ค.)
ArrivalRate(vuser) 1 ~ 8์ ๋ชจ๋ ์์ฒญ์ ๋ํด ํ๋ ๊ตฌ๊ฐ์ด ๋ฐ์ํ์ง๋ง, ์ ์์ ์ผ๋ก ์๋ตํ๋ค. ArrivalRate(vuser) 16๋ถํฐ 300ms ๊น์ง ์ ์์ ์ผ๋ก ์๋ตํ๋ค๊ฐ, 300ms ์ดํ๋ก๋ถํฐ 500, 502 ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
1๋ฒ
,2๋ฒ
,3๋ฒ
์ธ์คํด์ค๊ฐ ์ด์์๋์ง ํ์ธํ๊ธฐ (๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด์์๋ ์ํ์์ ์งํ)- ์คํธ๋ ์ค ํ ์คํธ ์งํ (360s - instance:3, ArrivalRate:2)
1๋ฒ
,2๋ฒ
์ธ์คํด์ค์์ ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ์ํค๊ธฐ- ์ฌ๋ฐฐํฌํ๊ธฐ
์ค๊ฐ์ ํ๋ ๊ตฌ๊ฐ์ด 2๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ข ๋ฃ์์ผฐ์ ๋๋ก ์์๋๋ค. ํ์ง๋ง ๋ชจ๋ ์์ฒญ์ 200์ผ๋ก, ์ ์์ ์ธ ์๋ต์ ๋ฐ์ ์ ์๋ค๋ ๊ฒ์ ๋ณผ ์ ์๋ค. 2๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ข ๋ฃ์์ผฐ์์๋ ๋ถ๊ตฌํ๊ณ ์ฒ๋ฆฌํ ์ ์์๋ ์ด์ ๋ ์ ์์ ์ผ๋ก ๋ฌด์ค๋จ ๋ฐฐํฌ๊ฐ ์ด๋ฃจ์ด์ก์์ ์ ์ ์๋ค.