์ฃผ์ ๋ฆด๋ฆฌ์ค ๊ธฐ๋ฅ:
- ์๋ก์ด API ๋์
๋ฐ์ดํฐ ๊ณํ , REST Web API๋ฅผ ํตํด ์ฆ์ HAProxy ์ค์ ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํฌํจํ์ฌ ๋ฐฑ์๋์ ์๋ฒ๋ฅผ ๋์ ์ผ๋ก ์ถ๊ฐ ๋ฐ ์ ๊ฑฐํ๊ณ , ACL์ ์์ฑํ๊ณ , ์์ฒญ ๋ผ์ฐํ ์ ๋ณ๊ฒฝํ๊ณ , IP์ ๋ํ ํธ๋ค๋ฌ ๋ฐ์ธ๋ฉ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. - ๋ฉํฐ ์ฝ์ด CPU์์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด HAProxy์์ ์ฌ์ฉ๋๋ ์ค๋ ๋ ์๋ฅผ ๊ตฌ์ฑํ ์ ์๋ nbthread ์ง์์ด๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ์ ์ค๋ ๋ ์๋ ํ์ฌ ํ๊ฒฝ์์ ์ฌ์ฉ ๊ฐ๋ฅํ CPU ์ฝ์ด์ ๋ฐ๋ผ ์ ํ๋๋ฉฐ, ํด๋ผ์ฐ๋ ํ๊ฒฝ์์๋ ๊ธฐ๋ณธ๊ฐ์ด XNUMX๊ฐ ์ค๋ ๋์ ๋๋ค. ์๊ฒฉํ ์ ํ์ ์ค์ ํ๊ธฐ ์ํด ์ด์ ๋ธ๋ฆฌ ์ต์ MAX_THREADS ๋ฐ MAX_PROCS๊ฐ ์ถ๊ฐ๋์ด ์ค๋ ๋ ๋ฐ ํ๋ก์ธ์ค ์์ ์ํ์ ์ ํํฉ๋๋ค.
- ํธ๋ค๋ฌ๋ฅผ ๋คํธ์ํฌ ์ฃผ์์ ๋ฐ์ธ๋ฉํ๊ธฐ ์ํ ๋ฐ์ธ๋ฉ ์ง์๋ฌธ์ ์ฌ์ฉ์ด ๋จ์ํ๋์์ต๋๋ค. ์ค์ ์ ๋ ์ด์ ํ๋ก์ธ์ค ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ํ ํ์๊ฐ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๊ฒฐ์ ํ์ฑ ์ฐ๊ฒฐ ์์ ๋ฐ๋ผ ์ค๋ ๋ ๊ฐ์ ๋ถ์ฐ๋ฉ๋๋ค.
- ๊ฒฉ๋ฆฌ๋ ์ปจํ ์ด๋์์ ์คํํ ๋ ๋ก๊ทธ ์ค์ ์ด ๋จ์ํ๋์์ต๋๋ค. ์ด์ ๋ก๊ทธ๋ฅผ stdout ๋ฐ stderr๋ ๋ฌผ๋ก ๊ธฐ์กด ํ์ผ ์ค๋ช ์(์: "log fd@1 local0")๋ก ๋ณด๋ผ ์ ์์ต๋๋ค.
- HTX(Native HTTP Representation) ์ง์์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์๋ ํฌ ์๋ HTTP/2, ๋ ์ด์ด 7 ์ฌ์๋ ๋ฐ gRPC์ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋ ๊ท ํ์ ์ ์งํ ์ ์์ต๋๋ค. HTX๋ ํค๋๋ฅผ ์ ์๋ฆฌ์์ ๊ต์ฒดํ์ง ์์ง๋ง ๋ชฉ๋ก ๋์ ์ ํค๋๋ฅผ ์ ๊ฑฐํ๊ณ ์ถ๊ฐํ๋ ์์ ์ผ๋ก ์์ ์์ ์ ์ค์ ๋๋ค. ์ด๋ฅผ ํตํด HTTP ํ๋กํ ์ฝ์ ํ์ฅ๋ ๋ณํ์ ์กฐ์ํ ์ ์๊ณ ํค๋์ ์๋ ์๋ฏธ๋ฅผ ๋ณด์กดํ๋ฉฐ ๋ค์ ์์ ์ ์ํํ ์ ์์ต๋๋ค. HTTP/2๋ฅผ HTTP/1.1๋ก ๋๋ ๊ทธ ๋ฐ๋๋ก ๋ณํํ ๋ ๋ ๋์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๊ธฐ ์ํด
- ์๋ํฌ์๋ HTTP/2 ๋ชจ๋(ํ๋ก์์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ํธ์์ฉ๋ฟ๋ง ์๋๋ผ ๋ฐฑ์๋์ ๋ํ ํธ์ถ์ ํฌํจํ์ฌ HTTP/2์ ๋ชจ๋ ๋จ๊ณ ์ฒ๋ฆฌ)์ ๋ํ ๊ณต์ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- gRPC ํ๋กํ ์ฝ์ ์๋ฐฉํฅ ํ๋ก์์ ๋ํ ์์ ํ ์ง์์ gRPC ์คํธ๋ฆผ ๊ตฌ๋ฌธ ๋ถ์, ๊ฐ๋ณ ๋ฉ์์ง ๊ฐ์กฐ ํ์, ๋ก๊ทธ์ gRPC ํธ๋ํฝ ๋ฐ์, ACL์ ์ฌ์ฉํ์ฌ ๋ฉ์์ง ํํฐ๋ง ๊ธฐ๋ฅ์ ํตํด ๊ตฌํ๋์์ต๋๋ค. gRPC๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฒ์ฉ API๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก ์ํธ ์์ฉํ๋ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๋ง์ดํฌ๋ก์๋น์ค ์์ ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. gRPC์ ๋คํธ์ํฌ ํต์ ์ HTTP/2 ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋๋ฉฐ ๋ฐ์ดํฐ ์ง๋ ฌํ๋ฅผ ์ํ ํ๋กํ ์ฝ ๋ฒํผ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
- ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ค์ ๋ฌธ์ ์ ๊ด๋ จ๋์ง ์์ ์ํํธ์จ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ(์: ์๋ต์ด ์๊ฑฐ๋ ๋น ์๋ต์ด ์๋ ๊ฒฝ์ฐ) "๋ ์ด์ด 7 ์ฌ์๋" ๋ชจ๋์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. POST ์์ฒญ). ๋ชจ๋๋ฅผ ๋นํ์ฑํํ๊ธฐ ์ํด "http-request" ์ต์ ์ "disable-l7-retry" ํ๋๊ทธ๊ฐ ์ถ๊ฐ๋์์ผ๋ฉฐ, ๊ธฐ๋ณธ๊ฐ, ์์ ๋ฐ ๋ฐฑ์๋ ์น์ ์์ ๋ฏธ์ธ ์กฐ์ ์ ์ํด "retry-on" ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ฌ์ ์ก์๋ all-retryable-errors, none, conn-failure,empty-response,junk-response, response-timeout, 0rtt-rejected ๋ฐ ๋ฐํ ์ํ ์ฝ๋(404 ๋ฑ)์ ๋ํ ๋ฐ์ธ๋ฉ๊ณผ ๊ฐ์ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ;
- HAProxy์ฉ ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ถ ์คํ ํ์ผ ํธ์ถ์ ๊ตฌ์ฑํ ์ ์๋ ์๋ก์ด ํ๋ก์ธ์ค ๊ด๋ฆฌ์๊ฐ ๊ตฌํ๋์์ต๋๋ค.
์๋ฅผ ๋ค์ด Data Plan API(/usr/sbin/dataplaneapi)์ ๋ค์ํ Offload ์คํธ๋ฆผ ์ฒ๋ฆฌ ์์ง์ ์ด๋ฌํ ์ธ๋ถ ํธ๋ค๋ฌ์ ํํ๋ก ๊ตฌํ๋ฉ๋๋ค. - SPOE(์คํธ๋ฆผ ์ฒ๋ฆฌ ์คํ๋ก๋ ์์ง) ๋ฐ SPOP(์คํธ๋ฆผ ์ฒ๋ฆฌ ์คํ๋ก๋ ํ๋กํ ์ฝ) ํ์ฅ์ ๊ฐ๋ฐํ๊ธฐ ์ํด .NET Core, Go, Lua ๋ฐ Python์ ๋ํ ๋ฐ์ธ๋ฉ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด์ ์๋ ํ์ฅ ๊ฐ๋ฐ์ด C์์๋ง ์ง์๋์์ต๋๋ค.
- ๋ณ๋์ ์๋ฒ์ ์์ฒญ์ ๋ฏธ๋ฌ๋งํ๊ธฐ ์ํ ์ธ๋ถ spoa-mirror ์ฒ๋ฆฌ๊ธฐ(/usr/sbin/spoa-mirror)๋ฅผ ์ถ๊ฐํ์ต๋๋ค(์: ์ค์ ๋ถํ์์ ์คํ ํ๊ฒฝ์ ํ ์คํธํ๊ธฐ ์ํด ํ๋ก๋์ ํธ๋ํฝ์ ์ผ๋ถ๋ฅผ ๋ณต์ฌํ๊ธฐ ์ํด).
- ๋์
HAProxy Kubernetes ์์ ์ปจํธ๋กค๋ฌ Kubernetes ํ๋ซํผ๊ณผ์ ํตํฉ์ ๋ณด์ฅํฉ๋๋ค. - ๋ชจ๋ํฐ๋ง ์์คํ
์ผ๋ก ํต๊ณ๋ฅผ ๋ด๋ณด๋ด๊ธฐ ์ํ ๋ด์ฅ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
ํ๋ก ๋ฉํ ์ฐ์ค ; - HAProxy๋ฅผ ์คํํ๋ ๋ค๋ฅธ ๋ ธ๋์ ์ ๋ณด๋ฅผ ๊ตํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํผ์ด ํ๋กํ ์ฝ์ด ํ์ฅ๋์์ต๋๋ค. Heartbeat ๋ฐ ์ํธํ๋ ๋ฐ์ดํฐ ์ ์ก์ ๋ํ ์ถ๊ฐ ์ง์์ ํฌํจํฉ๋๋ค.
- "sample" ๋งค๊ฐ๋ณ์๊ฐ "log" ์ง์์ด์ ์ถ๊ฐ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ์์ฒญ์ ์ผ๋ถ(์: 1๊ฐ ์ค 10๊ฐ)๋ง ๋ก๊ทธ์ ๋คํํ์ฌ ๋ถ์ ์ํ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
- ์๋ ํ๋กํ์ผ๋ง ๋ชจ๋(auto, on ๋ฐ off ๊ฐ์ ์ทจํ ์ ์๋ profiling.tasks ์ง์์ด)๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ํ๊ท ๋๊ธฐ ์๊ฐ์ด 1000ms๋ฅผ ์ด๊ณผํ๋ฉด ์๋ ํ๋กํ์ผ๋ง์ด ํ์ฑํ๋ฉ๋๋ค. ํ๋กํ์ผ๋ง ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ธฐ ์ํด ๋ฐํ์ API์ "show profiling" ๋ช ๋ น์ด ์ถ๊ฐ๋์๊ฑฐ๋ ๋ก๊ทธ์ ๋ํ ํต๊ณ๋ฅผ ์ฌ์ค์ ํ ์ ์์ต๋๋ค.
- SOCKS4 ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ๋ฐฑ์๋ ์๋ฒ์ ์ก์ธ์คํ๊ธฐ ์ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ๋น ๋ฅด๊ฒ TCP ์ฐ๊ฒฐ์ ์ฌ๋ ๋ฉ์ปค๋์ฆ(TFO - TCP Fast Open, RFC 7413)์ ๋ํ ์๋ํฌ์๋ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ฅผ ํ๋์ ์์ฒญ์ผ๋ก ๊ฒฐํฉํ๊ณ ๋ ๋ฒ์งธ ๋จ๊ณ๋ฅผ ๊ฒฐํฉํ์ฌ ์ฐ๊ฒฐ ์ค์ ๋จ๊ณ ์๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ์ ํต์ ์ธ 3๋จ๊ณ ์ฐ๊ฒฐ ํ์ ํ๋ก์ธ์ค๋ฅผ ํตํด ์ฐ๊ฒฐ ์ค์ ์ด๊ธฐ ๋จ๊ณ์์ ๋ฐ์ดํฐ ์ ์ก์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์๋ก์ด ์์
์ด ์ถ๊ฐ๋์์ต๋๋ค:
- ์ ๊ท ํํ์์ ์ฌ์ฉํ์ฌ URL์ ๋ฐ๊พธ๋ ค๋ฉด "http-request replacement-uri";
- ํธ์คํธ ์ด๋ฆ์ ํ์ธํ๊ธฐ ์ํ "tcp-request content do-resolve" ๋ฐ "http-request do-resolve"
- "tcp-request content set-dst" ๋ฐ "tcp-request content set-dst-port"๋ ๋์ IP ์ฃผ์์ ํฌํธ๋ฅผ ๋์ฒดํฉ๋๋ค.
- ์๋ก์ด ๋ณํ ๋ชจ๋์ด ์ถ๊ฐ๋์์ต๋๋ค:
- AES128-GCM, AES192-GCM ๋ฐ AES256-GCM ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์คํธ๋ฆผ์ ํด๋ ํ๋ ๊ฒฝ์ฐ aes_gcm_dev
- ํ๋กํ ์ฝ ๋ฒํผ ๋ฉ์์ง์์ ํ๋๋ฅผ ์ถ์ถํ๋ protobuf;
- ungrpc๋ gRPC ๋ฉ์์ง์์ ํ๋๋ฅผ ์ถ์ถํฉ๋๋ค.
์ถ์ฒ : opennet.ru