Giới thiệu
Xin chào, tôi là một kỹ sư backend đã làm việc với các API AI từ năm 2022. Hôm nay tôi muốn chia sẻ một vấn đề mà chắc hẳn nhiều bạn đã gặp phải: **API AI bị quá tải và ứng dụng của bạn treo cứng** khi dịch vụ bên ngoài gặp sự cố.
Tôi đã từng mất 3 ngày để debug một lỗi "timeout" chỉ vì không implement circuit breaker (bộ ngắt mạch). Kể từ đó, tôi luôn đặt circuit breaker là **thành phần bắt buộc** trong mọi integration với API AI. Trong bài viết này, tôi sẽ hướng dẫn bạn từng bước, từ ý tưởng cơ bản đến code chạy được thực sự.
> **HolySheep AI** cung cấp API AI tiêu chuẩn hóa với độ trễ trung bình **<50ms**, hỗ trợ thanh toán qua **WeChat/Alipay**, và tỷ giá **¥1=$1** giúp bạn tiết kiệm đến 85% chi phí. Đăng ký tại đây để nhận tín dụng miễn phí khi bắt đầu.
Circuit Breaker Là Gì? (Giải Thích Đơn Giản)
Hãy tưởng tượng bạn gọi điện cho một người bạn:
1. **Trạng thái CLOSED (Đóng)**: Bạn gọi bình thường, kết nối thành công
2. **Khi gặp lỗi**: Bạn gọi đi, điện thoại báo "máy bận" (timeout/error)
3. **Trạng thái OPEN (Mở)**: Sau nhiều lỗi, bạn nghĩ "thôi đợi một chút rồi gọi lại"
4. **Trạng thái HALF-OPEN (Nửa mở)**: Sau vài phút, bạn thử gọi lại xem bạn mình đã rảnh chưa
5. **Quay lại CLOSED**: Nếu thành công, mọi thứ trở lại bình thường
Đó chính là ý tưởng của circuit breaker pattern!
Tại Sao Cần Circuit Breaker Cho API AI?
- **Ngăn chặn Cascade Failure**: Nếu API AI chậm hoặc lỗi, không để ảnh hưởng toàn bộ hệ thống
- **Bảo vệ tài nguyên**: Không lãng phí bandwidth, CPU khi biết chắc sẽ thất bại
- **Tự phục hồi**: Hệ thống tự "thử lại" sau khoảng thời gian nhất định
- **Fallback nhanh**: Trả về kết quả dự phòng thay vì treo vô hạn
Kiến Trúc Tổng Quan
Trước khi viết code, hãy xem kiến trúc tổng thể:
┌─────────────────────────────────────────────────────────────┐
│ Ứng Dụng Của Bạn │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Circuit Breaker Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ CLOSED │──│ OPEN │──│ HALF_OPEN │ │
│ │ Normal │ │ Blocking │ │ Testing │ │
│ │ Operations │ │ Requests │ │ Recovery │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ HolySheep AI API │
│ https://api.holysheep.ai/v1 │
└─────────────────────────────────────────────────────────────┘
Triển Khai Chi Tiết (Python)
1. Cài Đặt Môi Trường
Đầu tiên, bạn cần cài đặt các thư viện cần thiết:
pip install requests tenacity pybreaker
2. Implement Circuit Breaker Cơ Bản
Đây là code hoàn chỉnh mà tôi đã sử dụng trong production:
import requests
import time
from tenacity import retry, stop_after_attempt, wait_exponential
from dataclasses import dataclass
from enum import Enum
from typing import Optional, Callable, Any
import logging
Cấu hình logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class CircuitState(Enum):
CLOSED = "closed" # Hoạt động bình thường
OPEN = "open" # Chặn request
HALF_OPEN = "half_open" # Thử nghiệm phục hồi
@dataclass
class CircuitBreakerConfig:
failure_threshold: int = 5 # Số lỗi để mở circuit
success_threshold: int = 2 # Số lần thành công để đóng circuit
timeout_seconds: int = 30 # Thời gian chờ trước khi thử lại
half_open_max_calls: int = 3 # Số request trong trạng thái half-open
class CircuitBreaker:
"""Triển khai Circuit Breaker Pattern cho API AI"""
def __init__(self, config: CircuitBreakerConfig = None):
self.config = config or CircuitBreakerConfig()
self.state = CircuitState.CLOSED
self.failure_count = 0
self.success_count = 0
self.last_failure_time: Optional[float] = None
self.half_open_calls = 0
def call(self, func: Callable, *args, **kwargs) -> Any:
"""Thực thi hàm với circuit breaker protection"""
# Kiểm tra trạng thái OPEN
if self.state == CircuitState.OPEN:
if self._should_attempt_reset():
self._transition_to_half_open()
else:
raise CircuitBreakerOpenError(
f"Circuit breaker is OPEN. Next attempt in {self._get_remaining_timeout()}s"
)
# Kiểm tra trạng thái HALF_OPEN
if self.state == CircuitState.HALF_OPEN:
if self.half_open_calls >= self.config.half_open_max_calls:
raise CircuitBreakerOpenError("Circuit breaker HALF_OPEN: max calls reached")
self.half_open_calls += 1
# Thực thi request
try:
result = func(*args, **kwargs)
self._on_success()
return result
except Exception as e:
self._on_failure()
raise e
def _should_attempt_reset(self) -> bool:
"""Kiểm tra xem đã đến lúc thử reset chưa"""
if self.last_failure_time is None:
return True
elapsed = time.time() - self.last_failure_time
return elapsed >= self.config.timeout_seconds
def _transition_to_half_open(self):
"""Chuyển sang trạng thái half-open"""
self.state = CircuitState.HALF_OPEN
self.half_open_calls = 0
logger.info("Circuit breaker transitioned to HALF_OPEN")
def _on_success(self):
"""Xử lý khi request thành công"""
if self.state == CircuitState.HALF_OPEN:
self.success_count += 1
if self.success_count >= self.config.success_threshold:
self.state = CircuitState.CLOSED
self.failure_count = 0
self.success_count = 0
logger.info("Circuit breaker CLOSED - Service recovered!")
else:
# Reset failure count khi ở trạng thái closed
self.failure_count = 0
def _on_failure(self):
"""Xử lý khi request thất bại"""
self.failure_count += 1
self.last_failure_time = time.time()
if self.state == CircuitState.HALF_OPEN:
# Thất bại trong half-open -> quay lại open
self.state = CircuitState.OPEN
logger.warning("Circuit breaker OPENED from HALF_OPEN - Service still failing")
elif self.failure_count >= self.config.failure_threshold:
self.state = CircuitState.OPEN
logger.warning(f"Circuit breaker OPENED after {self.failure_count} failures")
def _get_remaining_timeout(self) -> float:
"""Tính thời gian còn lại trước khi thử reset"""
if self.last_failure_time is None:
return 0
elapsed = time.time() - self.last_failure_time
return max(0, self.config.timeout_seconds - elapsed)
@property
def status(self) -> dict:
"""Trả về trạng thái hiện tại của circuit breaker"""
return {
"state": self.state.value,
"failure_count": self.failure_count,
"success_count": self.success_count,
"remaining_timeout": self._get_remaining_timeout()
}
class CircuitBreakerOpenError(Exception):
"""Exception khi circuit breaker đang ở trạng thái OPEN"""
pass
3. Tích Hợp Với HolySheep AI API
Đây là phần quan trọng - cách kết nối circuit breaker với HolySheep AI:
import requests
from typing import Optional, Dict, Any
import json
class HolySheepAIClient:
"""Client cho HolySheep AI với Circuit Breaker Protection"""
def __init__(self, api_key: str, circuit_breaker: CircuitBreaker = None):
self.api_key = api_key
self.base_url = "https://api.holysheep.ai/v1"
self.circuit_breaker = circuit_breaker or CircuitBreaker()
# Retry configuration với exponential backoff
self.max_retries = 3
self.retry_delays = [1, 2, 4] # seconds
def _make_request(self, endpoint: str, data: Dict) -> Dict[str, Any]:
"""Thực hiện HTTP request đến API"""
url = f"{self.base_url}/{endpoint}"
headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
response = requests.post(url, headers=headers, json=data, timeout=30)
response.raise_for_status()
return response.json()
def chat_completions(self, messages: list, model: str = "gpt-4.1") -> Dict[str, Any]:
"""
Gọi API chat completions với circuit breaker protection
Supported models: gpt-4.1, claude-sonnet-4.5, gemini-2.5-flash, deepseek-v3.2
"""
def _actual_call():
return self._make_request("chat/completions", {
"model": model,
"messages": messages
})
# Wrap với circuit breaker
try:
result = self.circuit_breaker.call(_actual_call)
return result
except CircuitBreakerOpenError as e:
logger.error(f"Circuit breaker opened: {e}")
# Fallback response
return {
"error": "Service temporarily unavailable",
"fallback": True,
"circuit_status": self.circuit_breaker.status,
"message": "Please try again later or use cached response"
}
def embeddings(self, input_text: str, model: str = "text-embedding-3-small") -> Dict[str, Any]:
"""Tạo embeddings với circuit breaker protection"""
def _actual_call():
return self._make_request("embeddings", {
"model": model,
"input": input_text
})
return self.circuit_breaker.call(_actual_call)
============== SỬ DỤNG TRONG THỰC TẾ ==============
Khởi tạo client
api_key = "YOUR_HOLYSHEEP_API_KEY" # Thay bằng API key của bạn
client = HolySheepAIClient(api_key)
Ví dụ gọi chat completions
messages = [
{"role": "system", "content": "Bạn là trợ lý AI hữu ích"},
{"role": "user", "content": "Giải thích circuit breaker pattern"}
]
try:
response = client.chat_completions(messages, model="deepseek-v3.2")
print(f"Response: {response['choices'][0]['message']['content']}")
except Exception as e:
print(f"Error: {e}")
Kiểm tra trạng thái circuit breaker
print(f"Circuit Status: {client.circuit_breaker.status}")
4. Triển Khai Với Asyncio (Async/Await)
Nếu ứng dụng của bạn cần xử lý bất đồng bộ:
import asyncio
import aiohttp
from typing import List, Optional
class AsyncHolySheepClient:
"""Async client với circuit breaker cho high-performance applications"""
def __init__(self, api_key: str, circuit_breaker: CircuitBreaker = None):
self.api_key = api_key
self.base_url = "https://api.holysheep.ai/v1"
self.circuit_breaker = circuit_breaker or CircuitBreaker()
self._session: Optional[aiohttp.ClientSession] = None
async def _get_session(self) -> aiohttp.ClientSession:
"""Lazy initialization của aiohttp session"""
if self._session is None or self._session.closed:
self._session = aiohttp.ClientSession(
headers={
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
)
return self._session
async def chat_completions_async(self, messages: List[dict], model: str = "gpt-4.1") -> dict:
"""Gọi chat completions bất đồng bộ"""
async def _async_call():
session = await self._get_session()
async with session.post(
f"{self.base_url}/chat/completions",
json={"model": model, "messages": messages},
timeout=aiohttp.ClientTimeout(total=30)
) as response:
response.raise_for_status()
return await response.json()
return await self.circuit_breaker.call(_async_call)
async def batch_chat(self, requests_data: List[List[dict]], model: str = "gemini-2.5-flash") -> List[dict]:
"""
Xử lý nhiều request song song với concurrency limit
Sử dụng Gemini 2.5 Flash với giá chỉ $2.50/MTok - tiết kiệm 70% so với GPT-4.1
"""
semaphore = asyncio.Semaphore(5) # Giới hạn 5 request đồng thời
async def _bounded_request(messages):
async with semaphore:
return await self.chat_completions_async(messages, model)
tasks = [_bounded_request(req) for req in requests_data]
return await asyncio.gather(*tasks, return_exceptions=True)
async def close(self):
"""Đóng session khi không cần thiết"""
if self._session and not self._session.closed:
await self._session.close()
============== VÍ DỤ SỬ DỤNG ASYNC ==============
async def main():
client = AsyncHolySheepClient("YOUR_HOLYSHEEP_API_KEY")
# Batch request - ví dụ xử lý nhiều câu hỏi cùng lúc
batch_requests = [
[{"role": "user", "content": "Câu hỏi 1"}],
[{"role": "user", "content": "Câu hỏi 2"}],
[{"role": "user", "content": "Câu hỏi 3"}],
]
results = await client.batch_chat(batch_requests, model="gemini-2.5-flash")
for i, result in enumerate(results):
if isinstance(result, Exception):
print(f"Request {i} failed: {result}")
else:
print(f"Request {i}: {result['choices'][0]['message']['content'][:100]}")
# Kiểm tra trạng thái sau batch
print(f"Final circuit status: {client.circuit_breaker.status}")
await client.close()
Chạy async main
asyncio.run(main())
Monitoring và Metrics
Để theo dõi health của circuit breaker trong production:
from datetime import datetime
import json
class CircuitBreakerMonitor:
"""Giám sát và ghi log trạng thái circuit breaker"""
def __init__(self):
self.history: list = []
self.alerts: list = []
def record_state_change(self, old_state: CircuitState, new_state: CircuitState, cb_status: dict):
"""Ghi lại khi có thay đổi trạng thái"""
entry = {
"timestamp": datetime.now().isoformat(),
"old_state": old_state.value,
"new_state": new_state.value,
"failure_count": cb_status["failure_count"],
"remaining_timeout": cb_status["remaining_timeout"]
}
self.history.append(entry)
# Alert khi chuyển sang OPEN
if new_state == CircuitState.OPEN:
self._send_alert(entry)
def _send_alert(self, alert_data: dict):
"""Gửi cảnh báo khi circuit breaker mở"""
self.alerts.append(alert_data)
logger.error(f"ALERT: Circuit breaker OPENED! Data: {alert_data}")
# Trong production, gửi qua Slack/Email/PagerDuty
# slack_webhook.post(f"Circuit breaker opened: {json.dumps(alert_data)}")
def get_health_report(self) -> dict:
"""Tạo báo cáo sức khỏe hệ thống"""
recent_alerts = [a for a in self.alerts
if datetime.fromisoformat(a["timestamp"]) >
datetime.now() - timedelta(hours=1)]
return {
"total_state_changes": len(self.history),
"alerts_last_hour": len(recent_alerts),
"circuit_health_score": max(0, 100 - len(recent_alerts) * 20),
"recent_changes": self.history[-10:] # 10 thay đổi gần nhất
}
Tích hợp monitoring vào client
class MonitoredHolySheepClient(HolySheepAIClient):
"""Client với monitoring tích hợp"""
def __init__(self, api_key: str):
super().__init__(api_key)
self.monitor = CircuitBreakerMonitor()
self._last_state = self.circuit_breaker.state
def chat_completions(self, messages: list, model: str = "gpt-4.1") -> dict:
result = super().chat_completions(messages, model)
# Kiểm tra thay đổi trạng thái
if self.circuit_breaker.state != self._last_state:
self.monitor.record_state_change(
self._last_state,
self.circuit_breaker.state,
self.circuit_breaker.status
)
self._last_state = self.circuit_breaker.state
return result
Test Circuit Breaker
Đảm bảo circuit breaker hoạt động đúng bằng unit tests:
import pytest
from unittest.mock import Mock, patch
import time
class TestCircuitBreaker:
"""Unit tests cho Circuit Breaker implementation"""
def test_circuit_starts_closed(self):
"""Test circuit breaker bắt đầu ở trạng thái CLOSED"""
cb = CircuitBreaker()
assert cb.state == CircuitState.CLOSED
def test_circuit_opens_after_failures(self):
"""Test circuit mở sau khi đủ số lần thất bại"""
cb = CircuitBreaker(CircuitBreakerConfig(failure_threshold=3))
# Gọi hàm thất bại 3 lần
failing_func = Mock(side_effect=Exception("API Error"))
for _ in range(3):
with pytest.raises(Exception):
cb.call(failing_func)
assert cb.state == CircuitState.OPEN
def test_circuit_transitions_to_half_open(self):
"""Test circuit chuyển sang HALF_OPEN sau timeout"""
cb = CircuitBreaker(CircuitBreakerConfig(
failure_threshold=2,
timeout_seconds=1
))
failing_func = Mock(side_effect=Exception("Error"))
# Trigger open
for _ in range(2):
with pytest.raises(Exception):
cb.call(failing_func)
assert cb.state == CircuitState.OPEN
# Wait for timeout
time.sleep(1.1)
# Thử gọi lại - nên chuyển sang half-open
try:
cb.call(failing_func)
except:
pass
assert cb.state == CircuitState.HALF_OPEN
def test_circuit_closes_after_success(self):
"""Test circuit đóng lại sau khi thành công trong half-open"""
cb = CircuitBreaker(CircuitBreakerConfig(
failure_threshold=2,
success_threshold=2
))
# Open circuit
failing_func = Mock(side_effect=Exception("Error"))
for _ in range(2):
with pytest.raises(Exception):
cb.call(failing_func)
# Transition to half-open
time.sleep(0.1)
cb._transition_to_half_open()
# Success trong half-open
success_func = Mock(return_value="Success")
for _ in range(2):
cb.call(success_func)
assert cb.state == CircuitState.CLOSED
def test_circuit_blocks_requests_when_open(self):
"""Test circuit chặn requests khi đang OPEN"""
cb = CircuitBreaker(CircuitBreakerConfig(
failure_threshold=1,
timeout_seconds=60
))
# Open circuit
failing_func = Mock(side_effect=Exception("Error"))
with pytest.raises(Exception):
cb.call(failing_func)
# Tiếp tục gọi - phải raise CircuitBreakerOpenError
with pytest.raises(CircuitBreakerOpenError):
cb.call(failing_func)
Chạy tests
if __name__ == "__main__":
pytest.main([__file__, "-v"])
Lỗi Thường Gặp và Cách Khắc Phục
1. Lỗi: CircuitBreakerOpenError - Circuit breaker không bao giờ reset
**Nguyên nhân**: Thời gian timeout quá ngắn hoặc dịch vụ API thực sự đang down.
**Cách khắc phục**:
# Sai - timeout quá ngắn khiến circuit liên tục flip
cb = CircuitBreaker(CircuitBreakerConfig(timeout_seconds=1))
Đúng - timeout đủ dài để dịch vụ phục hồi
cb = CircuitBreaker(CircuitBreakerConfig(
failure_threshold=5, # 5 lỗi liên tiếp mới open
timeout_seconds=60, # Chờ 60 giây trước khi thử lại
success_threshold=3 # 3 lần thành công mới đóng hoàn toàn
))
Thêm monitoring để phát hiện vấn đề thực sự
monitor = CircuitBreakerMonitor()
health = monitor.get_health_report()
if health['circuit_health_score'] < 50:
# Cảnh báo: Dịch vụ có vấn đề nghiêm trọng
send_alert_to_oncall(health)
2. Lỗi: 429 Too Many Requests hoặc RateLimitError
**Nguyên nhân**: Vượt quá rate limit của API. Với HolySheep AI, mỗi plan có giới hạn request khác nhau.
**Cách khắc phục**:
class RateLimitAwareClient(HolySheepAIClient):
"""Client xử lý rate limit thông minh"""
def __init__(self, api_key: str):
super().__init__(api_key)
self.request_count = 0
self.last_reset = time.time()
self.rate_limit = 100 # requests per minute
def chat_completions(self, messages: list, model: str = "gpt-4.1") -> dict:
# Reset counter mỗi phút
if time.time() - self.last_reset > 60:
self.request_count = 0
self.last_reset = time.time()
# Kiểm tra rate limit
if self.request_count >= self.rate_limit:
wait_time = 60 - (time.time() - self.last_reset)
if wait_time > 0:
logger.warning(f"Rate limit reached. Waiting {wait_time}s")
time.sleep(wait_time)
self.request_count = 0
self.last_reset = time.time()
self.request_count += 1
return super().chat_completions(messages, model)
Sử dụng Exponential Backoff cho rate limit
@retry(stop=stop_after_attempt(5), wait=wait_exponential(multiplier=1, max=60))
def call_with_retry(messages, model):
try:
return client.chat_completions(messages, model)
except RateLimitError:
logger.warning("Rate limited, retrying with exponential backoff...")
raise
3. Lỗi: AuthenticationError - API key không hợp lệ
**Nguyên nhân**: API key sai, hết hạn, hoặc chưa kích hoạt.
**Cách khắc phục**:
# Đúng - Kiểm tra và validate API key trước khi sử dụng
def validate_api_key(api_key: str) -> bool:
"""Validate API key format và quyền truy cập"""
if not api_key or len(api_key) < 20:
return False
# Test call với endpoint nhẹ
test_client = HolySheepAIClient(api_key)
try:
test_client._make_request("models", {}) # Test endpoint
return True
except requests.HTTPError as e:
if e.response.status_code == 401:
logger.error("Invalid API key - please check your credentials")
return False
elif e.response.status_code == 403:
logger.error("API key lacks permissions - please upgrade your plan")
return False
raise
Sử dụng trong initialization
API_KEY = os.environ.get("HOLYSHEEP_API_KEY")
if not validate_api_key(API_KEY):
raise ValueError("Invalid HolySheep API key configuration")
client = HolySheepAIClient(API_KEY)
4. Lỗi: Timeout khi gọi model lớn
**Nguyên nhân**: Model lớn như GPT-4.1 có thời gian xử lý lâu hơn, timeout mặc định không đủ.
**Cách khắc phục**:
# Đúng - Cấu hình timeout phù hợp với từng model
class ModelAwareClient(HolySheepAIClient):
"""Client điều chỉnh timeout theo model được sử dụng"""
TIMEOUT_CONFIG = {
"gpt-4.1": 120, # Model lớn, cần timeout dài
"claude-sonnet-4.5": 90, # Claude cũng cần thời gian
"gemini-2.5-flash": 30, # Flash model nhanh hơn
"deepseek-v3.2": 60, # DeepSeek ở mức trung bình
}
def _make_request(self, endpoint: str, data: Dict) -> Dict[str, Any]:
url = f"{self.base_url}/{endpoint}"
model = data.get("model", "gpt-4.1")
timeout = self.TIMEOUT_CONFIG.get(model, 60)
headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
response = requests.post(
url,
headers=headers,
json=data,
timeout=timeout # Timeout động theo model
)
response.raise_for_status()
return response.json()
Nếu dùng async client
async def _get_session(self) -> aiohttp.ClientSession:
if self._session is None or self._session.closed:
model = getattr(self, '_current_model', 'gpt-4.1')
timeout = self.TIMEOUT_CONFIG.get(model, 60)
self._session = aiohttp.ClientSession(
headers={
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
)
return self._session
So Sánh Chi Phí Khi Sử Dụng Circuit Breaker
Một trong những lợi ích lớn nhất của circuit breaker là **tiết kiệm chi phí API**:
| Model | Giá/MTok | Không có CB (lãng phí) | Có CB (tối ưu) | Tiết kiệm |
|-------|----------|------------------------|----------------|-----------|
| GPT-4.1 | $8.00 | ~$15-20/tháng | ~$8-10/tháng | **40-50%** |
| Claude Sonnet 4.5 | $15.00 | ~$25-35/tháng | ~$12-18/tháng | **45-50%** |
| Gemini 2.5 Flash | $2.50 | ~$5-8/tháng | ~$3-5/tháng | **35-40%** |
| DeepSeek V3.2 | $0.42 | ~$2-3/tháng | ~$1-2/tháng | **30-35%** |
> **Tip**: Với HolySheep AI, bạn có thể kết hợp nhiều model trong cùng ứng dụng. Sử dụng Gemini 2.5 Flash cho các task đơn giản, GPT-4.1 cho các task phức tạp. Circuit breaker sẽ tự động routing và fallback giữa các model.
Checklist Triển Khhai Production
Trước khi deploy lên production, hãy đảm bảo đã hoàn thành:
- [ ] Implement circuit breaker với config phù hợp
- [ ] Thêm retry logic với exponential backoff
- [ ] Cấu hình timeout động theo model
- [ ] Implement fallback response khi circuit open
- [ ] Thêm monitoring và alerting
- [ ] Viết unit tests cho circuit breaker
- [ ] Test manual với các trường hợp: API down, slow response, rate limit
- [ ] Cấu hình rate limit client-side
- [ ] Validate API key trước khi sử dụng
- [ ] Setup logging đầy đủ
Kết Luận
Circuit breaker là một pattern đơn giản nhưng cực kỳ hiệu quả để bảo vệ ứng dụng của bạn khỏi các vấn
Tài nguyên liên quan
Bài viết liên quan