[๋ฒˆ์—ญ] Envoy ์Šค๋ ˆ๋”ฉ ๋ชจ๋ธ

๊ธฐ์‚ฌ ๋ฒˆ์—ญ : Envoy ์Šค๋ ˆ๋”ฉ ๋ชจ๋ธ - https://blog.envoyproxy.io/envoy-threading-model-a8d44b922310

๋‚˜๋Š” ์ด ๊ธฐ์‚ฌ๊ฐ€ ๋งค์šฐ ํฅ๋ฏธ๋กญ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ Envoy๋Š” "istio"์˜ ์ผ๋ถ€๋กœ ๋˜๋Š” ๋‹จ์ˆœํžˆ kubernetes์˜ "์ˆ˜์‹  ์ปจํŠธ๋กค๋Ÿฌ"๋กœ ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ์˜ˆ๋ฅผ ๋“ค์–ด ์ผ๋ฐ˜์ ์ธ Envoy์™€ ๋™์ผํ•œ ์ง์ ‘์ ์ธ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Nginx ๋˜๋Š” Haproxy ์„ค์น˜. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๊ณ ์žฅ๋‚œ ๊ฒฝ์šฐ ๋‚ด๋ถ€์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํŠน์ˆ˜ ๋‹จ์–ด๋ฅผ ํฌํ•จํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์€ ๋‚ด์šฉ์„ ๋Ÿฌ์‹œ์•„์–ด๋กœ ๋ฒˆ์—ญํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์œผ๋ฉฐ, ์ด๊ฒƒ์„ ๋ณด๋Š” ๊ฒƒ์ด ๊ณ ํ†ต์Šค๋Ÿฝ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ถ„๋“ค์„ ์œ„ํ•ด ์›๋ฌธ์„ ๊ด„ํ˜ธ ์•ˆ์— ๋‚จ๊ฒจ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณ ์–‘์ด์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

Envoy ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๊ธฐ์ˆ  ๋ฌธ์„œ๋Š” ํ˜„์žฌ ๋งค์šฐ ๋“œ๋ฌผ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ €๋Š” 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 ํ”„๋กœ์„ธ์Šค ์ž์ฒด ๋‚ด์—์„œ ์ด๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์ž‘์—…์ž ์Šค๋ ˆ๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ „๋‹ฌ๊ณผ ๋น„๊ตํ•˜๋ฉด ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ทœ์น™์€ ๊ธฐ๋ณธ ์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ผ๋ถ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ํ•ด๋‹น ์ž‘์—…์˜ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๊ฐ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ๋Š” ๊ฐ ์•ก์„ธ์Šค์— ๋Œ€ํ•ด ์ž ๊ธˆ์„ ํš๋“ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค..

Envoy์˜ TLS(์Šค๋ ˆ๋“œ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€) ์‹œ์Šคํ…œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋Š” ์ „์ฒด ํ”„๋กœ์„ธ์Šค์— TLS ์Šฌ๋กฏ์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ถ”์ƒํ™”๋˜์–ด ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๋ฒกํ„ฐ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค์ด๋ฉฐ O(1) ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ์ž„์˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด๋‹น ์Šฌ๋กฏ์— ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ๋ฐ˜ ์ด๋ฒคํŠธ ๋ฃจํ”„ ์ด๋ฒคํŠธ๋กœ ๊ฐ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ์— ๊ฒŒ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ์ž‘์—…์ž ์Šค๋ ˆ๋“œ๋Š” TLS ์Šฌ๋กฏ์—์„œ ์ฝ๊ณ  ๊ฑฐ๊ธฐ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์Šค๋ ˆ๋“œ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ  ๋ฏฟ์„ ์ˆ˜ ์—†์„ ์ •๋„๋กœ ๊ฐ•๋ ฅํ•œ ํŒจ๋Ÿฌ๋‹ค์ž„์ด์ง€๋งŒ RCU(Read-Copy-Update) ์ฐจ๋‹จ ๊ฐœ๋…๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ๋Š” ์ž‘์—…์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ TLS ์Šฌ๋กฏ์˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ์€ ์ž‘์—… ์ด๋ฒคํŠธ ์‚ฌ์ด์˜ ํœด์‹ ๊ธฐ๊ฐ„ ๋™์•ˆ์—๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Envoy๋Š” ์ด๋ฅผ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ์— ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ์ฐจ๋‹จ ์—†์ด ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ์—์„œ ์ฝ๊ธฐ ์ „์šฉ ๋ชจ๋“œ๋กœ ์ „์—ญ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ณต์œ  ํฌ์ธํ„ฐ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ์—๋Š” ์ž‘์—…์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ฐ์†Œํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ ์ฐธ์กฐ ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ž‘์—…์ž๊ฐ€ ์ง„์ •ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋กœ๋“œํ•ด์•ผ๋งŒ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๊ฐ€ ํŒŒ๊ธฐ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” RCU์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ์—…๋ฐ์ดํŠธ ์Šค๋ ˆ๋”ฉ

