๊ธฐ์ฌ ๋ฒ์ญ :
๋๋ ์ด ๊ธฐ์ฌ๊ฐ ๋งค์ฐ ํฅ๋ฏธ๋กญ๋ค๊ณ ์๊ฐํ๋ฉฐ Envoy๋ "istio"์ ์ผ๋ถ๋ก ๋๋ ๋จ์ํ kubernetes์ "์์ ์ปจํธ๋กค๋ฌ"๋ก ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ์๋ฅผ ๋ค์ด ์ผ๋ฐ์ ์ธ Envoy์ ๋์ผํ ์ง์ ์ ์ธ ์ํธ ์์ฉ์ ํ์ง ์์ต๋๋ค. Nginx ๋๋ Haproxy ์ค์น. ๊ทธ๋ฌ๋ ๋ฌด์ธ๊ฐ๊ฐ ๊ณ ์ฅ๋ ๊ฒฝ์ฐ ๋ด๋ถ์์ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ํน์ ๋จ์ด๋ฅผ ํฌํจํ์ฌ ๊ฐ๋ฅํ ํ ๋ง์ ๋ด์ฉ์ ๋ฌ์์์ด๋ก ๋ฒ์ญํ๋ ค๊ณ ๋
ธ๋ ฅํ์ผ๋ฉฐ, ์ด๊ฒ์ ๋ณด๋ ๊ฒ์ด ๊ณ ํต์ค๋ฝ๋ค๊ณ ์๊ฐํ๋ ๋ถ๋ค์ ์ํด ์๋ฌธ์ ๊ดํธ ์์ ๋จ๊ฒจ ๋์์ต๋๋ค. ๊ณ ์์ด์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค.
Envoy ์ฝ๋๋ฒ ์ด์ค์ ๋ํ ๋ฎ์ ์์ค์ ๊ธฐ์ ๋ฌธ์๋ ํ์ฌ ๋งค์ฐ ๋๋ฌผ์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ ๋ Envoy์ ๋ค์ํ ํ์ ์์คํ
์ ๋ํ ์ผ๋ จ์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์์ฑํ ๊ณํ์
๋๋ค. ์ด๊ฒ์ด ์ฒซ ๋ฒ์งธ ๊ธฐ์ฌ์ด๋ฏ๋ก ๊ทํ์ ์๊ฐ๊ณผ ํฅํ ๊ธฐ์ฌ์ ๊ด์ฌ์ด ์์ ๋งํ ๋ด์ฉ์ ์๋ ค์ฃผ์ญ์์ค.
Envoy์ ๊ดํด ์ ๊ฐ ๋ฐ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๊ธฐ์ ์ ์ง๋ฌธ ์ค ํ๋๋ Envoy๊ฐ ์ฌ์ฉํ๋ ์ค๋ ๋ฉ ๋ชจ๋ธ์ ๋ํ ๋ฎ์ ์์ค์ ์ค๋ช ์ ๋ฌป๋ ๊ฒ์ ๋๋ค. ์ด ๊ฒ์๋ฌผ์์๋ Envoy๊ฐ ์ฐ๊ฒฐ์ ์ค๋ ๋์ ๋งคํํ๋ ๋ฐฉ๋ฒ๊ณผ Envoy๊ฐ ์ฝ๋๋ฅผ ๋ ๋ณ๋ ฌ์ ์ด๊ณ ๊ณ ์ฑ๋ฅ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ค๋ ๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง ์์คํ ์ ๋ํด ์ค๋ช ํ๊ฒ ์ต๋๋ค.
์ค๋ ๋ฉ ๊ฐ์
Envoy๋ ์ธ ๊ฐ์ง ์ ํ์ ์คํธ๋ฆผ์ ์ฌ์ฉํฉ๋๋ค.
- ๊ธฐ๋ณธ: ์ด ์ค๋ ๋๋ ํ๋ก์ธ์ค ์์ ๋ฐ ์ข ๋ฃ, DNS, ์ํ ํ์ธ, ์ผ๋ฐ ํด๋ฌ์คํฐ ๋ฐ ๋ฐํ์ ๊ด๋ฆฌ, ํต๊ณ ์ฌ์ค์ , ๊ด๋ฆฌ ๋ฐ ์ผ๋ฐ ํ๋ก์ธ์ค ๊ด๋ฆฌ(Linux ์ ํธ, ํซ ์ฌ์์ ๋ฑ)๋ฅผ ํฌํจํ XDS(xDiscovery Service) API์ ๋ชจ๋ ์ฒ๋ฆฌ๋ฅผ ์ ์ดํฉ๋๋ค. ์ด ์ค๋ ๋์์ ๋ฐ์ํ๋ ๊ฒ์ ๋น๋๊ธฐ์์ด๋ฉฐ "๋น์ฐจ๋จ"์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฉ์ธ ์ค๋ ๋๋ ์คํํ๋ ๋ฐ ๋ง์ ์์ CPU๊ฐ ํ์ํ์ง ์์ ๋ชจ๋ ์ค์ํ ๊ธฐ๋ฅ ํ๋ก์ธ์ค๋ฅผ ์กฐ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋๋ถ๋ถ์ ์ ์ด ์ฝ๋๋ฅผ ๋จ์ผ ์ค๋ ๋์ธ ๊ฒ์ฒ๋ผ ์์ฑํ ์ ์์ต๋๋ค.
- ๋
ธ๋์: ๊ธฐ๋ณธ์ ์ผ๋ก Envoy๋ ์์คํ
์ ๊ฐ ํ๋์จ์ด ์ค๋ ๋์ ๋ํด ์์
์ ์ค๋ ๋๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ ์ต์
์ ์ฌ์ฉํ์ฌ ์ ์ดํ ์ ์์ต๋๋ค.
--concurrency
. ๊ฐ ์์ ์ ์ค๋ ๋๋ ๊ฐ ๋ฆฌ์ค๋์ ์์ ์ ๋ด๋นํ๋ "๋น์ฐจ๋จ" ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์คํํฉ๋๋ค. ์ด ๊ธ์ ์ฐ๋ ์์ (29๋ 2017์ XNUMX์ผ)์๋ ๋ฆฌ์ค๋์ ์ค๋ฉ์ด ์์ผ๋ฉฐ ์ ์ฐ๊ฒฐ์ ์๋ฝํ๊ณ ํํฐ ์คํ์ ์ธ์คํด์คํํฉ๋๋ค. ์ฐ๊ฒฐ ์๋ช ๋์ ๋ชจ๋ ์ ์ถ๋ ฅ(IO) ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค. ๋ค์ ๋งํ์ง๋ง, ์ด๋ฅผ ํตํด ๋๋ถ๋ถ์ ์ฐ๊ฒฐ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ๋จ์ผ ์ค๋ ๋์ธ ๊ฒ์ฒ๋ผ ์์ฑํ ์ ์์ต๋๋ค. - ํ์ผ ํ๋ฌ์
: Envoy๊ฐ ์์ฑํ๋ ๊ฐ ํ์ผ(์ฃผ๋ก ์ก์ธ์ค ๋ก๊ทธ)์๋ ํ์ฌ ๋
๋ฆฝ์ ์ธ ์ฐจ๋จ ์ค๋ ๋๊ฐ ์์ต๋๋ค. ์ด๋ ๋ค์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ํ์ผ ์์คํ
์ ์ํด ์บ์๋ ํ์ผ์ ์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์
๋๋ค.
O_NONBLOCK
๊ฐ๋ ์ฐจ๋จ๋ ์๋ ์์ด์(ํ์จ). ์์ ์ ์ค๋ ๋๊ฐ ํ์ผ์ ์จ์ผ ํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ ์ค์ ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ฒํผ๋ก ์ด๋๋์ด ๊ฒฐ๊ตญ ์ค๋ ๋๋ฅผ ํตํด ํ๋ฌ์๋ฉ๋๋ค. ํ์ผ ํ๋ฌ์. ์ด๋ ๊ธฐ์ ์ ์ผ๋ก ๋ชจ๋ ์์ ์ ์ค๋ ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๋ฅผ ์ฑ์ฐ๋ ค๊ณ ์๋ํ๋ ๋์ ๋์ผํ ์ ๊ธ์ ์ฐจ๋จํ ์ ์๋ ์ฝ๋ ์์ญ ์ค ํ๋์ ๋๋ค.
์ฐ๊ฒฐ ์ฒ๋ฆฌ
์์์ ๊ฐ๋ตํ๊ฒ ์ค๋ช
ํ ๊ฒ์ฒ๋ผ ๋ชจ๋ ์์
์ ์ค๋ ๋๋ ์ค๋ฉ ์์ด ๋ชจ๋ ๋ฆฌ์ค๋๋ฅผ ์์ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ปค๋์ ํ์ฉ๋ ์์ผ์ ์์
์ ์ค๋ ๋์ ์ ์์ ์ผ๋ก ๋ณด๋ด๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ต์ ์ปค๋์ ์ผ๋ฐ์ ์ผ๋ก ์ด ์์
์ ๋งค์ฐ ๋ฅ์ํฉ๋๋ค. ๋์ผํ ์์ผ์์ ์์ ๋๊ธฐํ๊ณ ๋ผ์ด๋ ๋ก๋น์ ์ฌ์ฉํ์ง ์๋ ๋ค๋ฅธ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ์ค๋ ๋๋ฅผ ์์
์ผ๋ก ์ฑ์ฐ๊ธฐ ์ํด ์
์ถ๋ ฅ(IO) ์ฐ์ ์์ ํฅ์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค. ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ ๊ธ(Spinlock)์
๋๋ค.
์์
์ ์ค๋ ๋์์ ์ฐ๊ฒฐ์ด ์น์ธ๋๋ฉด ํด๋น ์ค๋ ๋๋ฅผ ๋ ๋์ง ์์ต๋๋ค. ์ฐ๊ฒฐ์ ๋ํ ๋ชจ๋ ์ถ๊ฐ ์ฒ๋ฆฌ๋ ์ ๋ฌ ๋์์ ํฌํจํ์ฌ ์ ์ ์ผ๋ก ์์
์ ์ค๋ ๋์์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
์ด๋ ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์ค์ํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- Envoy์ ๋ชจ๋ ์ฐ๊ฒฐ ํ์ ์์ ์ ์ค๋ ๋์ ํ ๋น๋ฉ๋๋ค. ๋ฐ๋ผ์ HTTP/2 ์ฐ๊ฒฐ ํ์ ํ ๋ฒ์ ๊ฐ ์ ์คํธ๋ฆผ ํธ์คํธ์ ๋ํด ํ๋์ ์ฐ๊ฒฐ๋ง ์์ฑํ์ง๋ง ์์ ์ ์ค๋ ๋๊ฐ 2๊ฐ๋ผ๋ฉด ์์ ์ ์ธ ์ํ์์๋ ์ ์คํธ๋ฆผ ํธ์คํธ๋น XNUMX๊ฐ์ HTTP/XNUMX ์ฐ๊ฒฐ์ด ์๊ฒ ๋ฉ๋๋ค.
- Envoy๊ฐ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์๋ํ๋ ์ด์ ๋ ๋ชจ๋ ๊ฒ์ ๋จ์ผ ์์ ์ ์ค๋ ๋์ ์ ์งํจ์ผ๋ก์จ ๊ฑฐ์ ๋ชจ๋ ์ฝ๋๋ฅผ ์ฐจ๋จ ์์ด ๋จ์ผ ์ค๋ ๋์ธ ๊ฒ์ฒ๋ผ ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด ๋์์ธ์ ์ฌ์ฉํ๋ฉด ๋ง์ ์ฝ๋๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์์ผ๋ฉฐ ๊ฑฐ์ โโ๋ฌด์ ํ์ ์์ ์ ์ค๋ ๋๋ก ํ์ฅํ ์ ์์ต๋๋ค.
- ๊ทธ๋ฌ๋ ์ฃผ์ ์์ฌ์ ์ค ํ๋๋ ๋ฉ๋ชจ๋ฆฌ ํ๊ณผ ์ฐ๊ฒฐ ํจ์จ์ฑ์ ๊ด์ ์์ ๋ณผ ๋ ์ค์ ๋ก
--concurrency
. ํ์ํ ๊ฒ๋ณด๋ค ๋ ๋ง์ ์์ ์ ์ค๋ ๋๊ฐ ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ญ๋น๋๊ณ ๋ ๋ง์ ์ ํด ์ฐ๊ฒฐ์ด ์์ฑ๋๋ฉฐ ์ฐ๊ฒฐ ํ๋ง ์๋๊ฐ ๊ฐ์ํฉ๋๋ค. Lyft์์ ํน์ฌ ์ฌ์ด๋์นด ์ปจํ ์ด๋๋ ๋งค์ฐ ๋ฎ์ ๋์์ฑ์ผ๋ก ์คํ๋๋ฏ๋ก ์ฑ๋ฅ์ ์์ ์๋ ์๋น์ค์ ๊ฑฐ์ ์ผ์นํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ต๋ ๋์์ฑ์์๋ง Envoy๋ฅผ ์์ง ํ๋ก์๋ก ์คํํฉ๋๋ค.
๋น์ฐจ๋จ์ด๋ ๋ฌด์์ ์๋ฏธํ๋์?
"๋น์ฐจ๋จ"์ด๋ผ๋ ์ฉ์ด๋ ์ง๊ธ๊น์ง ๋ฉ์ธ ์ค๋ ๋์ ์์ ์ ์ค๋ ๋์ ์๋ ๋ฐฉ์์ ๋ ผ์ํ ๋ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉ๋์์ต๋๋ค. ๋ชจ๋ ์ฝ๋๋ ์๋ฌด๊ฒ๋ ์ฐจ๋จ๋์ง ์๋๋ค๋ ๊ฐ์ ํ์ ์์ฑ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์ ์ ์ผ๋ก ์ฌ์ค์ด ์๋๋๋ค(์ ์ ์ผ๋ก ์ฌ์ค์ด ์๋ ๊ฒ์ ๋ฌด์์ ๋๊น?).
Envoy๋ ์ฌ๋ฌ ๊ฐ์ง ๊ธด ํ๋ก์ธ์ค ์ ๊ธ์ ์ฌ์ฉํฉ๋๋ค.
- ์ค๋ช ํ ๋๋ก ์ก์ธ์ค ๋ก๊ทธ๋ฅผ ์์ฑํ ๋ ๋ชจ๋ ์์ ์ ์ค๋ ๋๋ ๋ฉ๋ชจ๋ฆฌ ๋ด ๋ก๊ทธ ๋ฒํผ๊ฐ ์ฑ์์ง๊ธฐ ์ ์ ๋์ผํ ์ ๊ธ์ ํ๋ํฉ๋๋ค. ์ ๊ธ ์ ์ง ์๊ฐ์ ๋งค์ฐ ๋ฎ์์ผ ํ์ง๋ง ๋์ ๋์์ฑ๊ณผ ๋์ ์ฒ๋ฆฌ๋์์ ์ ๊ธ์ด ๊ฒฝํฉ๋ ์ ์์ต๋๋ค.
- Envoy๋ ๋งค์ฐ ๋ณต์กํ ์์คํ ์ ์ฌ์ฉํ์ฌ ์ค๋ ๋์ ๋ํ ๋ก์ปฌ ํต๊ณ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๊ฒ์ ๋ณ๋์ ๊ฒ์๋ฌผ์ ์ฃผ์ ๊ฐ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ก์ปฌ์์ ์ค๋ ๋ ํต๊ณ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ ์ผ๋ถ๋ก ์ค์ "ํต๊ณ ์ ์ฅ์"์ ๋ํ ์ ๊ธ์ ํ๋ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ ์ ์ ๊ฐ๋ตํ๊ฒ ์ธ๊ธํ๊ฒ ์ต๋๋ค. ์ด ์ ๊ธ์ ์ ๋๋ก ํ์ํ์ง ์์ต๋๋ค.
- ๊ธฐ๋ณธ ์ค๋ ๋๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ชจ๋ ์์ ์ ์ค๋ ๋์ ์กฐ์ ํด์ผ ํฉ๋๋ค. ์ด๋ ๋ฉ์ธ ์ค๋ ๋์์ ์์ ์ ์ค๋ ๋๋ก, ๋๋ก๋ ์์ ์ ์ค๋ ๋์์ ๋ค์ ๋ฉ์ธ ์ค๋ ๋๋ก "๊ฒ์"ํจ์ผ๋ก์จ ์ํ๋ฉ๋๋ค. ์ ์กํ๋ ค๋ฉด ๊ฒ์๋ ๋ฉ์์ง๋ฅผ ๋์ค์ ๋ฐฐ๋ฌํ๊ธฐ ์ํด ๋๊ธฐ์ด์ ๋ฃ์ ์ ์๋๋ก ์ ๊ธ์ด ํ์ํฉ๋๋ค. ์ด๋ฌํ ์ ๊ธ์ ์ฌ๊ฐํ๊ฒ ๋ ผ์์ ๋ฒ์ฌ์๋ ์ ๋์ง๋ง ๊ธฐ์ ์ ์ผ๋ก๋ ์ฌ์ ํ ์ฐจ๋จ๋ ์ ์์ต๋๋ค.
- Envoy๋ ์์คํ ์ค๋ฅ ์คํธ๋ฆผ(ํ์ค ์ค๋ฅ)์ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ ๋ ์ ์ฒด ํ๋ก์ธ์ค์ ๋ํ ์ ๊ธ์ ํ๋ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก Envoy์ ๋ก์ปฌ ๋ก๊น ์ ์ฑ๋ฅ ์ธก๋ฉด์์ ํํธ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ด ๊ฐ์ ์ ๋ง์ ๊ด์ฌ์ ๊ธฐ์ธ์ด์ง ์์์ต๋๋ค.
- ๋ช ๊ฐ์ง ๋ค๋ฅธ ์์ ์ ๊ธ์ด ์์ง๋ง ๊ทธ ์ค ์ด๋ ๊ฒ๋ ์ฑ๋ฅ์ ์ค์ํ์ง ์์ผ๋ฉฐ ๋์ ํด์๋ ์ ๋ฉ๋๋ค.
์ค๋ ๋ ๋ก์ปฌ ์ ์ฅ์
Envoy๊ฐ ๋ฉ์ธ ์ค๋ ๋์ ์ฑ
์๊ณผ ์์
์ ์ค๋ ๋์ ์ฑ
์์ ๋ถ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ์ธํด ๋ณต์กํ ์ฒ๋ฆฌ๋ฅผ ๋ฉ์ธ ์ค๋ ๋์์ ์ํํ ๋ค์ ๊ณ ๋๋ก ๋์์ ์ธ ๋ฐฉ์์ผ๋ก ๊ฐ ์์
์ ์ค๋ ๋์ ์ ๊ณตํ ์ ์์ด์ผ ํ๋ค๋ ์๊ตฌ ์ฌํญ์ด ์์ต๋๋ค. ์ด ์น์
์์๋ Envoy TLS(Thread Local Storage)๋ฅผ ๋์ ์์ค์์ ์ค๋ช
ํฉ๋๋ค. ๋ค์ ์น์
์์๋ ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํฉ๋๋ค.
์ด๋ฏธ ์ค๋ช
ํ๋ฏ์ด ๋ฉ์ธ ์ค๋ ๋๋ Envoy ํ๋ก์ธ์ค์ ๊ฑฐ์ ๋ชจ๋ ๊ด๋ฆฌ ๋ฐ ์ ์ด ํ๋ฉด ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ฌ๊ธฐ์ ์ปจํธ๋กค ํ๋ ์ธ์ ์ฝ๊ฐ ์ค๋ฒ๋ก๋๋์ง๋ง Envoy ํ๋ก์ธ์ค ์์ฒด ๋ด์์ ์ด๋ฅผ ์ดํด๋ณด๊ณ ์์
์ ์ค๋ ๋๊ฐ ์ํํ๋ ์ ๋ฌ๊ณผ ๋น๊ตํ๋ฉด ์๋ฏธ๊ฐ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ๊ท์น์ ๊ธฐ๋ณธ ์ค๋ ๋ ํ๋ก์ธ์ค๊ฐ ์ผ๋ถ ์์
์ ์ํํ ๋ค์ ํด๋น ์์
์ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๊ฐ ์์
์ ์ค๋ ๋๋ฅผ ์
๋ฐ์ดํธํด์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. ์ด ๊ฒฝ์ฐ ์์
์ ์ค๋ ๋๋ ๊ฐ ์ก์ธ์ค์ ๋ํด ์ ๊ธ์ ํ๋ํ ํ์๊ฐ ์์ต๋๋ค..
Envoy์ TLS(์ค๋ ๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง) ์์คํ ์ ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค.
- ๋ฉ์ธ ์ค๋ ๋์์ ์คํ๋๋ ์ฝ๋๋ ์ ์ฒด ํ๋ก์ธ์ค์ TLS ์ฌ๋กฏ์ ํ ๋นํ ์ ์์ต๋๋ค. ์ด๋ ์ถ์ํ๋์ด ์์ง๋ง ์ค์ ๋ก๋ ๋ฒกํฐ์ ๋ํ ์ธ๋ฑ์ค์ด๋ฉฐ O(1) ์ก์ธ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ฉ์ธ ์ค๋ ๋๋ ์์์ ๋ฐ์ดํฐ๋ฅผ ํด๋น ์ฌ๋กฏ์ ์ค์นํ ์ ์์ต๋๋ค. ์ด ์์ ์ด ์๋ฃ๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์ผ๋ฐ ์ด๋ฒคํธ ๋ฃจํ ์ด๋ฒคํธ๋ก ๊ฐ ์์ ์ ์ค๋ ๋์ ๊ฒ์๋ฉ๋๋ค.
- ์์ ์ ์ค๋ ๋๋ TLS ์ฌ๋กฏ์์ ์ฝ๊ณ ๊ฑฐ๊ธฐ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์ค๋ ๋ ๋ก์ปฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ์์ต๋๋ค.
๋งค์ฐ ๊ฐ๋จํ๊ณ ๋ฏฟ์ ์ ์์ ์ ๋๋ก ๊ฐ๋ ฅํ ํจ๋ฌ๋ค์์ด์ง๋ง RCU(Read-Copy-Update) ์ฐจ๋จ ๊ฐ๋ ๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ์ ์ค๋ ๋๋ ์์ ์ด ์คํ๋๋ ๋์ TLS ์ฌ๋กฏ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณผ ์ ์์ต๋๋ค. ๋ณ๊ฒฝ์ ์์ ์ด๋ฒคํธ ์ฌ์ด์ ํด์ ๊ธฐ๊ฐ ๋์์๋ง ๋ฐ์ํฉ๋๋ค.
Envoy๋ ์ด๋ฅผ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
- ๊ฐ ์์ ์ ์ค๋ ๋์ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉด ์ฐจ๋จ ์์ด ๋ฐ์ดํฐ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- ๊ฐ ์์ ์ ์ค๋ ๋์์ ์ฝ๊ธฐ ์ ์ฉ ๋ชจ๋๋ก ์ ์ญ ๋ฐ์ดํฐ์ ๋ํ ๊ณต์ ํฌ์ธํฐ๋ฅผ ์ ์งํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ ์์ ์ ์ค๋ ๋์๋ ์์ ์ด ์คํ๋๋ ๋์ ๊ฐ์ํ ์ ์๋ ๋ฐ์ดํฐ ์ฐธ์กฐ ์๊ฐ ์์ต๋๋ค. ๋ชจ๋ ์์ ์๊ฐ ์ง์ ํ๊ณ ์๋ก์ด ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ก๋ํด์ผ๋ง ๊ธฐ์กด ๋ฐ์ดํฐ๊ฐ ํ๊ธฐ๋ฉ๋๋ค. ์ด๋ RCU์ ๋์ผํฉ๋๋ค.
ํด๋ฌ์คํฐ ์ ๋ฐ์ดํธ ์ค๋ ๋ฉ
์ด๋ฒ ์น์
์์๋ TLS(Thread Local Storage)๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช
ํฉ๋๋ค. ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ xDS API ๋ฐ/๋๋ DNS ์ฒ๋ฆฌ์ ์ํ ํ์ธ์ด ํฌํจ๋ฉ๋๋ค.
ํด๋ฌ์คํฐ ํ๋ฆ ๊ด๋ฆฌ์๋ ๋ค์ ๊ตฌ์ฑ ์์์ ๋จ๊ณ๊ฐ ํฌํจ๋ฉ๋๋ค.
- Cluster Manager๋ ์๋ ค์ง ๋ชจ๋ ํด๋ฌ์คํฐ ์ ์คํธ๋ฆผ, CDS(Cluster Discovery Service) API, SDS(Secret Discovery Service) ๋ฐ EDS(Endpoint Discovery Service) API, DNS ๋ฐ ํ์ฑ ์ธ๋ถ ๊ฒ์ฌ๋ฅผ ๊ด๋ฆฌํ๋ Envoy ๋ด์ ๊ตฌ์ฑ ์์์ ๋๋ค. ๊ฒ์๋ ํธ์คํธ์ ์ํ๋ฅผ ํฌํจํ๋ ๊ฐ ์ ์คํธ๋ฆผ ํด๋ฌ์คํฐ์ "์ต์ข ์ผ๊ด์ฑ" ๋ณด๊ธฐ๋ฅผ ์์ฑํ๋ ์ญํ ์ ๋ด๋นํฉ๋๋ค.
- ์ํ ๊ฒ์ฌ๊ธฐ๋ ํ์ฑ ์ํ ๊ฒ์ฌ๋ฅผ ์ํํ๊ณ ์ํ ๋ณ๊ฒฝ ์ฌํญ์ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์์ ๋ณด๊ณ ํฉ๋๋ค.
- CDS(Cluster Discovery Service) / SDS(Secret Discovery Service) / EDS(Endpoint Discovery Service) / DNS๋ฅผ ์ํํ์ฌ ํด๋ฌ์คํฐ ๋ฉค๋ฒ์ญ์ ํ์ธํฉ๋๋ค. ์ํ ๋ณ๊ฒฝ์ด ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ก ๋ฐํ๋ฉ๋๋ค.
- ๊ฐ ์์ ์ ์ค๋ ๋๋ ์ง์์ ์ผ๋ก ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์คํํฉ๋๋ค.
- ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ ํด๋ฌ์คํฐ ์ํ๊ฐ ๋ณ๊ฒฝ๋์์์ ํ์ธํ๋ฉด ํด๋ฌ์คํฐ ์ํ์ ๋ํ ์๋ก์ด ์ฝ๊ธฐ ์ ์ฉ ์ค๋ ์ท์ ์์ฑํ์ฌ ๊ฐ ์์ ์ ์ค๋ ๋๋ก ๋ณด๋ ๋๋ค.
- ๋ค์ ์กฐ์ฉํ ๊ธฐ๊ฐ ๋์ ์์ ์ ์ค๋ ๋๋ ํ ๋น๋ TLS ์ฌ๋กฏ์ ์ค๋ ์ท์ ์ ๋ฐ์ดํธํฉ๋๋ค.
- ๋ก๋ ๋ฐธ๋ฐ์ฑํ ํธ์คํธ๋ฅผ ๊ฒฐ์ ํด์ผ ํ๋ I/O ์ด๋ฒคํธ ๋์ ๋ก๋ ๋ฐธ๋ฐ์๋ ํธ์คํธ์ ๋ํ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด TLS(Thread local Storage) ์ฌ๋กฏ์ ์์ฒญํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ ๊ธ์ด ํ์ํ์ง ์์ต๋๋ค. ๋ํ TLS๋ ๋ก๋ ๋ฐธ๋ฐ์ ๋ฐ ๊ธฐํ ๊ตฌ์ฑ ์์๊ฐ ์บ์, ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฑ์ ๋ค์ ๊ณ์ฐํ ์ ์๋๋ก ์ ๋ฐ์ดํธ ์ด๋ฒคํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ ์๋ ์์ต๋๋ค. ์ด๋ ์ด ๊ฒ์๋ฌผ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง๋ง ์ฝ๋์ ๋ค์ํ ์์น์์ ์ฌ์ฉ๋ฉ๋๋ค.
์ ์ ์ฐจ๋ฅผ ์ฌ์ฉํ๋ฉด Envoy๋ ์ฐจ๋จ ์์ด ๋ชจ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค(์์์ ์ค๋ช ํ ๊ฒฝ์ฐ ์ ์ธ). TLS ์ฝ๋ ์์ฒด์ ๋ณต์ก์ฑ์ ์ ์ธํ๋ฉด ๋๋ถ๋ถ์ ์ฝ๋๋ ๋ฉํฐ์ค๋ ๋ฉ ์๋ ๋ฐฉ์์ ์ดํดํ ํ์๊ฐ ์์ผ๋ฉฐ ๋จ์ผ ์ค๋ ๋๋ก ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฑ๋ฅ์ด ํฅ์๋ ๋ฟ๋ง ์๋๋ผ ๋๋ถ๋ถ์ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
TLS๋ฅผ ์ฌ์ฉํ๋ ๊ธฐํ ํ์ ์์คํ
Envoy์์๋ TLS(Thread Local Storage) ๋ฐ RCU(Read Copy Update)๊ฐ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
์ฌ์ฉ ์ :
- ์คํ ์ค ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ๋ ๋ฉ์ปค๋์ฆ: ํ์ฌ ํ์ฑํ๋ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ๋ฉ์ธ ์ค๋ ๋์์ ๊ณ์ฐ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ฐ ์์ ์ ์ค๋ ๋์๋ RCU ์๋ฏธ ์ฒด๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๊ธฐ ์ ์ฉ ์ค๋ ์ท์ด ์ ๊ณต๋ฉ๋๋ค.
- ๋ผ์ฐํ ํ ์ด๋ธ ๊ต์ฒด: RDS(Route Discovery Service)์์ ์ ๊ณตํ๋ ๋ผ์ฐํ ํ ์ด๋ธ์ ๊ฒฝ์ฐ ๋ฉ์ธ ์ค๋ ๋์์ ๋ผ์ฐํ ํ ์ด๋ธ์ด ์์ฑ๋ฉ๋๋ค. ์ดํ์ ์ฝ๊ธฐ ์ ์ฉ ์ค๋ ์ท์ RCU(Read Copy Update) ์๋ฏธ ์ฒด๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์์ ์ ์ค๋ ๋์ ์ ๊ณต๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฒฝ๋ก ํ ์ด๋ธ์ ์์์ ์ผ๋ก ํจ์จ์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- HTTP ํค๋ ์บ์ฑ: ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ ์์ฒญ์ ๋ํ HTTP ํค๋๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์(์ฝ์ด๋น ~25K+ RPS๋ฅผ ์คํํ๋ ๋์) ์๋นํ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค. Envoy๋ ์ฝ XNUMX์ด๋ง๋ค ์ค์์์ ํค๋๋ฅผ ๊ณ์ฐํ๊ณ ์ด๋ฅผ TLS ๋ฐ RCU๋ฅผ ํตํด ๊ฐ ์์ ์์๊ฒ ์ ๊ณตํฉ๋๋ค.
๋ค๋ฅธ ๊ฒฝ์ฐ๋ ์์ง๋ง ์ด์ ์๋ TLS๊ฐ ์ฌ์ฉ๋๋ ์ฉ๋์ ๋ํ ์ข์ ์ดํด๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค.
์๋ ค์ง ์ฑ๋ฅ ๋ฌธ์
Envoy๋ ์ ๋ฐ์ ์ผ๋ก ๋งค์ฐ ์ฐ์ํ ์ฑ๋ฅ์ ๋ฐํํ์ง๋ง ๋งค์ฐ ๋์ ๋์์ฑ ๋ฐ ์ฒ๋ฆฌ๋๊ณผ ํจ๊ป ์ฌ์ฉ๋ ๋ ์ฃผ์๊ฐ ํ์ํ ๋ช ๊ฐ์ง ์ฃผ๋ชฉํ ๋งํ ์์ญ์ด ์์ต๋๋ค.
- ์ด ๋ฌธ์์ ์ค๋ช ๋ ๋๋ก ํ์ฌ ๋ชจ๋ ์์ ์ ์ค๋ ๋๋ ์ก์ธ์ค ๋ก๊ทธ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์ ์ธ ๋ ์ ๊ธ์ ํ๋ํฉ๋๋ค. ๋์ ๋์์ฑ๊ณผ ๋์ ์ฒ๋ฆฌ๋์์๋ ์ต์ข ํ์ผ์ ์ธ ๋ ์์๊ฐ ์๋ชป๋ ์ ๋ฌ์ ํฌ์ํ์ฌ ๊ฐ ์์ ์ ์ค๋ ๋์ ๋ํ ์ก์ธ์ค ๋ก๊ทธ๋ฅผ ์ผ๊ด ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ๋๋ ๊ฐ ์์ ์ ์ค๋ ๋์ ๋ํด ๋ณ๋์ ์ก์ธ์ค ๋ก๊ทธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ํต๊ณ๋ ๊ณ ๋๋ก ์ต์ ํ๋์ด ์์ง๋ง ๋์์ฑ ๋ฐ ์ฒ๋ฆฌ๋์ด ๋งค์ฐ ๋์ผ๋ฉด ๊ฐ๋ณ ํต๊ณ์ ๋ํ ์์์ ๊ฒฝํฉ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ค์ ์นด์ดํฐ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฌ์ค์ ํ๋ ์์ ์ ์ค๋ ๋๋น ์นด์ดํฐ์ ๋๋ค. ์ด์ ๋ํด์๋ ํ์ ๊ฒ์๋ฌผ์์ ๋ ผ์ํ๊ฒ ์ต๋๋ค.
- ์๋นํ ์ฒ๋ฆฌ ๋ฆฌ์์ค๊ฐ ํ์ํ ์ฐ๊ฒฐ์ด ๊ฑฐ์ ์๋ ์๋๋ฆฌ์ค์ Envoy๊ฐ ๋ฐฐํฌ๋ ๊ฒฝ์ฐ ํ์ฌ ์ํคํ ์ฒ๋ ์ ๋๋ก ์๋ํ์ง ์์ต๋๋ค. ์ฐ๊ฒฐ์ด ์์ ์ ์ค๋ ๋ ๊ฐ์ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐ๋๋ค๋ ๋ณด์ฅ์ ์์ต๋๋ค. ์ด๋ ์์ ์ ์ค๋ ๋ ๊ฐ ์ฐ๊ฒฐ ๊ตํ์ ํ์ฉํ๋ ์์ ์ ์ฐ๊ฒฐ ๊ท ํ ์กฐ์ ์ ๊ตฌํํ์ฌ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
Envoy์ ์ค๋ ๋ฉ ๋ชจ๋ธ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์ง ์์ผ๋ฉด ์ ์ฌ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ฐ๊ฒฐ์ด ๋ญ๋น๋๋ ๋์ ํ๋ก๊ทธ๋๋ฐ์ ์ฉ์ด์ฑ๊ณผ ๋๊ท๋ชจ ๋ณ๋ ฌ์ฑ์ ์ ๊ณตํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉด ๋งค์ฐ ๋์ ์ค๋ ๋ ์์ ์ฒ๋ฆฌ๋์์ ๋งค์ฐ ์ฐ์ํ ์ฑ๋ฅ์ ๋ฐํํ ์ ์์ต๋๋ค.
์ ๊ฐ Twitter์์ ๊ฐ๋ตํ๊ฒ ์ธ๊ธํ ๊ฒ์ฒ๋ผ ์ด ๋์์ธ์ DPDK(Data Plane Development Kit)์ ๊ฐ์ ์ ์ฒด ์ฌ์ฉ์ ๋ชจ๋ ๋คํธ์ํน ์คํ ์์์๋ ์คํ๋ ์ ์์ผ๋ฉฐ, ์ด๋ก ์ธํด ๊ธฐ์กด ์๋ฒ๋ ์ ์ฒด L7 ์ฒ๋ฆฌ๋ก ์ด๋น ์๋ฐฑ๋ง ๊ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์์ผ๋ก ๋ช ๋
์์ ๋ฌด์์ด ๋ง๋ค์ด์ง์ง ์ง์ผ๋ณด๋ ๊ฒ์ ๋งค์ฐ ํฅ๋ฏธ๋ก์ธ ๊ฒ์
๋๋ค.
๋ง์ง๋ง ๊ฐ๋จํ ์ค๋ช
: ์ Envoy๋ฅผ ์ํด C++๋ฅผ ์ ํํ๋์ง ์ฌ๋ฌ ๋ฒ ์ง๋ฌธ์ ๋ฐ์์ต๋๋ค. ๊ทธ ์ด์ ๋ ์ด ๊ฒ์๋ฌผ์ ์ค๋ช
๋ ์ํคํ
์ฒ๋ฅผ ๊ตฌ์ถํ ์ ์๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ ์ผํ ์ฐ์
์ฉ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์
๋๋ค. C++๋ ํ์คํ ๋ชจ๋ ํ๋ก์ ํธ ๋๋ ์ฌ์ง์ด ๋ง์ ํ๋ก์ ํธ์ ์ ํฉํ์ง ์์ง๋ง ํน์ ์ฌ์ฉ ์ฌ๋ก์์๋ ์ฌ์ ํ ์์
์ ์๋ฃํ๋ ์ ์ผํ ๋๊ตฌ์
๋๋ค.
์ฝ๋ ๋งํฌ
์ด ๊ฒ์๋ฌผ์์ ๋ ผ์๋ ์ธํฐํ์ด์ค ๋ฐ ํค๋ ๊ตฌํ์ด ํฌํจ๋ ํ์ผ์ ๋ํ ๋งํฌ:
github.com/lyft/envoy/blob/master/include/envoy/thread_local/thread_local.h github.com/lyft/envoy/blob/master/source/common/thread_local/thread_local_impl.h github.com/lyft/envoy/blob/master/include/envoy/upstream/cluster_manager.h github.com/lyft/envoy/blob/master/source/common/upstream/cluster_manager_impl.h
์ถ์ฒ : habr.com