• ์๋ ํ์ธ์~ ์ด์ ์ ์ด์ํ๋ ๋ธ๋ก๊ทธ ๋ฐ GitHub, ๊ณต๋ถ ๋ด์ฉ์ ์ ๋ฆฌํ๋ Study-GitHub ๊ฐ ์์ต๋๋ค!
• ๐
โ CLASS101 ๋ฐฑ์๋ ์์คํ ์ค๋ฌด - Chapter2 CPU Bound ์ ํ๋ฆฌ์ผ์ด์
์๋ ํ์ธ์, ํด๋์ค101 ๋ฐฑ์๋ ์์คํ ์ค๋ฌด ๊ฐ์๋ฅผ ๋ฃ๊ณ , ๋ณต์ต ์ฐจ์์ผ๋ก ์ ๋ฆฌํ์ฌ ๋จ๊ธฐ๋ ค๊ณ ํฉ๋๋ค! ํน์ ๋ฌธ์ ๊ฐ ๋๋ค๋ฉด ๊ธ์ ์ญ์ ํ๊ฒ ์ต๋๋ค !! |
class101.net/products/5fc4a3b4fc231b000d85661b
โ CPU๋ฅผ ๊ทน๋จ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
ํ๋ก๊ทธ๋จ๊ณผ ํ๋ก์ธ์ค์ ์ฐจ์ด ?
• ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ฐ์ ์ผ๋ก ํ๋๋์คํฌ์ ์ ์ฅ๋์ด ์๋๋ฐ, ์ด๊ฒ์ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ํฉ๋๋ค.
• ํ๋๋์คํฌ์ ์๋ ํ๋ก๊ทธ๋จ์ ์คํ์ํค๋ฉด, ์ด ํ๋ก๊ทธ๋จ์ ๋ด์ฉ์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฌ๋ผ๊ฐ๊ณ ์ด๊ฒ์ ํ๋ก์ธ์ค๋ผ๊ณ ํฉ๋๋ค.
• I/O ์ฐ์ฐ์ ์ ๊ฒํ๊ณ , CPU ์ฐ์ฐ์ ๋ง์ด ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ => CPU๋ฅผ ํน๋ณํ ๋ง์ด ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
• Hash(MD5 Hash)๋ฅผ ํตํด CPU ์ฐ์ฐ์ ๋์ด๋๋ก ํฉ๋๋ค.
์๋์ ์ฌ์ดํธ์์ Spring Boot ํ๋ก์ ํธ๋ฅผ Clone ํฉ๋๋ค.
github.com/lleellee0/cpu-bound-application
* DataTypeConverter ํด๋์ค๋ฅผ ์ฐพ์ ์ ์๋ ์ค๋ฅ๊ฐ ๋์์ pom.xml์ ์์กด์ฑ์ ์ถ๊ฐํ์ต๋๋ค.
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
์คํ๋ง ๋ถํธ๋ฅผ ์คํํ๊ณ , localhost:80/hash/123 URL๋ก ์ ๊ทผํ์ ๋, ๋ฌธ์์ด์ด ์ถ๋ ฅ๋๋ฉด ์ ์ ๊ฒฐ๊ณผ์ ๋๋ค.
โ Spring Boot ํ๋ก์ ํธ๋ฅผ GCP์ ๋ฐฐํฌํ๊ธฐ
Spring Boot ํ๋ก์ ํธ๋ฅผ jar ํ์ผ๋ก ์์ฑํฉ๋๋ค.
Maven > Lifecycle > deploy ๋๋ธ ํด๋ฆญ
Maven ๋น๋๋ ์คํจํ์ง๋ง, jar ํ์ผ์ ์์ฑ์ด ๋ฉ๋๋ค.
* jar ํ์ผ์ GitHub์ ์ฌ๋ฆฌ๊ณ , GCP๊ฐ GitHub์ ํ์ผ์ ๋ฐ์๊ฐ๋๋ก ํ๋ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
GCP์์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.
์ด๋ฆ, ๋ฆฌ์ (์์ธ), ๋จธ์ ์ ํ(e2-micro), ๋ถํ ๋์คํฌ(CentOS 7), ๋ฐฉํ๋ฒฝ(HTTP, HTTPSํ์ฉ) ์ผ๋ก ์์ ํ๊ณ ์์ฑํฉ๋๋ค.
์ธ์คํด์ค ์์ฑ์ด ์์ฑ๋๋ฉด SSH๋ก ์ฐ๊ฒฐํด์ ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด wget๊ณผ Java๋ฅผ ์ค์นํฉ๋๋ค.(์ค๊ฐ์ y๋ฅผ ์ ๋ ฅํฉ๋๋ค)
$ sudo yum install wget
$ sudo yum install java
์ค์น๊ฐ ๋๋๋ฉด wget์ผ๋ก GitHub์ ์ฌ๋ฆฐ jar ํ์ผ์ ๋ค์ด ๋ฐ์ต๋๋ค.
github.com/lleellee0/class101-files/blob/main/cpu-0.0.1-SNAPSHOT.jar
์ ์ฌ์ดํธ์์ Download ๋ฒํผ ์ฐํด๋ฆญ > ๋งํฌ ์ฃผ์ ๋ณต์ฌ๋ฅผ ํฉ๋๋ค.
๊ทธ ํ SSH์์ wget์ ํตํด jar ํ์ผ์ ๋ค์ด ๋ฐ์ต๋๋ค.
$ wget ๋งํฌ ์ฃผ์(URL)
๊ทธ ํ Java๋ก jar ํ์ผ์ ์คํํฉ๋๋ค.
$ sudo java -jar cpu-0.0.1-SNAPSHOT.jar
์์ ๊ฐ์ ํ๋ฉด์ด ๋ํ๋๋ฉด ์คํ๋ง ๋ถํธ๊ฐ ์ ์์ ์ผ๋ก ์คํ์ด ๋๊ฑด๋ฐ์,
GCP์์ ์ธ์คํด์ค์ ์ธ๋ถ IP/hash/{input} ์ผ๋ก ์ ๊ทผ์ ํด๋ด ๋๋ค.
์ ์์ ์ผ๋ก ์ ๊ทผ์ด ๋ฉ๋๋ค. ๐
๊ฐ๋ฐ์ ๋๊ตฌ(F12) > Network > ์๋ก๊ณ ์นจ (HashController)
• Time: 193 ms
๊ฐ๋ฐ์ ๋๊ตฌ(F12) > Network > ์๋ก๊ณ ์นจ (CpuApplication)
• Time: 51 ms
๋๋ต ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ดค์๋, HashController์ ์๊ฐ(193ms) - CpuApplication์ ์๊ฐ(51ms) ์ ๊ฒฐ๊ณผ์ธ
140ms ์ ๋๊ฐ, MD5 Hash ๋ฅผ 100,000๋ฒ ์ ๋ ์ํํ๋ ์๊ฐ์ด๋ผ๊ณ ์๊ฐ ํ ์ ์์ต๋๋ค.
โ ์คํธ๋ ์ค ํ ์คํธ ํด๋ก ์ฑ๋ฅ ์ธก์ ํ๊ธฐ(by Artillery)
• NodeJS ์ค์นํ๊ธฐ
• Visual Studio Code ์คํ
artillery-scripts ๋ผ๋ ํด๋๋ฅผ ์์ฑํ๊ณ , ์ด ํด๋๋ฅผ ์ด์ด์ค๋๋ค.
(์๋ฌธ์๋ก ์์ฑํ๋๋ฐ, ๋๋ฌธ์๋ก ๋์ต๋๋ค.)
•Artillery ์คํ
artillery.io/docs/guides/getting-started/installing-artillery.html#System-requirements
Visual Studio Code์์ ํ๋ฉด ์๋จ Terminal > New Terminal์ ํด๋ฆญํฉ๋๋ค.
(๋จ์ถํค: Ctrl + Shift + `(์ซ์ 1 ์ข์ธก))
Terminal์ด ์ด๋ฆฌ๋ฉด artillerty ์ ์คํํฉ๋๋ค.
npm install -g artillery
Artillery ์ฌ์ดํธ์์ Core Concepts๋ก ๋ค์ด๊ฐ๋๋ค.
ํ๋ฉด์์ ๋ด๋ ค๊ฐ๋ค๋ณด๋ฉด ์์ ๊ฐ์ด ์ฝ๋๊ฐ ์กด์ฌํ๋๋ฐ์, ์ ์ฝ๋๋ฅผ ๋ชจ๋ ๋ณต์ฌ ํ ํ
Visual Studio Code์์ yaml ํ์ผ์ ๋ง๋ค๊ณ , ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ๊ธฐ ํฉ๋๋ค.
GCP cpu-instance-1 ์ธ์คํด์ค์์ Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ์คํํฉ๋๋ค.
Visual Studio Code์ ์์ฑํ yaml ํ์ผ์ ์์ ๊ฐ์ด ์์ ํฉ๋๋ค.
ํ์์๋ ๋ถ๋ถ์ ๋ชจ๋ ์ ๊ฑฐํ๊ณ target, phases, scenarios ๋ถ๋ถ๋ง ์์ ํฉ๋๋ค.
• target: GCP์ ์ธ๋ถ IP
• phases: ํ ์คํธ ์ฑ๋ฅ ์ค์
• scenarios: name ๋ฐ get๋ฐฉ์์ url ์ค์
Visual Studio Code์ Terminal์์ artillery์ ์คํํฉ๋๋ค.
์ ๊ณผ์ ์ด ๋๋๋ฉด report.json ์ด๋ผ๋ ํ์ผ์ด ์์ฑ ๋ฉ๋๋ค.
์ json ํ์ผ์ html๋ก ๋ณด๊ธฐ ์ํด ์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
๊ทธ๋ผ ์์ ๊ฐ์ artillery์ report ํ๋ฉด์ด ์คํ์ด ๋ฉ๋๋ค.
Scenario counts์์ ํ์ฌ yamlํ์ผ์ ์ค์ ํ duration์ 60, arrivalRate์ 1์ด๋ฏ๋ก
60 ๋ฒ์ Request๊ฐ ์ด๋ฃจ์ด์ง ๊ฑธ ๋ณผ ์ ์์ต๋๋ค.
chart์์ ๊ฐ์ฅ ์ค์ํ ๊ทธ๋ํ ์ค ํ๋์ธ๋ฐ์, yaml์ ์ค์ ํ arrivalRate์ ๊ฐ์ ์ฆ๊ฐ์ํค๋ฉด์ ํ ์คํธ๋ฅผ ํ๊ณ ,
์ฒ๋ฆฌํ ์ ์์๋๊น์ง ์คํํ๋ฉฐ ํ์ธํฉ๋๋ค.
โ ๊ณ ์ฌ์์ CPU๋ก Scale-up ํ๊ธฐ
๊ณ ์ฌ์์ CPU๋ก Scale-up์ ํตํด ๋ถํ ํ ์คํธ๋ฅผ ์งํํ๊ฒ ์ต๋๋ค.
GCP์์ ๊ธฐ์กด์ cpu-instance-1 ์ธ์คํด์ค๋ ์ญ์ ํ๊ณ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.
๊ธฐ์กด๊ณผ ๋ชจ๋ ๋์ผํ๊ฒ ์ค์ ํ๊ณ , ๋จธ์ ์ ํ์ e2-highcpu-8 ๋ก ์ค์ ํ๊ณ ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.
• ์ด๋ฆ: cpu-instance-1
• ๋ฆฌ์ : asia-northeast3(์์ธ)
• ๋จธ์ ์ ํ: e2-highcpu-8
• ๋ถํ ๋์คํฌ: CentOS 7
•๋ฐฉํ๋ฒฝ: HTTP, HTTPS ํธ๋ํฝ ํ์ฉ
์ธ์คํด์ค๊ฐ ์์ฑ๋๋ฉด ์์์ ์งํํ wget, Java ์ค์น ๋ฐ jar ํ์ผ ์คํ์ ๋์ผํ๊ฒ ์งํํฉ๋๋ค.
$ sudo yum install wget
$ sudo yum install java
์ธ์คํด์ค์ ์ธ๋ถ IP๊ฐ ๋ณ๊ฒฝ๋์๋ค๋ฉด cpu-test.yaml ํ์ผ์๋ ์ธ๋ถ IP๋ฅผ ์์ ํฉ๋๋ค.
์์ ํ artillery๋ฅผ ํตํด ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค.
์ฐจํธ ํ์ด์ง๋ฅผ ๋ณด๊ธฐ ์ํด์๋ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์๋ฉด ๋ฉ๋๋ค.
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ํ์คํ ๊ณ ์ฑ๋ฅ CPU(highcpu-8) ์ด latency time(์ง์ฐ ์๊ฐ)์ด ์งง์ ๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
์ ํ ์คํธ ๊ณผ์ ์ด ๋ชจ๋ ๋๋๋ฉด ์ข์ ์ ์์ฑํ GCP ์ธ์คํด์ค๋ ๋ฐ๋์ ์ญ์ ๋ฅผ ํ์ ์ผ ํฉ๋๋ค.
(๊ณ ์ฑ๋ฅ CPU ์ด๋ฏ๋ก ๋น์ฉ์ ๋ง์ด ์ฐจ์งํฉ๋๋ค !)
โป ์์ TPS๋ณด๋ค ์ฌ์ ๋กญ๊ฒ ์ก์ต๋๋ค.
โป API์ ๊ธฐ๋ Latency๋ฅผ ๋ง์กฑํ ๋๊น์ง ์ฑ๋ฅ ํ ์คํธ๋ฅผ ํด์ผ ํฉ๋๋ค.
โป Scale-out์ ํด๋ ์ฑ๋ฅ์ด ํฅ์๋์ง ์์ผ๋ฉด, ๋ณ๋ชฉ์ ์์ฌํด๋ด์ผ ํฉ๋๋ค.(์ฝ๋, I/O ๋ฑ๋ฑ)
'๊ฐ์ ์ ๋ฆฌ > CLASS101 ๋ฐฑ์๋ ์์คํ ์ค๋ฌด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Chapter3 - CPU Bound ์ ํ๋ฆฌ์ผ์ด์ ๋ฌด์ค๋จ ๋ฐฐํฌ(Nginx ๋ก๋๋ฐธ๋ฐ์ฑ) (0) | 2021.02.27 |
---|---|
Chapter2 - CPU Bound ์ ํ๋ฆฌ์ผ์ด์ (Jenkins ๋ฐฐํฌ) (0) | 2021.02.26 |
Chapter2 - CPU Bound ์ ํ๋ฆฌ์ผ์ด์ Dockerized ์ ํ๋ฆฌ์ผ์ด์ GCP ๋ฐฐํฌ (0) | 2021.02.26 |
Chapter1 - ๋ฐฑ์๋ ์ฌ์ ์ค๋น (0) | 2021.02.20 |
Chapter0 - ๊ฐ์ ์๊ฐ (0) | 2021.02.20 |
๋๊ธ