์ด๋ฒˆ ์„น์…˜์—์„œ๋Š” TLS(Thread Local Storage)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์—๋Š” xDS API ๋ฐ/๋˜๋Š” DNS ์ฒ˜๋ฆฌ์™€ ์ƒํƒœ ํ™•์ธ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
[๋ฒˆ์—ญ] Envoy ์Šค๋ ˆ๋”ฉ ๋ชจ๋ธ

ํด๋Ÿฌ์Šคํ„ฐ ํ๋ฆ„ ๊ด€๋ฆฌ์—๋Š” ๋‹ค์Œ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋‹จ๊ณ„๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  1. Cluster Manager๋Š” ์•Œ๋ ค์ง„ ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ ์—…์ŠคํŠธ๋ฆผ, CDS(Cluster Discovery Service) API, SDS(Secret Discovery Service) ๋ฐ EDS(Endpoint Discovery Service) API, DNS ๋ฐ ํ™œ์„ฑ ์™ธ๋ถ€ ๊ฒ€์‚ฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Envoy ๋‚ด์˜ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰๋œ ํ˜ธ์ŠคํŠธ์™€ ์ƒํƒœ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ ์—…์ŠคํŠธ๋ฆผ ํด๋Ÿฌ์Šคํ„ฐ์˜ "์ตœ์ข… ์ผ๊ด€์„ฑ" ๋ณด๊ธฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  2. ์ƒํƒœ ๊ฒ€์‚ฌ๊ธฐ๋Š” ํ™œ์„ฑ ์ƒํƒœ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ƒํƒœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž์— ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.
  3. CDS(Cluster Discovery Service) / SDS(Secret Discovery Service) / EDS(Endpoint Discovery Service) / DNS๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ๋ฉค๋ฒ„์‹ญ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ ๋ณ€๊ฒฝ์ด ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
  4. ๊ฐ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ๋Š” ์ง€์†์ ์œผ๋กœ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ํ™•์ธํ•˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์ฝ๊ธฐ ์ „์šฉ ์Šค๋ƒ…์ƒท์„ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  6. ๋‹ค์Œ ์กฐ์šฉํ•œ ๊ธฐ๊ฐ„ ๋™์•ˆ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ๋Š” ํ• ๋‹น๋œ TLS ์Šฌ๋กฏ์˜ ์Šค๋ƒ…์ƒท์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  7. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑํ•  ํ˜ธ์ŠคํŠธ๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๋Š” 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++๋Š” ํ™•์‹คํžˆ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ๋˜๋Š” ์‹ฌ์ง€์–ด ๋งŽ์€ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•˜์ง€ ์•Š์ง€๋งŒ ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ์—ฌ์ „ํžˆ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š” ์œ ์ผํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ ๋งํฌ

์ด ๊ฒŒ์‹œ๋ฌผ์—์„œ ๋…ผ์˜๋œ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ํ—ค๋” ๊ตฌํ˜„์ด ํฌํ•จ๋œ ํŒŒ์ผ์— ๋Œ€ํ•œ ๋งํฌ:

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€