Productionizing LLM Gateways: Architecture, Tradeoffs and Hard Lessons โ Kanish Manuja, Twilio
ํ ์ค ํต์ฌ
LLM ๊ฒ์ดํธ์จ์ด๋ ๋จ์ํ ์ค๊ณ๊ธฐ๊ฐ ์๋๋ผ ๊ฐ์ฉ์ฑยท์ง์ฐ์๊ฐยท๊ฐ๋๋ ์ผยท๋น์ฉ์ ๋์์ ๋ค๋ฃจ๋ ์ ์ด๋ฉด์ด๋ฏ๋ก, ๊ฐ ์ฌ์ฉ ์ฌ๋ก์ ๋ง๊ฒ ์คํจ ์ ์ฑ ๊ณผ ์ฐ์ ์์๋ฅผ ๋ช ์์ ์ผ๋ก ์ค๊ณํด์ผ ํ๋ค.
์๊ฐ๋ณ ์์ฝ
-
0:00
๋ฉ์์ง ๋๋จธ์ ์์คํ ๋ชจ๋ธ ์ ๊ณต์๊ฐ ๋ค์ด๋ผ๋ "Something went wrong" ๋ฉ์์ง๋ฅผ ๋ด๋ณด๋ด๋ ๋ค์๋ ๋ณต์กํ ๊ฒ์ดํธ์จ์ด ์์คํ ์ด ์์ผ๋ฉฐ, ์ด๋ ์ฑ๊ณผ ๋ชจ๋ธ ์ ๊ณต์ ์ฌ์ด์์ ๋ผ์ฐํ ยท์ธ์ฆยทfallbackยทrate limitยท๊ฑฐ๋ฒ๋์ค๋ฅผ ๋ด๋นํ๋ค. ํต์ฌ์ LLM ๊ฒ์ดํธ์จ์ด์์ ๊ฐ์ฉ์ฑ, ์ง์ฐ์๊ฐ, ๊ฐ๋๋ ์ผ, ๋น์ฉ์ ๋์์ ์ต๋ํํ ์ ์๋ค๋ ์ ์ด๋ค.
-
1:21
๋์์ ์ต๋๋ก ๋ง๋ค ์ ์๋ ๋ค ๊ฐ์ง ๋จ์ผ ๋ชจ๋ธ ์ ๊ณต์๋ฅผ ์ฐ๋ฉด ๊ทธ ์ ๊ณต์์ ์ฅ์ ๊ฐ ๊ณง ์๋น์ค ์ฅ์ ๊ฐ ๋๋ฏ๋ก, ๊ฒ์ดํธ์จ์ด๋ ์ฌ์ฉ ์ฌ๋ก๋ณ๋ก ๋ฌด์์ ์ฐ์ ํ ์ง ์ ํด์ผ ํ๋ค. ๋ํ ๊ฒ์ดํธ์จ์ด๋ฅผ ๋ง๋๋ ์ชฝ์ ํธ์ถ์์ ๊ณ ๊ฐ์ด ์ด ํธ๋ ์ด๋์คํ๋ฅผ ์กฐ์ ํ ์ ์๋๋ก ์ ํ์ง๋ฅผ ์ ๊ณตํด์ผ ํ๋ค.
-
2:33
์ฌ์๋์ ์ํท ๋ธ๋ ์ด์ปค๊ฐ ํตํ์ง ์๋ ์ด์ LLM API๋ ๋๋ฆฌ๊ณ ๋น์ธ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ API์ฒ๋ผ ๋ฌด์์ ์ฌ์๋ํ๋ฉด ์ง์ฐ์๊ฐ ์์ฐ๊ณผ ๋น์ฉ์ด ๋น ๋ฅด๊ฒ ์์ง๋๋ค. ๋ค๋ฅธ ์ ๊ณต์๊ฐ ๋ฉ์ฉกํ ๋ ์ํท ๋ธ๋ ์ด์ปค๋ง ํธ๋ฆฝํ๋ ๊ฒ๋ ์ ์ ํ์ง ์์ผ๋ฉฐ, ๋์ ์์ฒญ ๋จ์์ fallback์ด๋ ๋ณ๋ ฌ ํธ์ถ ๊ฐ์ ์ ๋ต์ ๊ณ ๋ คํด์ผ ํ๋ค.
-
3:39
์์ฒญ๋ณ fallback๊ณผ ์คํจ ์นด์ดํธ์ ์์น primary๊ฐ ๊ณ์ ์คํจํ๋ฉด ์ผ์ ์๊ฐ ๋์ ์์ฒญ ๊ฒฝ๋ก์์ ๋นผ๊ณ cooldown ํ ๋ค์ ๋ฃ๋ ๋ฐฉ์์ด ์ ํจํ๋ค. ์คํจ ์นด์ดํธ๋ฅผ ์ธ์คํด์ค ๋ก์ปฌ์ ๋์ง, fleet ์ ์ฒด๊ฐ ๊ณต์ ํ๋ ์ธํ๋ผ์ ๋์ง์ ๋ฐ๋ผ failover ์๋์ ๋ฐฐํฌ ๊ท๋ชจ ๋ณ๊ฒฝ ์์ ๋์์ด ๋ฌ๋ผ์ง๋ค.
-
4:49
fallback์ ํฌ๋ช ํ์ง ์๋ค OpenAI API ํธํ ํ์์ด ๋๋ฆฌ ํผ์ก๋๋ผ๋ tool calling schema, token limit, stop reason ๊ฐ์ ๋ฏธ๋ฌํ ์ฐจ์ด ๋๋ฌธ์ fallback์ ๊ทธ๋๋ก ๋ฏฟ์ ์ ์๋ค. ์คํธ๋ฆฌ๋ฐ์ ์ฌ์ฉ์ ๊ฒฝํ์๋ ์ข์ง๋ง ํ ๋ฒ provider A๋ก ๋ณด๋ด๊ธฐ ์์ํ๋ฉด ์ค๊ฐ์ provider๋ฅผ ๋ฐ๊ฟ ์ ์์ผ๋ฏ๋ก ์ ์ฐ์ฑ์ ์๋ ๋๊ฐ๊ฐ ๋ฐ๋ฅธ๋ค.
-
5:55
๋ฐฑ์ ์ ๊ณต์์ ๋ ๋ง์ ์ฌ์ ๋ฅผ ์ค์ผ ํ๋ค fallback provider๋ ๋ง์ง๋ง ๋ฐฉ์ด์ ์ด๋ฏ๋ก primary๋ณด๋ค ๋ ๋์ throughput๊ณผ headroom์ ํ๋ณดํด์ผ ํ๋ค. ์ง์ฐ์๊ฐ ๋ฌธ์ ๋ ์กฐ์ฉํ ์๋น์ค ํ์ง์ ๊ฐ์๋จน๊ธฐ ๋๋ฌธ์, ๋จ์ ๊ฐ์ฉ์ฑ๋ณด๋ค ๋ ์ ๊ทน์ ์ผ๋ก ๊ด๋ฆฌํด์ผ ํ๋ค.
-
7:08
ํผํฉ ์ํฌ๋ก๋์ ํ๊ท ์ง์ฐ์๊ฐ์ ์ฐฉ์ embedding, classification, chat, reasoning์ฒ๋ผ ์ฑ๊ฒฉ์ด ๋ค๋ฅธ ์์ฒญ์ด ์์ธ ๊ฒ์ดํธ์จ์ด์์๋ ์ ์ฒด ํ๊ท ์ง์ฐ์๊ฐ์ด ์๋ฏธ๊ฐ ์๋ค. P99๋ ๋ชจ๋ธ๋ณยทroute๋ณ๋ก ์ถ์ ํด์ผ ํ๋ฉฐ, ๊ฐ model class์ route์ timeout์ ๋ฐ๋์ ์ค์ ํ์ง ์์ผ๋ฉด ์กฐ์ฉํ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ค.
-
8:17
Reasoning๊ณผ router ๋ชจ๋ธ, 2์ด์์ 60์ด๊น์ง reasoning model์ ๋น๊ฒฐ์ ์ฑ์ด ์ปค์ ๊ฐ์ ํ๋กฌํํธ๋ 2์ด์์ 60์ด๊น์ง ํ๋ค๋ฆด ์ ์๊ณ , router model์ ์ด๋ค ๋ชจ๋ธ์ ์ผ๋์ง ๋ค์์ ์จ๊ธฐ๊ธฐ ๋๋ฌธ์ ์์ธก์ด ๋ ์ด๋ ต๋ค. ์ต์ํ route๋ณ reasoning ์์ค์ ๊ณ ์ ํ๊ณ , ๊ฐ๋ฅํ ํ ์์ฒญ์ ๊ฒฐ์ ์ ์ผ๋ก ๋ง๋๋ ๋ฐฉํฅ์ผ๋ก ์ด์ํด์ผ ํ๋ค.
-
9:28
๊ผฌ๋ฆฌ ์ง์ฐ์๊ฐ์ ํค์งํ๊ธฐ primary ์์ฒญ์ด P90 ์ ๋์ ์ง์ฐ ์์ฐ์ ์๋ชจํ๋ฉด ๋ค๋ฅธ ์์ฒญ์ ์ถ๊ฐ๋ก ๋ฐ์ฌํ๋ hedging์ผ๋ก P99 ๊ผฌ๋ฆฌ๋ฅผ ์ค์ผ ์ ์๋ค. ๊ฐ๋๋ ์ผ์ ํ๋กฌํํธ ์ธ์ ์ , PII, ๋ ์ฑ ํํฐ๋ง์ ํ์ํ์ง๋ง, ๋ค๋ฅธ ์๋น์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฅ์ ๊ฐ ๋ ์ ์์ผ๋ฏ๋ก fail open๊ณผ fail closed ์ค ๋ฌด์์ด ๋ ๋์์ง ๋จผ์ ์ ํด์ผ ํ๋ค.
-
10:40
์ด๋ฆฐ ์คํจ์ ๋ซํ ์คํจ์ ๊ฐ๋๋ ์ผ ๊ฐ๋๋ ์ผ์ด ๋ด๋ ค๊ฐ์ ๋๋ ์๋น์ค๋ฅผ ๊ณ์ํ ์ง, ์๋๋ฉด ์์ฒญ์ ๋ง์์ง๋ use case์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฉฐ ์ ๋ต์ ํ๋๊ฐ ์๋๋ค. ์ด๋ค ๊ฒฝ์ฐ๋ ๊ฐ๋๋ ์ผ์ ์์ฒญ ์๊ฐ์ ์ง๋ฐฐํ์ง ์๋๋ก ๋ณ๋ time budget๊ณผ timeout์ ๊ฐ์ ธ์ผ ํ๊ณ , fallback๊ณผ cache decision๋ ๊ณ ๋ คํด์ผ ํ๋ค.
-
11:53
์๊ฐ ์์ฐ, fallback, ๋ฐฐ์น ์์น ๊ฐ๋๋ ์ผ์ ์ ๋ ฅ์ ๋จผ์ ์ ์ฉํ๋ pre-hook, ๋ณ๋ ฌ ์คํ, ์ถ๋ ฅ ์ดํ์ ์ ์ฉํ๋ post-hook์ผ๋ก ๋ฐฐ์นํ ์ ์๋ค. pre-hook์ ๊ฐ์ฅ ์์ ํ์ง๋ง ์ง์ฐ์๊ฐ์ด ๋๊ณ , structured output์์๋ ๋ณ๋ ฌ ์คํ์ด ํนํ ์ ์ฉํ๋ฉฐ, post-hook์ ์ถ๋ ฅ ๋ชจ๋ํฐ๋ง๊ณผ ๊ฐ์ฌ์ ์ ํฉํ๋ค.
-
13:02
์๋ก์ด ์์กด์ฑ์ผ๋ก์์ ๊ฒ์ดํธ์จ์ด LLM ๊ฒ์ดํธ์จ์ด ์์ฒด๊ฐ ์์ฒญ ๊ฒฝ๋ก์ ์ dependency๊ฐ ๋๋ฏ๋ก, API key๋ฅผ route์ use case๋ณ๋ก ์ต๋ํ ์ธ๋ถํํด noisy tenant์ ์ํฅ์ ์ค์ฌ์ผ ํ๋ค. retry storm ์ํฉ์์๋ ๋จ์ scale-out์ด ํตํ์ง ์์ผ๋ฏ๋ก load shedding, bounded queue, traffic prioritization์ด ์ค์ํ๋ค.
-
14:11
์ฌ์๋ ํญ์ฃผ ์ ๋ก๋ ์ ฐ๋ฉ ์ฌ์๋ ํญ์ฃผ๊ฐ ์ค๋ฉด ์น ์๋ฒ ๋ด๋ถ ํ๊ฐ ๋ฌดํ์ ์์ด์ง ์๋๋ก ์ ํํด์ผ ํ๋ฉฐ, ์ค์ํ ํธ๋ํฝ์ ์ฐ์ ์ฒ๋ฆฌํ๋ ์ ์ฑ ์ด ํ์ํ๋ค. ํ์ฌ ์ ์ฒด๋ฅผ ์ํ ๋จ์ผ central gateway๋ single point of failure๊ฐ ๋๊ธฐ ์ฌ์ฐ๋ฏ๋ก, ํธ๋ํฝ์ ๋ถ์ฐํ๋ ๊ฑฐ๋ฒ๋์ค๋ง ์ค์ํํ๋ ๋ฐฉํฅ์ด ๋ ์์ ํ๋ค.
-
15:18
์ค์ ๊ฒ์ดํธ์จ์ด ์์ด ์ค์ ๊ฑฐ๋ฒ๋์ค ๊ตฌํํ๊ธฐ ์ค์ํํด์ผ ํ๋ ๊ฒ์ ํธ๋ํฝ์ด ์๋๋ผ cost tracking๊ณผ rate limit ๊ฐ์ ๊ฑฐ๋ฒ๋์ค์ด๋ฉฐ, ์ด๋ plugin์ด๋ custom code๋ก๋ ๊ตฌํํ ์ ์๋ค. ์ ์ฒด ํ์ฌ๋ฅผ ํ๋์ ๋ฐฐํฌ ๋จ์๋ก ๋ฌถ๊ธฐ๋ณด๋ค, ๋ถ์ฐ๋ ๊ฒ์ดํธ์จ์ด ์์ ์ค์ ์ ์ฑ ์ ์น๋ ๊ตฌ์กฐ๊ฐ ๋ ์ค์ฉ์ ์ด๋ค.
์ค๋ฌด ์ธ์ฌ์ดํธ
- LLM ๊ฒ์ดํธ์จ์ด๋ฅผ ์ค๊ณํ ๋๋ "์คํจ ์ ๋ฌด์์ ํฌ๊ธฐํ ์ง"๋ฅผ ๋จผ์ ์ ํ๊ณ , provider๋ณ fallbackยทtimeoutยทheadroom์ ๊ทธ ์ ์ฑ ์ ๋ง๊ฒ ์ซ์๋ก ๊ณ ์ ํด์ผ ํ๋ค.
- ์ด์ ์งํ๋ gateway ์ ์ฒด ํ๊ท ์ด ์๋๋ผ ๋ชจ๋ธยทroute ๋จ์ P99์ timeout ์ค์ ์ฌ๋ถ๋ก ๋ด์ผ ํ๋ฉฐ, ํผํฉ ์ํฌ๋ก๋์์๋ ์ด๋ฅผ ๋ถ๋ฆฌํ์ง ์์ผ๋ฉด ์ฅ์ ๋ฅผ ๋์น๊ธฐ ์ฝ๋ค.
- ๋ณด์๊ณผ ๊ฐ์ฉ์ฑ์ ์ถฉ๋์ ๊ฐ๋๋ ์ผ์ fail open/closed, ๋ฐฐ์น ์์น, time budget์ ๋ช ์ํ๋ฉด ์๋น ๋ถ๋ถ ์ ์ดํ ์ ์๋ค.