π ν μλ²μμ μλ°±λ§ λͺ μ μ¬μ©μκΉμ§: λ‘λ λ°Έλ°μ± μ€μ© κ°μ΄λ βοΈ
Source: Dev.to
μμ μ 곡λ Source λ§ν¬λ§μΌλ‘λ μ€μ λ²μν ν μ€νΈκ° ν¬ν¨λμ΄ μμ§ μμ΅λλ€. λ²μμ΄ νμν μ 체 κΈ°μ¬ λ΄μ©(λλ λ²μνκ³ μΆμ νΉμ λΆλΆ)μ 볡μ¬ν΄μ μλ €μ£Όμλ©΄, μμ²νμ λλ‘ λ§ν¬λ€μ΄ νμκ³Ό μ½λ λΈλ‘, URLμ κ·Έλλ‘ μ μ§νλ©΄μ νκ΅μ΄λ‘ λ²μν΄ λλ¦¬κ² μ΅λλ€.
λ‘λ λ°Έλ°μ±μ΄ μ€μν μ΄μ
- μ»΄ν¨ν°λ νκ³κ° μλ€ β λ¨μΌ μλ²κ° κ³ΌλΆνκ° κ±Έλ¦¬κ±°λ, λλ €μ§κ±°λ, μΆ©λν μ μλ€.
- νΈλν½μ΄ κ³ λ₯΄μ§ μλ€ β κΈμ¦μ΄ λ¨μΌ μΈμ€ν΄μ€λ₯Ό μλν μ μλ€.
- μ₯μ λ λΆκ°νΌνλ€ β νλμ¨μ΄ λλ μννΈμ¨μ΄ λ¬Έμ κ° λ°μνλ€.
λ‘λ λ°Έλ°μ±μ λ€μ΄μ€λ μμ²μ μ¬λ¬ μλ²μ λΆμ°μμΌ λ¨μΌ μλ²κ° μ₯μ μ§μ μ΄ λμ§ μλλ‘ νλ€.
Users β Load Balancer β Server A Server B Server C
λ‘λ λ°Έλ°μλ βλλ + νΈλν½ κ²½μ°°β μν μ νλ©° λ°νμμ λ€μ μμ μ μννλ€:
- ν΄λΌμ΄μΈνΈ μμ²μ λ°λλ€.
- μ¬μ© κ°λ₯ν μλ²λ₯Ό νμΈνλ€.
- λΌμ°ν μκ³ λ¦¬μ¦μ μ μ©νλ€.
- μμ²μ μ λ¬νλ€.
- μλ² μνλ₯Ό λͺ¨λν°λ§νλ€.
- μ€ν¨ν μλ²λ₯Ό μλμΌλ‘ μ κ±°νλ€.
μ΄λ¬ν λ¨κ³λ μ΄λΉ μλ°±λ§ λ² λ°μνλ€.
λ‘λ λ°Έλ°μ±μ μ¬μ©ν΄μΌ ν κ²½μ°
- κ³ νΈλν½ νλ«νΌ (μ: Netflix, Amazon νλ§€, μμ λ―Έλμ΄ νΌλ)
- νλμ μλ²μμ λ€μ μλ²λ‘ μν νμ₯
- μλ²κ° λ€μ΄λ λ μλ νμΌμ€λ² (λ€μ΄νμ μμ)
- κ°μ₯ λΉ λ₯΄κ±°λ κ°μ₯ κ°κΉμ΄ μλ²λ‘ λΌμ°ν (μ μΈκ³ μ¬μ©μ)
- API, λ¨Έμ λ¬λ μΆλ‘ , λ°μ΄ν° μ²λ¦¬
- TCP/UDP μλΉμ€ (λ§€μ° λΉ λ₯΄κ³ , μ§λ₯μ μ΄μ§ μμ)
- URL κ²½λ‘, ν€λ, μΏ ν€ κΈ°λ° λΌμ°ν μ΄ νμν HTTP/HTTPS μλΉμ€
μκ³ λ¦¬μ¦ λ° μλ λ°©μ
| μκ³ λ¦¬μ¦ | μ€λͺ |
|---|---|
| Round Robin | μλ²μ μμ²μ νλμ© μμ°¨μ μΌλ‘ 보λ΄λ©°, μ©λμ΄ λμΌνλ€κ³ κ°μ ν©λλ€. |
| Least Connections | νμ¬ νμ± μ°κ²°μ΄ κ°μ₯ μ μ μλ²λ₯Ό μ νν©λλ€ β μ€μ νΈλν½μ μ λ§μ΅λλ€. |
| Least Response Time | κ°μ₯ λΉ λ₯Έ μλ΅μ λ³΄κ³ νλ μλ²μ νΈλν½μ 보λ λλ€, μ μ§μ° μ ν리μΌμ΄μ μ μ΄μμ μ λλ€. |
| IP Hash | ν΄λΌμ΄μΈνΈ IPλ₯Ό νΉμ μλ²μ λ§€ννμ¬ μΈμ μ κ³ μ ν©λλ€. |
| Weighted | μ±λ₯μ΄ λ μ’μ μλ²μ λ λ§μ νΈλν½μ ν λΉν©λλ€; νλμ¨μ΄κ° νΌν©λ κ²½μ° μ μ©ν©λλ€. |
μΌλ°μ μΈ κ΄ν: Least Connectionsλ₯Ό κ±΄κ° μ²΄ν¬μ κ²°ν©ν©λλ€.
μΈκΈ° ꡬν
- 물리μ μ΄νλΌμ΄μΈμ€ β λ§€μ° λΉ λ₯΄κ³ λΉμΈλ©° μν λ° ν΅μ μ¬μμ μ¬μ©λ©λλ€.
- μννΈμ¨μ΄ μ루μ
β νμ€ λ¨Έμ μμ μ€νλ©λλ€:
- NGINX
- HAProxy
- Envoy
- κ΄λ¦¬ν ν΄λΌμ°λ λ‘λ λ°Έλ°μ:
- AWS β ELB / ALB / NLB
- Google Cloud β Cloud Load Balancing
- Azure β Azure Load Balancer
μ₯μ
- μλ μ€μΌμΌλ§ λ° λ΄μ₯ μ€λ³΅μ±
- κ°λ¨ν μ€μ ; DNSκ° μ μΈκ³ νΈλν½μ λν΄ λ€λ₯Έ IPλ₯Ό λ°νν μ μμ
- ν¬μ€ 체ν¬(
GET /health)κ° λΉμ μ μΈμ€ν΄μ€λ₯Ό μλμΌλ‘ νμ μμ μ μΈν©λλ€.
μμ: μ΅μ μ°κ²° μλ₯Ό μ¬μ©νλ NGINX
// server.js (Node.js)
const http = require("http");
const PORT = process.env.PORT;
const NAME = process.env.NAME;
http.createServer((req, res) => {
res.end(`Hello from ${NAME}\n`);
}).listen(PORT, () => {
console.log(`${NAME} running on port ${PORT}`);
});
μΈ μΈμ€ν΄μ€λ₯Ό μ€νν©λλ€:
PORT=3001 NAME=Server-A node server.js
PORT=3002 NAME=Server-B node server.js
PORT=3003 NAME=Server-C node server.js
NGINX μ€μ :
http {
upstream backend_servers {
least_conn;
server localhost:3001;
server localhost:3002;
server localhost:3003;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
}
}
}
μ€λͺ
: upstreamμ μλ² νμ μ μνκ³ , least_connμ κ°μ₯ μ μ νμ± μ°κ²°μ κ°μ§ μλ²λ₯Ό μ ννλ©°, NGINXλ νΈλν½μ μλμΌλ‘ λΆμ°ν©λλ€.
IP ν΄μλ₯Ό μ΄μ©ν μ€ν°ν€ μΈμ
upstream backend_servers {
ip_hash;
server localhost:3001;
server localhost:3002;
}
κ²°κ³Ό: λμΌν ν΄λΌμ΄μΈνΈ IPκ° μΌκ΄λκ² κ°μ λ°±μλλ‘ λΌμ°ν λμ΄ λ‘κ·ΈμΈν μ¬μ©μμκ² μ μ©ν©λλ€.
λ‘λ λ°Έλ°μ + μλ μ€μΌμΌλ§
- μμμ λ°λΌ μλ²λ₯Ό λμ μΌλ‘ μΆκ°νκ±°λ μ κ±°ν©λλ€.
- κ³ΌλΆνλ₯Ό λ°©μ§νκ³ μλ κ°μ μμ΄ μ±μ₯μ λμν©λλ€.
- νΈλ¦¬κ±° κΈ°λ°μΌλ‘ μλν μ μμ΅λλ€(μ: CPU μ¬μ©λ, μμ² μ§μ° μκ°).
μ€μ λ°°ν¬ μ¬λ‘
- AWS & Kubernetes: Ingress 컨νΈλ‘€λ¬ + μλΉμ€.
- Netflix: λ€κ³μΈ΅ μ κ·Ό λ°©μ β DNS β κ°μ₯ κ°κΉμ΄ μ§μ β μ£μ§ λ‘λ λ°Έλ°μ(CDN) β μ§μ λ‘λ λ°Έλ°μ β μλΉμ€ κ° λ‘λ λ°Έλ°μ±.
- λ§μ΄ν¬λ‘μλΉμ€: μλΉμ€ λ©μ λ‘λ λ°Έλ°μ±(μ: Istio, Linkerd).
κ° μμ²μ μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ νλ¦μ λ°λ¦ λλ€:
User β DNS β Load Balancer β Service β Cache β Stream
보μ κΈ°λ₯
- SSL/TLS μ’ λ£
- λ°±μλ IP μ¨κΈ°κΈ°
- μλ μ ν
- DDoS μν
- μΉ μ ν리μΌμ΄μ λ°©νλ²½ (WAF) ν΅ν©
λ¨μΌ μ₯μ μ§μ μ νΌνμμμ€: λ€μ€ λ‘λ λ°Έλ°μλ₯Ό λ°°ν¬νκ±°λ μ€λ³΅μ±μ μ 곡νλ κ΄λ¦¬ν μλΉμ€λ₯Ό μ¬μ©νμμμ€.
Conclusion
μ€λλ λΆμ°λ μΈκ³μμ λ‘λ λ°Έλ°μ±μ λ μ΄μ μ΅μ νκ° μλλΌ νμμ λλ€. μμ μΉ μ±μ μ 곡νλ μλ°±λ§ μ¬μ©μλ₯Ό 보μ ν κΈλ‘λ² νλ«νΌμ μ΄μνλ , ν¨κ³Όμ μΈ λ‘λ λ°Έλ°μ±μ 볡μλ ₯, μ±λ₯ λ° νμ₯μ±μ 보μ₯ν©λλ€. μ μ ν μκ³ λ¦¬μ¦μ μ ννκ³ , ν¬μ€ 체ν¬λ₯Ό ꡬμ±νλ©°, μ¬λ°λ₯Έ μΈνλΌ(μννΈμ¨μ΄, νλμ¨μ΄ λλ κ΄λ¦¬ν ν΄λΌμ°λ μλΉμ€)λ₯Ό νμ©ν¨μΌλ‘μ¨ μμ€ν μ νΈλν½ κΈμ¦μ μ²λ¦¬νκ³ , μ₯μ λ₯Ό 견λλ©°, μ€λ¨ μμ΄ μ±μ₯ν μ μμ΅λλ€. λ‘λ λ°Έλ°μ±μ λ§μ€ν°νλ κ²μ μλ° μμμλ μννΈμ¨μ΄λ₯Ό μ΄μ μκ² μ μ§νλ €λ λͺ¨λ μμ€ν μμ§λμ΄μκ² νμμ μ λλ€.
Quick Revision: Related Topics
| # | Topic |
|---|---|
| 1 | νμ΄μ§λ€μ΄μ β Architecture Series: Part 1 |
| 2 | μΈλ±μ± β Architecture Series: Part 2 |
| 3 | κ°μν β Architecture Series: Part 3 |
| 4 | μΊμ± β Architecture Series: Part 4 |
| 5 | μ€λ© β Architecture Series: Part 5 |
| 6 | λ‘λ λ°Έλ°μ± β Architecture Series: Part 6 |