๐ ์๋ณธ ๋ฌธ์: Build to scale: queueing and latency on Twilio
11์์ 1000๊ฐ์ ์ํ์ด ํ ์ธ ์คํ! ์ด ์์์ ์ค์ 10์์ 100๋ง ๋ช ์๊ฒ ํ๊บผ๋ฒ์ ๋ฌธ์๋ก ์๋ ค์ผ ํ๋ค๋ฉด?
์ด๋ ๊ฒ ๋ ์ข ๋ฅ์ ๋ฉ์์ง๊ฐ ํ์ํ๋ค๋ฉด, ๊ฐ ์ ์ค์ผ์ด์ค๋ง๋ค ๋ณ๋์ ๋ฉ์์ง ์๋น์ค(Messaging Service) ๋ฅผ ์ค์ ํด์ผ ํด์.
๋ฉ์์ง ์๋น์ค๋ ์ฌ๋ฌ ๋ฐ์ ๋ฒํธ(๋ฐ์ ์ ํ) ์ ์ค์ ๊ฐ์ ํ๋์ ๋ชฉ์ ์ ๋ง๊ฒ ๋ฌถ์ ๋จ์์์. ์ด๋ฅผ ์ฌ์ฉํ๋ฉด:
๋ฑ์ ์์ฝ๊ฒ ํ ์ ์์ด์.
โ ๏ธ ๋จ, ์ฌ๋ฌ ๋ฒํธ๋ฅผ ๋์์ ์ฌ์ฉํ๋ ๊ฑด ์ง์ญ ๊ท์ ์ ๋ฐ๋ผ ์ ํ๋ ์ ์์ด์. ํนํ ๋ฏธ๊ตญ์์๋ "์ค๋ ธ์ฐ์์(snowshoeing)"์ผ๋ก ๊ฐ์ฃผ๋ ์ ์์ผ๋ Twilio ์ ์ฑ ํ์ธ ํ์!
| ๊ตฌ๋ถ | ์ ์ค์ผ์ด์ค | ๋ฉ์์ง ์ | ๊ธด๊ธ๋ | ๊ถ์ฅ Validity Period |
|---|---|---|---|---|
| ํ๋ก๋ชจ์ | ๋งํฌ ํฌํจ ๋ง์ผํ ๋ฉ์์ง | 1,000,000 | ๋ฎ์ | ๊ธฐ๋ณธ๊ฐ (10์๊ฐ) |
| OTP | ๋ก๊ทธ์ธ ์ธ์ฆ ์ฝ๋ | ์ฝ 20,000 | ๋์ | 2~3๋ถ (์: 120์ด) |
ํ๋ก๋ชจ์
OTP
const service = await client.messaging.v1.services.create({
friendlyName: "My OTP Messaging Service",
validityPeriod: 120
});
| ๋ฒํธ ํ์ | ์๋ | ๊ฐ๋ณ MPS | ์ด MPS |
|---|---|---|---|
| ์์ฝ๋ | 1 | 100 | 100 |
| ์๊ตญ ์ฅ๋ฒํธ | 2 | 10 | 20 |
| ๋ฏธ๊ตญ ์ฅ๋ฒํธ | 10 | 1 | 10 |
| ์บ๋๋ค ์ฅ๋ฒํธ | 10 | 1 | 10 |
| ํฉ๊ณ | 23 | 140 |
| ๋ฒํธ ํ์ | ์๋ | ๊ฐ๋ณ MPS | ์ด MPS |
|---|---|---|---|
| ์์ฝ๋ | 1 | 100 | 100 |
| ํจํ๋ฆฌ | 2 | 25 | 50 |
| ์๊ตญ ์ฅ๋ฒํธ | 4 | 10 | 40 |
| ๋ฏธ๊ตญ ์ฅ๋ฒํธ | 10 | 1 | 10 |
| ์บ๋๋ค ์ฅ๋ฒํธ | 2 | 10 | 20 |
| ํฉ๊ณ | 19 | 220 |
const message = await client.messages.create({
body: "์ธ์ผ 1์๊ฐ ์ ! ๋ก๊ทธ์ธํ์ธ์!",
messagingServiceSid: "MGxxx",
to: "+821012345678"
});
โ ๏ธ ์ค๋ฅ ์์: Queue Overflow, 30001 ๋ฑ โ ๋ฐฑ์คํ + ์ฌ์๋ ๋ก์ง ํ์
๋๊ท๋ชจ ์ฅ์ ๋ ๊ณต์ง ํ์ ์, ๊ธฐ์กด ํ๋ ์ด๊ณผ๋ ์ ์์ด์. ์ด๋ด ๋ Twilio ์ง์ํ์ ํ๋ ์ํฅ ์์ฒญํ ์ ์์ด์.