์๋
ํ์ธ์, ์ ๋ Sergey Elantsev์
๋๋ค. ์ ๋ ๊ฐ๋ฐ์ ํ๊ณ ์์ต๋๋ค.
๋จผ์ ๋ช ๊ฐ์ง ์ฉ์ด๋ฅผ ์๊ฐํ๊ฒ ์ต๋๋ค.
- VIP(๊ฐ์ IP) - ๋ฐธ๋ฐ์ IP ์ฃผ์
- ์๋ฒ, ๋ฐฑ์๋, ์ธ์คํด์ค - ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๊ฐ์ ๋จธ์
- RIP(์ค์ IP) - ์๋ฒ IP ์ฃผ์
- ์ํ ํ์ธ - ์๋ฒ ์ค๋น ์ํ ํ์ธ
- ๊ฐ์ฉ ์์ญ, AZ - ๋ฐ์ดํฐ ์ผํฐ์ ๊ฒฉ๋ฆฌ๋ ์ธํ๋ผ
- ์ง์ญ - ๋ค์ํ AZ์ ํตํฉ
๋ก๋ ๋ฐธ๋ฐ์๋ XNUMX๊ฐ์ง ์ฃผ์ ์์ ์ ํด๊ฒฐํฉ๋๋ค. ์ฆ, ๋ฐธ๋ฐ์ฑ ์์ฒด๋ฅผ ์ํํ๊ณ ์๋น์ค์ ๋ด๊ฒฐํจ์ฑ์ ํฅ์ํ๋ฉฐ ํ์ฅ์ ๋จ์ํํฉ๋๋ค. ์๋ ํธ๋ํฝ ๊ด๋ฆฌ๋ฅผ ํตํด ๋ด๊ฒฐํจ์ฑ์ด ๋ณด์ฅ๋ฉ๋๋ค. ๋ฐธ๋ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ํ์ฑ ํ์ธ์ ํต๊ณผํ์ง ๋ชปํ ์ธ์คํด์ค๋ฅผ ๋ฐธ๋ฐ์ฑ์์ ์ ์ธํฉ๋๋ค. ์ธ์คํด์ค ์ ์ฒด์ ๋ก๋๋ฅผ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐํ๊ณ ์ธ์คํด์ค ๋ชฉ๋ก์ ์ฆ์ ์ ๋ฐ์ดํธํจ์ผ๋ก์จ ํ์ฅ์ด ๋ณด์ฅ๋ฉ๋๋ค. ๋ฐธ๋ฐ์ฑ์ด ์ถฉ๋ถํ ๊ท ์ผํ์ง ์์ผ๋ฉด ์ผ๋ถ ์ธ์คํด์ค๊ฐ ์ฉ๋ ์ ํ์ ์ด๊ณผํ๋ ๋ก๋๋ฅผ ๋ฐ๊ฒ ๋๋ฉฐ ์๋น์ค์ ์์ ์ฑ์ด ๋จ์ด์ง๋๋ค.
๋ก๋ ๋ฐธ๋ฐ์๋ ์คํ๋๋ OSI ๋ชจ๋ธ์ ํ๋กํ ์ฝ ๊ณ์ธต์ ๋ฐ๋ผ ๋ถ๋ฅ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. Cloud Balancer๋ ๋ค ๋ฒ์งธ ๊ณ์ธต์ธ L4์ ํด๋นํ๋ TCP ์์ค์์ ์๋ํฉ๋๋ค.
Cloud Balancer ์ํคํ ์ฒ์ ๊ฐ์๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค. ์ ์ฐจ์ ์ผ๋ก ๋ํ ์ผ์ ๋์ฌ๋ณด๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฐธ๋ฐ์ ๊ตฌ์ฑ ์์๋ฅผ ์ธ ๊ฐ์ง ํด๋์ค๋ก ๋๋๋๋ค. ๊ตฌ์ฑ ํ๋ฉด ํด๋์ค๋ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ๋ด๋นํ๊ณ ์์คํ ์ ๋์ ์ํ๋ฅผ ์ ์ฅํฉ๋๋ค. ์ ์ด ํ๋ ์ธ์ ์์คํ ์ ํ์ฌ ์ํ๋ฅผ ์ ์ฅํ๊ณ ํด๋ผ์ด์ธํธ์์ ์ธ์คํด์ค๋ก ํธ๋ํฝ์ ์ ๋ฌํ๋ ์ผ์ ์ง์ ๋ด๋นํ๋ ๋ฐ์ดํฐ ํ๋ ์ธ ํด๋์ค์ ์์คํ ์ ๊ด๋ฆฌํฉ๋๋ค.
๋ฐ์ดํฐ ํ๋ ์ธ
ํธ๋ํฝ์ ๋ณด๋ ๋ผ์ฐํฐ(Border Router)๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ณ ๊ฐ์ ์ฅ์น์์ ์ข ๋ฃ๋ฉ๋๋ค. ๋ด๊ฒฐํจ์ฑ์ ๋์ด๊ธฐ ์ํด ์ฌ๋ฌ ์ฅ์น๊ฐ ํ๋์ ๋ฐ์ดํฐ ์ผํฐ์์ ๋์์ ์๋ํฉ๋๋ค. ๋ค์์ผ๋ก ํธ๋ํฝ์ ํด๋ผ์ด์ธํธ์ฉ BGP๋ฅผ ํตํด ๋ชจ๋ AZ์ ์ ๋์บ์คํธ IP ์ฃผ์๋ฅผ ์๋ฆฌ๋ ๋ฐธ๋ฐ์๋ก ์ด๋ํฉ๋๋ค.
ํธ๋ํฝ์ ECMP๋ฅผ ํตํด ์ ์ก๋ฉ๋๋ค. ์ด๋ ๋์์ ๋ํด ๋์ผํ๊ฒ ์ํธํ ๊ฒฝ๋ก๊ฐ ์ฌ๋ฌ ๊ฐ ์์ ์ ์๊ณ (์ด ๊ฒฝ์ฐ ๋์์ ๋์ IP ์ฃผ์์) ํจํท์ด ๊ทธ ์ค ํ๋๋ฅผ ๋ฐ๋ผ ์ ์ก๋ ์ ์๋ ๋ผ์ฐํ
์ ๋ต์
๋๋ค. ๋ํ ๋ค์ ๊ตฌ์ฑํ์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ฉ์ฑ ์์ญ์์์ ์์
์ ์ง์ํฉ๋๋ค. ๊ฐ ์์ญ์ ์ฃผ์๋ฅผ ๊ด๊ณ ํ๊ณ ํธ๋ํฝ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฃผ์๋ก ์ด๋ํ๋ฉฐ ์ ํ์ ์ด๊ณผํ์ง ์์ต๋๋ค. ๋์ค์ ๊ฒ์๋ฌผ์์ ํธ๋ํฝ์ ์ด๋ค ์ผ์ด ์ผ์ด๋๋์ง ๋ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ตฌ์ฑ ํ๋ฉด
๊ตฌ์ฑ ํ๋ ์ธ์ ํต์ฌ ๊ตฌ์ฑ ์์๋ ๋ฐธ๋ฐ์๋ฅผ ์ฌ์ฉํ ๊ธฐ๋ณธ ์์
(์ธ์คํด์ค ์์ฑ, ์ญ์ , ๊ตฌ์ฑ ๋ณ๊ฒฝ, ์ํ ํ์ธ ๊ฒฐ๊ณผ ๊ฐ์ ธ์ค๊ธฐ ๋ฑ)์ด ์ํ๋๋ API์
๋๋ค. ํํธ์ผ๋ก ์ด๊ฒ์ REST API์ด๊ณ ๋ค๋ฅธ ํํธ์ผ๋ก๋ ๋ค๋ฅธ ํํธ, ํด๋ผ์ฐ๋์์๋ gRPC ํ๋ ์์ํฌ๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ฏ๋ก REST๋ฅผ gRPC๋ก "๋ณํ"ํ ๋ค์ gRPC๋ง ์ฌ์ฉํฉ๋๋ค. ๋ชจ๋ ์์ฒญ์ผ๋ก ์ธํด Yandex.Cloud ์์
์์ ๊ณตํต ํ์์ ์คํ๋๋ ์ผ๋ จ์ ๋น๋๊ธฐ ๋ฉฑ๋ฑ์ฑ ์์
์ด ์์ฑ๋ฉ๋๋ค. ์์
์ ์ธ์ ๋ ์ง ์ผ์ ์ค์งํ๋ค๊ฐ ๋ค์ ์์ํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์์ฑ๋ฉ๋๋ค. ์ด๋ ํ์ฅ์ฑ, ๋ฐ๋ณต์ฑ ๋ฐ ์์
๋ก๊น
์ ๋ณด์ฅํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก API์ ์์
์ Go๋ก ์์ฑ๋ ๋ฐธ๋ฐ์ ์๋น์ค ์ปจํธ๋กค๋ฌ์ ์์ฒญ์ ๋ณด๋
๋๋ค. ๋ฐธ๋ฐ์๋ฅผ ์ถ๊ฐ ๋ฐ ์ ๊ฑฐํ๊ณ ๋ฐฑ์๋ ๋ฐ ์ค์ ๊ตฌ์ฑ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์๋น์ค๋ ๊ณง ์ฌ์ฉํ ์ ์๋ ๋ถ์ฐ ๊ด๋ฆฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ Yandex ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ์ ์ฅํฉ๋๋ค. Yandex.Cloud์์๋ ์ด๋ฏธ ๊ทธ๋ฌ๋ฏ์ด
๋ฐธ๋ฐ์ ์ปจํธ๋กค๋ฌ๋ก ๋์๊ฐ ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ ์์ ์ ๋ฐธ๋ฐ์์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์ํ ํ์ธ ์ปจํธ๋กค๋ฌ์ ๊ฐ์ ๋จธ์ ์ ์ค๋น ์ํ๋ฅผ ํ์ธํ๋ ์์ ์ ๋ณด๋ด๋ ๊ฒ์ ๋๋ค.
์ํ ํ์ธ ์ปจํธ๋กค๋ฌ
๊ฒ์ฌ ๊ท์น ๋ณ๊ฒฝ ์์ฒญ์ ์์ ํ๊ณ ์ด๋ฅผ YDB์ ์ ์ฅํ๋ฉฐ healtcheck ๋ ธ๋์ ์์ ์ ๋ฐฐํฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ง๊ณํ ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ ๋ก๋ ๋ฐธ๋ฐ์ ์ปจํธ๋กค๋ฌ๋ก ์ ์กํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ฐ์ดํฐ ํ๋ ์ธ์ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ๋ก๋ ๋ฐธ๋ฐ์ ๋ ธ๋๋ก ๋ณ๊ฒฝํ๋ผ๋ ์์ฒญ์ ๋ณด๋ ๋๋ค. ์ด์ ๋ํด์๋ ์๋์์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
๊ฑด๊ฐ๊ฒ์ง์ ๋ํด ์ข ๋ ์ด์ผ๊ธฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ฌ๋ฌ ํด๋์ค๋ก ๋๋ ์ ์์ต๋๋ค. ๊ฐ์ฌ์๋ ๋ค์ํ ์ฑ๊ณต ๊ธฐ์ค์ด ์์ต๋๋ค. TCP ๊ฒ์ฌ๋ ๊ณ ์ ๋ ์๊ฐ ๋ด์ ์ฑ๊ณต์ ์ผ๋ก ์ฐ๊ฒฐ์ ์ค์ ํด์ผ ํฉ๋๋ค. HTTP ๊ฒ์ฌ์๋ ์ฑ๊ณต์ ์ธ ์ฐ๊ฒฐ๊ณผ 200 ์ํ ์ฝ๋์ ์๋ต์ด ๋ชจ๋ ํ์ํฉ๋๋ค.
๋ํ ์ํ๋ ํ๋ ๋ฑ๊ธ์ด ๋ค๋ฆ ๋๋ค. ์ฆ, ๋ฅ๋ํ๊ณผ ์๋ํ์ ๋๋ค. ํจ์๋ธ ๊ฒ์ฌ๋ ํน๋ณํ ์กฐ์น๋ฅผ ์ทจํ์ง ์๊ณ ํธ๋ํฝ์์ ๋ฐ์ํ๋ ์ํฉ์ ๊ฐ๋จํ ๋ชจ๋ํฐ๋งํฉ๋๋ค. ์ด๋ ์์ ์์ค ํ๋กํ ์ฝ์ ๋ ผ๋ฆฌ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ L4์์๋ ์ ์๋ํ์ง ์์ต๋๋ค. L4์์๋ ์์ ์ ๊ฑธ๋ฆฐ ์๊ฐ์ด๋ ์ฐ๊ฒฐ ์๋ฃ๊ฐ ์ข์์ง ๋์์ง์ ๋ํ ์ ๋ณด๊ฐ ์์ต๋๋ค. ํ์ฑ ๊ฒ์ฌ๋ฅผ ์ํด์๋ ๋ฐธ๋ฐ์๊ฐ ๊ฐ ์๋ฒ ์ธ์คํด์ค์ ์์ฒญ์ ๋ณด๋ด์ผ ํฉ๋๋ค.
๋๋ถ๋ถ์ ๋ก๋ ๋ฐธ๋ฐ์๋ ํ์ฑ ์ํ ๊ฒ์ฌ๋ฅผ ์์ฒด์ ์ผ๋ก ์ํํฉ๋๋ค. ํด๋ผ์ฐ๋์์๋ ํ์ฅ์ฑ์ ๋์ด๊ธฐ ์ํด ์์คํ ์ ์ด๋ฌํ ๋ถ๋ถ์ ๋ถ๋ฆฌํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์๋น์ค์ ๋ํ ์ํ ํ์ธ ์์ฒญ ์๋ฅผ ์ ์งํ๋ฉด์ ๋ฐธ๋ฐ์ ์๋ฅผ ๋๋ฆด ์ ์์ต๋๋ค. ๊ฒ์ฌ๋ ๊ฒ์ฌ ๋์์ด ๋ถํ ๋๊ณ ๋ณต์ ๋๋ ๋ณ๋์ ์ํ ๊ฒ์ฌ ๋ ธ๋์ ์ํด ์ํ๋ฉ๋๋ค. ํ ํธ์คํธ์์๋ ๊ฒ์ฌ๊ฐ ์คํจํ ์ ์์ผ๋ฏ๋ก ๊ฒ์ฌ๋ฅผ ์ํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ๋ ๊ทธ๊ฐ ํ์ธํ ์ธ์คํด์ค์ ์ํ๋ฅผ ์ป์ง ๋ชปํ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ต์ XNUMX๊ฐ ์ด์์ ์ํ ํ์ธ ๋ ธ๋์์ ๋ชจ๋ ์ธ์คํด์ค์ ๋ํ ํ์ธ์ ์ํํฉ๋๋ค. ์ผ๊ด๋ ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋ ธ๋ ๊ฐ ๊ฒ์ฌ ๋ชฉ์ ์ ๋ถํ ํฉ๋๋ค.
๋ฐธ๋ฐ์ฑ๊ณผ ์ํ ํ์ธ์ ๋ถ๋ฆฌํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. healthcheck ๋
ธ๋๊ฐ ๋ฐธ๋ฐ์(ํ์ฌ ํธ๋ํฝ์ ์ ๊ณตํ์ง ์๋)๋ฅผ ์ฐํํ์ฌ ์ธ์คํด์ค์ ์์ฒญํ๋ ๊ฒฝ์ฐ ์ด์ํ ์ํฉ์ด ๋ฐ์ํฉ๋๋ค. ๋ฆฌ์์ค๊ฐ ์ด์์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ํธ๋ํฝ์ด ๋ฆฌ์์ค์ ๋๋ฌํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด ๋ฌธ์ ๋ฅผ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํฉ๋๋ค. ์ฆ, ๋ฐธ๋ฐ์๋ฅผ ํตํด ์ํ ํ์ธ ํธ๋ํฝ์ ์์ํ๋๋ก ๋ณด์ฅ๋ฉ๋๋ค. ์ฆ, ํด๋ผ์ด์ธํธ์ ์ํ ํ์ธ์ ํธ๋ํฝ์ผ๋ก ํจํท์ ์ด๋ํ๋ ๋ฐฉ์์ ์ต์ํ์ผ๋ก ๋ค๋ฆ
๋๋ค. ๋ ๊ฒฝ์ฐ ๋ชจ๋ ํจํท์ ๋ฐธ๋ฐ์์ ๋๋ฌํ์ฌ ๋์ ๋ฆฌ์์ค๋ก ์ ๋ฌ๋ฉ๋๋ค.
์ฐจ์ด์ ์ ํด๋ผ์ด์ธํธ๊ฐ VIP์ ์์ฒญํ๋ ๋ฐ๋ฉด ์ํ ํ์ธ์ ๊ฐ ๊ฐ๋ณ RIP์ ์์ฒญํ๋ค๋ ๊ฒ์
๋๋ค. ์ฌ๊ธฐ์ ํฅ๋ฏธ๋ก์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ์ฉ์์๊ฒ ํ์ IP ๋คํธ์ํฌ์์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ ์ ์๋ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐธ๋ฐ์ ๋ค์ ์๋น์ค๋ฅผ ์จ๊ธด ๋ ๋ช
์ ์๋ก ๋ค๋ฅธ ํด๋ผ์ฐ๋ ์์ ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ฐ๊ฐ์ ์ฃผ์๊ฐ ๋์ผํ 10.0.0.1/24 ์๋ธ๋ท์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ฅผ ์ด๋ป๊ฒ๋ ๊ตฌ๋ณํ ์ ์์ด์ผ ํ๋ฉฐ ์ฌ๊ธฐ์ Yandex.Cloud ๊ฐ์ ๋คํธ์ํฌ์ ๊ตฌ์กฐ๋ฅผ ์์ธํ ์ดํด๋ด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์์ ์์๋ณด์๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค
์ํ ํ์ธ ๋ ธ๋๋ ์์ ์คIPv6 ์ฃผ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐธ๋ฐ์์ ์ ์ํฉ๋๋ค. ์ค์ฃผ์๋ IPv6 ์ฃผ์์ ์ฌ์ฉ์ ์๋ธ๋ท ID๊ฐ ๋ด๋ถ์ ํฌํจ๋ IPv4 ์ฃผ์์ ๋๋ค. ํธ๋ํฝ์ ๋ฐธ๋ฐ์์ ๋๋ฌํ์ฌ IPv4 ๋ฆฌ์์ค ์ฃผ์๋ฅผ ์ถ์ถํ๊ณ IPv6๋ฅผ IPv4๋ก ๋์ฒดํ ํ ํจํท์ ์ฌ์ฉ์ ๋คํธ์ํฌ๋ก ๋ณด๋ ๋๋ค.
์ญ๋ฐฉํฅ ํธ๋ํฝ๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์งํ๋ฉ๋๋ค. ๋ฐธ๋ฐ์๋ ๋์์ด ์ํ ๊ฒ์ฌ๊ธฐ์ ํ์ ๋คํธ์ํฌ์์ ํ์ธํ๊ณ IPv4๋ฅผ IPv6๋ก ๋ณํํฉ๋๋ค.
VPP - ๋ฐ์ดํฐ ํ๋ ์ธ์ ํต์ฌ
๋ฐธ๋ฐ์๋ ๋คํธ์ํฌ ํธ๋ํฝ ์ผ๊ด ์ฒ๋ฆฌ๋ฅผ ์ํ Cisco์ ํ๋ ์์ํฌ์ธ VPP(๋ฒกํฐ ํจํท ์ฒ๋ฆฌ) ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ฉ๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ํ๋ ์์ํฌ๋ ์ฌ์ฉ์ ๊ณต๊ฐ ๋คํธ์ํฌ ์ฅ์น ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ DPDK(Data Plane Development Kit) ์์์ ์๋ํฉ๋๋ค. ์ด๋ ๋์ ํจํท ์ฒ๋ฆฌ ์ฑ๋ฅ์ ๋ณด์ฅํฉ๋๋ค. ์ปค๋์์ ๋ฐ์ํ๋ ์ธํฐ๋ฝํธ๊ฐ ํจ์ฌ ์ ๊ณ ์ปค๋ ๊ณต๊ฐ๊ณผ ์ฌ์ฉ์ ๊ณต๊ฐ ์ฌ์ด์ ์ปจํ ์คํธ ์ ํ์ด ์์ต๋๋ค.
VPP๋ ๋ ๋์๊ฐ ํจํค์ง๋ฅผ ๋ฐฐ์น๋ก ๊ฒฐํฉํ์ฌ ์์คํ ์์ ๋ ๋ง์ ์ฑ๋ฅ์ ๋์ด๋ ๋๋ค. ์ฑ๋ฅ ํฅ์์ ์ต์ ํ๋ก์ธ์์์ ์บ์๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํจ์ผ๋ก์จ ๋ฐ์ํฉ๋๋ค. ๋ฐ์ดํฐ ์บ์(ํจํท์ "๋ฒกํฐ"๋ก ์ฒ๋ฆฌ๋๊ณ ๋ฐ์ดํฐ๋ ์๋ก ๊ฐ๊น์ต๋๋ค)์ ๋ช ๋ น ์บ์๊ฐ ๋ชจ๋ ์ฌ์ฉ๋ฉ๋๋ค. VPP์์ ํจํท ์ฒ๋ฆฌ๋ ๋์ผํ ์์ ์ ์ํํ๋ ๊ธฐ๋ฅ์ ํฌํจํ๋ ๋ ธ๋๊ฐ ์๋ ๊ทธ๋ํ๋ฅผ ๋ฐ๋ฆ ๋๋ค.
์๋ฅผ ๋ค์ด, VPP์์ IP ํจํท ์ฒ๋ฆฌ๋ ๋ค์ ์์๋ก ๋ฐ์ํฉ๋๋ค. ๋จผ์ ํจํท ํค๋๊ฐ ๊ตฌ๋ฌธ ๋ถ์ ๋ ธ๋์์ ๊ตฌ๋ฌธ ๋ถ์๋ ๋ค์ ๋ ธ๋๋ก ์ ์ก๋๊ณ , ๋ ธ๋๋ ๋ผ์ฐํ ํ ์ด๋ธ์ ๋ฐ๋ผ ํจํท์ ์ถ๊ฐ๋ก ์ ๋ฌํฉ๋๋ค.
์ฝ๊ฐ ํ๋ ์ฝ์ด. VPP ์์ฑ์๋ ํ๋ก์ธ์ ์บ์ ์ฌ์ฉ ์ ํํ์ ์ฉ๋ฉํ์ง ์์ผ๋ฏ๋ก ํจํท ๋ฒกํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ผ๋ฐ์ ์ธ ์ฝ๋์๋ ์๋ ๋ฒกํฐํ๊ฐ ํฌํจ๋ฉ๋๋ค. "ํ์ XNUMX๊ฐ์ ํจํท์ด ์์ต๋๋ค"์ ๊ฐ์ ์ํฉ์ด ์ฒ๋ฆฌ๋๋ ์ฒ๋ฆฌ ๋ฃจํ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ ์ฌ๋์๊ฒ๋ ๋์ผํ๊ณ , ๊ทธ๋ค์์๋ ํ ์ฌ๋์๊ฒ๋ ๋์ผํฉ๋๋ค. ํ๋ฆฌํ์น ๋ช ๋ น์ด๋ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ๋ก๋ํ์ฌ ํ์ ๋ฐ๋ณต์์ ์บ์์ ๋ํ ์ก์ธ์ค ์๋๋ฅผ ๋์ด๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
n_left_from = frame->n_vectors;
while (n_left_from > 0)
{
vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next);
// ...
while (n_left_from >= 4 && n_left_to_next >= 2)
{
// processing multiple packets at once
u32 next0 = SAMPLE_NEXT_INTERFACE_OUTPUT;
u32 next1 = SAMPLE_NEXT_INTERFACE_OUTPUT;
// ...
/* Prefetch next iteration. */
{
vlib_buffer_t *p2, *p3;
p2 = vlib_get_buffer (vm, from[2]);
p3 = vlib_get_buffer (vm, from[3]);
vlib_prefetch_buffer_header (p2, LOAD);
vlib_prefetch_buffer_header (p3, LOAD);
CLIB_PREFETCH (p2->data, CLIB_CACHE_LINE_BYTES, STORE);
CLIB_PREFETCH (p3->data, CLIB_CACHE_LINE_BYTES, STORE);
}
// actually process data
/* verify speculative enqueues, maybe switch current next frame */
vlib_validate_buffer_enqueue_x2 (vm, node, next_index,
to_next, n_left_to_next,
bi0, bi1, next0, next1);
}
while (n_left_from > 0 && n_left_to_next > 0)
{
// processing packets by one
}
// processed batch
vlib_put_next_frame (vm, node, next_index, n_left_to_next);
}
๋ฐ๋ผ์ ์ํ ํ์ธ์ IPv6๋ฅผ ํตํด VPP์ ํต์ ํ์ฌ VPP๋ฅผ IPv4๋ก ์ ํํฉ๋๋ค. ์ด๋ ์๊ณ ๋ฆฌ์ฆ NAT๋ผ๊ณ ํ๋ ๊ทธ๋ํ์ ๋ ธ๋์ ์ํด ์ํ๋ฉ๋๋ค. ์ญ๋ฐฉํฅ ํธ๋ํฝ(๋ฐ IPv6์์ IPv4๋ก์ ๋ณํ)์ ๊ฒฝ์ฐ ๋์ผํ ์๊ณ ๋ฆฌ์ฆ NAT ๋ ธ๋๊ฐ ์์ต๋๋ค.
๋ฐธ๋ฐ์ ํด๋ผ์ด์ธํธ์ ์ง์ ํธ๋ํฝ์ ๋ฐธ๋ฐ์ฑ ์์ฒด๋ฅผ ์ํํ๋ ๊ทธ๋ํ ๋
ธ๋๋ฅผ ํต๊ณผํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ๋
ธ๋๋ ๊ณ ์ ์ธ์
์
๋๋ค. ํด์๋ฅผ ์ ์ฅํฉ๋๋ค.
5ํํ ํด์๋ ํ์ ์ผ๊ด๋ ํด์ฑ ๋ ธ๋์์ ๋ ์ ์ ๊ณ์ฐ์ ์ํํ ๋ฟ๋ง ์๋๋ผ ๋ฐธ๋ฐ์ ๋ค์์ ๋ฆฌ์์ค ๋ชฉ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๋ ์ ์ฒ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ธ์ ์ด ์๋ ํจํท์ด ๋ฐธ๋ฐ์์ ๋์ฐฉํ๋ฉด ์ผ๊ด๋ ํด์ฑ ๋ ธ๋๋ก ์ ์ก๋ฉ๋๋ค. ์ฌ๊ธฐ์์ ์ผ๊ด๋ ํด์ฑ์ ์ฌ์ฉํ์ฌ ๊ท ํ์ด ์ด๋ฃจ์ด์ง๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ "๋ผ์ด๋ธ" ๋ฆฌ์์ค ๋ชฉ๋ก์์ ๋ฆฌ์์ค๋ฅผ ์ ํํฉ๋๋ค. ๋ค์์ผ๋ก, ํจํท์ ์ค์ ๋ก ๋์ ์ฃผ์๋ฅผ ๋์ฒดํ๊ณ ์ฒดํฌ์ฌ์ ๋ค์ ๊ณ์ฐํ๋ NAT ๋ ธ๋๋ก ์ ์ก๋ฉ๋๋ค. ๋ณด์๋ค์ํผ, ์ฐ๋ฆฌ๋ ํ๋ก์ธ์ ์บ์์ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด ๋น์ทํ ๊ณ์ฐ์ ๊ทธ๋ฃนํํ๋ '์ข์์'์ ๊ฐ์ VPP ๊ท์น์ ๋ฐ๋ฆ ๋๋ค.
์ผ๊ด๋ ํด์ฑ
์ฐ๋ฆฌ๋ ์ ๊ทธ๊ฒ์ ์ ํํ์ผ๋ฉฐ ๊ทธ๊ฒ์ ๋ฌด์์ ๋๊น? ๋จผ์ , ๋ชฉ๋ก์์ ๋ฆฌ์์ค๋ฅผ ์ ํํ๋ ์ด์ ์์ ์ ๊ณ ๋ คํด ๋ณด๊ฒ ์ต๋๋ค.
๋ถ์ผ์น ํด์ฑ์ ์ฌ์ฉํ๋ฉด ์์ ํจํท์ ํด์๊ฐ ๊ณ์ฐ๋๊ณ ์ด ํด์๋ฅผ ๋ฆฌ์์ค ์๋ก ๋๋ ๋๋จธ์ง๋ก ๋ชฉ๋ก์์ ๋ฆฌ์์ค๊ฐ ์ ํ๋ฉ๋๋ค. ๋ชฉ๋ก์ด ๋ณ๊ฒฝ๋์ง ์๋ ํ ์ด ์ฒด๊ณ๋ ์ ์๋ํฉ๋๋ค. ํญ์ ๋์ผํ 5-ํํ์ด ํฌํจ๋ ํจํท์ ๋์ผํ ์ธ์คํด์ค๋ก ๋ณด๋
๋๋ค. ์๋ฅผ ๋ค์ด ์ผ๋ถ ๋ฆฌ์์ค๊ฐ ์ํ ํ์ธ์ ๋ํ ์๋ต์ ์ค์งํ ๊ฒฝ์ฐ ํด์์ ์๋น ๋ถ๋ถ์ ๋ํ ์ ํ์ด ๋ณ๊ฒฝ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ์ TCP ์ฐ๊ฒฐ์ด ๋์ด์ง๋๋ค. ์ด์ ์ ์ธ์คํด์ค A์ ๋๋ฌํ ํจํท์ด ์ด ํจํท์ ์ธ์
์ ์ต์ํ์ง ์์ ์ธ์คํด์ค B์ ๋๋ฌํ๊ธฐ ์์ํ ์ ์์ต๋๋ค.
์ผ๊ด๋ ํด์ฑ์ ์ค๋ช ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ด ๊ฐ๋ ์ ์ค๋ช ํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ํด์๋ณ๋ก(์: IP:ํฌํธ๋ณ๋ก) ๋ฆฌ์์ค๋ฅผ ๋ฐฐํฌํ๋ ๋ง์ด ์๋ค๊ณ ์์ํด ๋ณด์ธ์. ๋ฆฌ์์ค๋ฅผ ์ ํํ๋ ๊ฒ์ ํจํท์ ํด์์ ์ํด ๊ฒฐ์ ๋๋ ๊ฐ๋์ ๋ฐ๋ผ ํ ์ ๋๋ฆฌ๋ ๊ฒ์ ๋๋ค.
์ด๋ ๋ฆฌ์์ค ๊ตฌ์ฑ์ด ๋ณ๊ฒฝ๋ ๋ ํธ๋ํฝ ์ฌ๋ถ๋ฐฐ๋ฅผ ์ต์ํํฉ๋๋ค. ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๋ฉด ํด๋น ๋ฆฌ์์ค๊ฐ ์๋ ์ผ๊ด๋ ํด์ฑ ๋ง ๋ถ๋ถ์๋ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฐฐํฌ๋ ๋ณ๊ฒฝ๋์ง๋ง ์ด๋ฏธ ์ค์ ๋ ์ธ์
์ ์ ๋ฆฌ์์ค๋ก ์ ํํ ์ ์๋ ๊ณ ์ ์ธ์
๋
ธ๋๊ฐ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ฐธ๋ฐ์์ ๋ฆฌ์์ค ๊ฐ์ ์ง์ ์ ์ธ ํธ๋ํฝ์ ์ด๋ค ์ผ์ด ์ผ์ด๋๋์ง ์ดํด๋ณด์์ต๋๋ค. ์ด์ ๋ฐํ ํธ๋ํฝ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ด๋ ํธ๋ํฝ ํ์ธ๊ณผ ๋์ผํ ํจํด์ ๋ฐ๋ฆ ๋๋ค. ์ฆ, ์๊ณ ๋ฆฌ์ฆ NAT๋ฅผ ํตํด, ์ฆ ํด๋ผ์ด์ธํธ ํธ๋ํฝ์ ๊ฒฝ์ฐ ์ญ๋ฐฉํฅ NAT 44๋ฅผ ํตํด, ์ํ ํ์ธ ํธ๋ํฝ์ ๊ฒฝ์ฐ NAT 46์ ํตํด ์ํ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ์์ฒด ๊ณํ์ ๊ณ ์ํฉ๋๋ค. ์ํ ํ์ธ ํธ๋ํฝ๊ณผ ์ค์ ์ฌ์ฉ์ ํธ๋ํฝ์ ํตํฉํฉ๋๋ค.
๋ก๋๋ฐธ๋ฐ์ ๋ ธ๋ ๋ฐ ์กฐ๋ฆฝ๋ ๊ตฌ์ฑ์์
VPP์ ๋ฐธ๋ฐ์ ๋ฐ ๋ฆฌ์์ค ๊ตฌ์ฑ์ ๋ก์ปฌ ์๋น์ค์ธ loadbalancer-node์ ์ํด ๋ณด๊ณ ๋ฉ๋๋ค. ์ด๋ ๋ก๋ ๋ฐธ๋ฐ์-์ปจํธ๋กค๋ฌ์ ์ด๋ฒคํธ ์คํธ๋ฆผ์ ๊ตฌ๋ ํ๊ณ ํ์ฌ VPP ์ํ์ ์ปจํธ๋กค๋ฌ์์ ์์ ํ ๋์ ์ํ ๊ฐ์ ์ฐจ์ด๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ์ํ ์์คํ ์ ์ป์ต๋๋ค. API์ ์ด๋ฒคํธ๊ฐ ๋ฐธ๋ฐ์ ์ปจํธ๋กค๋ฌ๋ก ์ ๋ฌ๋์ด ๋ฆฌ์์ค์ "ํ์ฑ"์ ํ์ธํ๊ธฐ ์ํด ์ํ ํ์ธ ์ปจํธ๋กค๋ฌ์ ์์ ์ ํ ๋นํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ healthcheck ๋ ธ๋์ ์์ ์ ํ ๋นํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ง๊ณํ ํ ๋ค์ ๋ฐธ๋ฐ์ ์ปจํธ๋กค๋ฌ๋ก ๋ณด๋ ๋๋ค. Loadbalancer-node๋ ์ปจํธ๋กค๋ฌ์ ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ ํ๊ณ VPP์ ์ํ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ์ด๋ฌํ ์์คํ ์์ ๊ฐ ์๋น์ค๋ ์ธ์ ์๋น์ค์ ๋ํด ํ์ํ ๊ฒ๋ง ์๊ณ ์์ต๋๋ค. ์ฐ๊ฒฐ ์๋ ์ ํ๋์ด ์์ผ๋ฉฐ ๋ค์ํ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ์ด์ํ๊ณ ํ์ฅํ ์ ์์ต๋๋ค.
์ด๋ค ๋ฌธ์ ๋ฅผ ํผํ ์ ์์๋์?
์ปจํธ๋กค ํ๋ ์ธ์ ๋ชจ๋ ์๋น์ค๋ Go๋ก ์์ฑ๋์์ผ๋ฉฐ ์ฐ์ํ ํ์ฅ์ฑ ๋ฐ ์์ ์ฑ ํน์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. Go์๋ ๋ถ์ฐ ์์คํ ๊ตฌ์ถ์ ์ํ ๋ง์ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ GRPC๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๋ชจ๋ ๊ตฌ์ฑ ์์์๋ ์๋น์ค ๊ฒ์์ ์คํ ์์ค ๊ตฌํ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ฐ๋ฆฌ ์๋น์ค๋ ์๋ก์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๊ณ ๊ตฌ์ฑ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ์ด๋ฅผ GRPC ๋ฐธ๋ฐ์ฑ๊ณผ ์ฐ๊ฒฐํ์ต๋๋ค. ์ธก์ ํญ๋ชฉ์ ๊ฒฝ์ฐ ์คํ ์์ค ์๋ฃจ์ ๋ ์ฌ์ฉํฉ๋๋ค. ๋ฐ์ดํฐ ํ๋ ์ธ์์๋ ๊ด์ฐฎ์ ์ฑ๋ฅ๊ณผ ๋๊ท๋ชจ ๋ฆฌ์์ค ๋ณด์ ๋์ ์ป์์ต๋๋ค. ์ฒ ์ ๋คํธ์ํฌ ์นด๋๊ฐ ์๋ VPP์ ์ฑ๋ฅ์ ์์กดํ ์ ์๋ ์คํ ๋๋ฅผ ์กฐ๋ฆฝํ๋ ๊ฒ์ด ๋งค์ฐ ์ด๋ ค์ ์ต๋๋ค.
๋ฌธ์ ๋ฐ ํด๊ฒฐ์ฑ
๋ฌด์์ด ๊ทธ๋ ๊ฒ ์ ๋์ง ์์๋์? Go์๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ด ์์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๋์๋ ์ฌ์ ํ ๋ฐ์ํฉ๋๋ค. ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๊ณ ๋ฃจํด์ ์คํํ๊ณ ์ด๋ฅผ ์ข ๋ฃํ๋ ๊ฒ์ ๊ธฐ์ตํ๋ ๊ฒ์ ๋๋ค. ์์ : Go ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ดํด๋ณด์ธ์. ์ข ์ข ์ข์ ์งํ๋ ๊ณ ๋ฃจํด์ ์์ ๋๋ค. ์ด ์ด์ผ๊ธฐ์๋ ์ฅ์ ์ด ์์ต๋๋ค. Go์์๋ ๋ฉ๋ชจ๋ฆฌ ์๋น, ์คํ ์ค์ธ ๊ณ ๋ฃจํด ์ ๋ฐ ๊ธฐํ ์ฌ๋ฌ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ๋ฐํ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ป์ ์ ์์ต๋๋ค.
๋ํ Go๋ ๊ธฐ๋ฅ ํ ์คํธ์ ๊ฐ์ฅ ์ ํฉํ ์ ํ์ด ์๋ ์๋ ์์ต๋๋ค. ์ด๋ ๋งค์ฐ ์ฅํฉํ๋ฉฐ "CI์ ๋ชจ๋ ๊ฒ์ ์ผ๊ด ์คํ"ํ๋ ํ์ค ์ ๊ทผ ๋ฐฉ์์ ๊ทธ๋ค์ง ์ ํฉํ์ง ์์ต๋๋ค. ์ฌ์ค ๊ธฐ๋ฅ ํ ์คํธ๋ ๋ฆฌ์์ค๋ฅผ ๋ ๋ง์ด ์๊ตฌํ๊ณ ์ค์ ์๊ฐ ์ด๊ณผ๋ฅผ ์ ๋ฐํฉ๋๋ค. ์ด๋ก ์ธํด CPU๊ฐ ๋จ์ ํ ์คํธ๋ก ๋ฐ์๊ธฐ ๋๋ฌธ์ ํ ์คํธ๊ฐ ์คํจํ ์ ์์ต๋๋ค. ๊ฒฐ๋ก : ๊ฐ๋ฅํ๋ค๋ฉด ๋จ์ ํ ์คํธ์ ๋ณ๋๋ก "๋ฌด๊ฑฐ์ด" ํ ์คํธ๋ฅผ ์ํํ์ญ์์ค.
๋ง์ดํฌ๋ก์๋น์ค ์ด๋ฒคํธ ์ํคํ ์ฒ๋ ๋ชจ๋๋ฆฌ์ค๋ณด๋ค ๋ ๋ณต์กํฉ๋๋ค. ์์ญ ๊ฐ์ ์๋ก ๋ค๋ฅธ ์์คํ ์์ ๋ก๊ทธ๋ฅผ ์์งํ๋ ๊ฒ์ ๊ทธ๋ค์ง ํธ๋ฆฌํ์ง ์์ต๋๋ค. ๊ฒฐ๋ก : ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๋ง๋ ๋ค๋ฉด ์ฆ์ ์ถ์ ์ ๋ํด ์๊ฐํด ๋ณด์ธ์.
์ฐ๋ฆฌ์ ๊ณํ
์ฐ๋ฆฌ๋ ๋ด๋ถ ๋ฐธ๋ฐ์์ธ IPv6 ๋ฐธ๋ฐ์๋ฅผ ์ถ์ํ๊ณ , Kubernetes ์คํฌ๋ฆฝํธ์ ๋ํ ์ง์์ ์ถ๊ฐํ๊ณ , ์๋น์ค๋ฅผ ๊ณ์ ์ค๋ฉํ๊ณ (ํ์ฌ healthcheck-node ๋ฐ healthcheck-ctrl๋ง ์ค๋ฉ๋จ), ์๋ก์ด ์ํ ํ์ธ์ ์ถ๊ฐํ๊ณ , ๊ฒ์ฌ์ ์ค๋งํธ ์ง๊ณ๋ ๊ตฌํํ ๊ฒ์
๋๋ค. ์ฐ๋ฆฌ๋ ์๋น์ค๊ฐ ์๋ก ์ง์ ์ ์ผ๋ก ํต์ ํ์ง ์๊ณ ๋ฉ์์ง ๋๊ธฐ์ด์ ์ฌ์ฉํ์ฌ ํต์ ํ ์ ์๋๋ก ์๋น์ค๋ฅผ ๋์ฑ ๋
๋ฆฝ์ ์ผ๋ก ๋ง๋ค ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํ๊ณ ์์ต๋๋ค. SQS ํธํ ์๋น์ค๊ฐ ์ต๊ทผ ํด๋ผ์ฐ๋์ ๋ฑ์ฅํ์ต๋๋ค.
์ต๊ทผ Yandex Load Balancer๊ฐ ๊ณต๊ฐ ์ถ์๋์์ต๋๋ค. ํ๊ตฌํ๋ค
์ถ์ฒ : habr.com