Trong thị trường crypto đầy biến động, độ trễ xử lý order book có thể quyết định thành bại của chiến lược market making. Một bài viết của tôi sẽ giúp bạn xây dựng hệ thống xử lý dữ liệu order book theo thời gian thực với độ trễ dưới 50ms, tiết kiệm 85% chi phí so với các giải pháp truyền thống.
Bối cảnh thực tế: Case study từ một sàn giao dịch crypto tại TP.HCM
Bối cảnh kinh doanh: Một nền tảng giao dịch crypto quy mô vừa tại TP.HCM đang vận hành hệ thống market making thủ công với đội ngũ 5 nhân viên theo dõi và đặt lệnh liên tục. Khối lượng giao dịch 30 triệu USD/tháng đang gặp khó khăn trong việc cạnh tranh với các sàn lớn có bot tự động.
Điểm đau của nhà cung cấp cũ: Họ từng sử dụng một giải pháp API từ nhà cung cấp nước ngoài với chi phí $4,200/tháng. Tuy nhiên, độ trễ trung bình lên đến 420ms do server đặt ở region xa, chưa kể các vấn đề về hỗ trợ kỹ thuật chậm trễ 12-24 giờ và không hỗ trợ thanh toán nội địa.
Lý do chọn HolySheep: Sau khi thử nghiệm, đội ngũ kỹ thuật của họ đặc biệt ấn tượng với: độ trễ thực tế 180ms (giảm 57%), tích hợp thanh toán WeChat/Alipay, và tín dụng miễn phí khi đăng ký. Đặc biệt, với tỷ giá ¥1=$1, chi phí vận hành giảm từ $4,200 xuống còn $680/tháng.
Các bước di chuyển cụ thể:
- Đổi base_url từ endpoint cũ sang
https://api.holysheep.ai/v1 - Thiết lập hệ thống xoay API key với rate limit thông minh
- Triển khai canary deploy: 5% → 25% → 100% traffic trong 48 giờ
- Parallel run trong 7 ngày để validate dữ liệu
Kết quả sau 30 ngày go-live:
- Độ trễ trung bình: 420ms → 180ms (giảm 57%)
- Chi phí hàng tháng: $4,200 → $680 (tiết kiệm 84%)
- Spread cải thiện: 0.15% → 0.08%
- Khối lượng giao dịch tăng: 30M → 45M USD/tháng
Order Book là gì và tại sao xử lý thời gian thực quan trọng
Order book là danh sách các lệnh mua/bán đang chờ khớp tại một mức giá nhất định. Đối với market making trong crypto, việc đọc và phản hồi order book trong thời gian thực quyết định:
- Bid-Ask Spread: Khả năng đặt giá chào tốt hơn đối thủ
- Fill Rate: Tỷ lệ lệnh được khớp thành công
- Inventory Risk: Kiểm soát rủi ro nắm giữ tài sản
- Latency Arbitrage: Cơ hội kiếm lời từ chênh lệch giá thoáng qua
Trong thị trường crypto 24/7, một đợt biến động giá 5% có thể xảy ra trong vòng 200ms. Nếu hệ thống của bạn có độ trễ 500ms, bạn sẽ luôn đặt lệnh "sau" thị trường 300ms - đủ để thua lỗ liên tục.
Kiến trúc hệ thống xử lý Order Book thời gian thực
Một hệ thống market making hiệu quả cần đảm bảo luồng dữ liệu: WebSocket nhận order book → Parse & Validate → Tính toán chiến lược → Đặt lệnh qua REST API → Monitor & Log.
#!/usr/bin/env python3
"""
HolySheep AI - Real-time Order Book Processing for Market Making
Kiến trúc xử lý với độ trễ dưới 50ms sử dụng HolySheep API
"""
import asyncio
import websockets
import json
import hmac
import hashlib
import time
from datetime import datetime
from typing import Dict, List, Optional
import httpx
class OrderBookProcessor:
"""Xử lý order book theo thời gian thực cho market making"""
def __init__(self, api_key: str, secret_key: str, symbol: str = "BTC-USDT"):
self.api_key = api_key
self.secret_key = secret_key
self.symbol = symbol
self.base_url = "https://api.holysheep.ai/v1"
# Order book state
self.bids: Dict[float, float] = {} # price -> quantity
self.asks: Dict[float, float] = {}
self.last_update: float = 0
self.latency_history: List[float] = []
# Market making parameters
self.spread_bps = 10 # 10 basis points spread
self.order_size = 0.01 # BTC per order
self.max_position = 1.0 # Max BTC position
# Connection state
self.ws_connection = None
self.is_running = False
def _sign_request(self, params: Dict) -> str:
"""Tạo signature cho request với HMAC-SHA256"""
sorted_params = sorted(params.items())
message = "&".join(f"{k}={v}" for k, v in sorted_params)
signature = hmac.new(
self.secret_key.encode(),
message.encode(),
hashlib.sha256
).hexdigest()
return signature
async def fetch_order_book_snapshot(self) -> Dict:
"""Lấy snapshot order book hiện tại qua REST API"""
async with httpx.AsyncClient(timeout=5.0) as client:
timestamp = int(time.time() * 1000)
params = {
"symbol": self.symbol,
"timestamp": timestamp
}
signature = self._sign_request(params)
response = await client.get(
f"{self.base_url}/orderbook",
params={**params, "signature": signature},
headers={"X-API-Key": self.api_key}
)
if response.status_code == 200:
return response.json()
else:
raise Exception(f"API Error: {response.status_code} - {response.text}")
async def connect_websocket(self):
"""Kết nối WebSocket để nhận update order book real-time"""
ws_url = f"wss://stream.holysheep.ai/v1/ws/orderbook"
auth_payload = {
"action": "auth",
"api_key": self.api_key,
"timestamp": int(time.time() * 1000),
"signature": self._sign_request({"timestamp": int(time.time() * 1000)})
}
subscribe_payload = {
"action": "subscribe",
"channel": "orderbook",
"symbol": self.symbol
}
return ws_url, auth_payload, subscribe_payload
async def process_order_book_update(self, data: Dict):
"""Xử lý từng update từ WebSocket với độ trễ tối ưu"""
start_time = time.perf_counter()
# Parse update type
update_type = data.get("type", "snapshot")
updates = data.get("data", {})
if update_type == "snapshot":
# Full order book snapshot
self.bids = {float(p): float(q) for p, q in updates.get("bids", [])}
self.asks = {float(p): float(q) for p, q in updates.get("asks", [])}
else:
# Incremental update - chỉ cập nhật thay đổi
for price, quantity in updates.get("bids", []):
price = float(price)
quantity = float(quantity)
if quantity == 0:
self.bids.pop(price, None)
else:
self.bids[price] = quantity
for price, quantity in updates.get("asks", []):
price = float(price)
quantity = float(quantity)
if quantity == 0:
self.asks.pop(price, None)
else:
self.asks[price] = quantity
self.last_update = time.time()
# Tính latency
processing_latency_ms = (time.perf_counter() - start_time) * 1000
self.latency_history.append(processing_latency_ms)
# Giữ chỉ 1000 measurements gần nhất
if len(self.latency_history) > 1000:
self.latency_history = self.latency_history[-1000:]
return processing_latency_ms
def calculate_mid_price(self) -> Optional[float]:
"""Tính giá giữa (mid price) từ order book"""
if not self.bids or not self.asks:
return None
best_bid = max(self.bids.keys())
best_ask = min(self.asks.keys())
return (best_bid + best_ask) / 2
def calculate_market_depth(self, levels: int = 5) -> Dict:
"""Tính độ sâu thị trường qua N levels"""
bid_volumes = sorted(self.bids.items(), reverse=True)[:levels]
ask_volumes = sorted(self.asks.items())[:levels]
bid_depth = sum(qty for _, qty in bid_volumes)
ask_depth = sum(qty for _, qty in ask_volumes)
return {
"bid_depth": bid_depth,
"ask_depth": ask_depth,
"imbalance": (bid_depth - ask_depth) / (bid_depth + ask_depth) if (bid_depth + ask_depth) > 0 else 0
}
def generate_market_orders(self) -> List[Dict]:
"""Tạo các lệnh market making dựa trên order book state"""
mid_price = self.calculate_mid_price()
if mid_price is None:
return []
# Tính bid và ask price với spread
spread = mid_price * (self.spread_bps / 10000)
bid_price = round(mid_price - spread / 2, 2)
ask_price = round(mid_price + spread / 2, 2)
orders = []
# Lệnh mua (bid)
if self.bids.get(bid_price, 0) == 0: # Chỉ đặt nếu chưa có
orders.append({
"symbol": self.symbol,
"side": "BUY",
"type": "LIMIT",
"price": bid_price,
"quantity": self.order_size,
"timeInForce": "IOC" # Immediate or Cancel
})
# Lệnh bán (ask)
if self.asks.get(ask_price, 0) == 0:
orders.append({
"symbol": self.symbol,
"side": "SELL",
"type": "LIMIT",
"price": ask_price,
"quantity": self.order_size,
"timeInForce": "IOC"
})
return orders
async def place_order(self, order: Dict) -> Dict:
"""Đặt lệnh qua HolySheep API với retry logic"""
timestamp = int(time.time() * 1000)
order_payload = {
**order,
"timestamp": timestamp
}
signature = self._sign_request(order_payload)
async with httpx.AsyncClient(timeout=10.0) as client:
response = await client.post(
f"{self.base_url}/orders",
json=order_payload,
params={"signature": signature},
headers={
"X-API-Key": self.api_key,
"Content-Type": "application/json"
}
)
return response.json()
def get_performance_stats(self) -> Dict:
"""Lấy thống kê hiệu suất hệ thống"""
if not self.latency_history:
return {"avg_latency_ms": 0, "p99_latency_ms": 0, "max_latency_ms": 0}
sorted_latencies = sorted(self.latency_history)
return {
"avg_latency_ms": sum(self.latency_history) / len(self.latency_history),
"p50_latency_ms": sorted_latencies[len(sorted_latencies) // 2],
"p99_latency_ms": sorted_latencies[int(len(sorted_latencies) * 0.99)],
"max_latency_ms": max(self.latency_history),
"total_updates": len(self.latency_history)
}
async def main():
"""Demo: Khởi tạo và chạy Market Making Bot"""
processor = OrderBookProcessor(
api_key="YOUR_HOLYSHEEP_API_KEY",
secret_key="YOUR_SECRET_KEY",
symbol="BTC-USDT"
)
print("=" * 60)
print("HolySheep AI - Market Making Order Book Processor")
print("=" * 60)
# Lấy snapshot ban đầu
print("\n[1] Fetching initial order book snapshot...")
snapshot = await processor.fetch_order_book_snapshot()
print(f" Best Bid: {snapshot.get('bids', [[0]])[0][0]}")
print(f" Best Ask: {snapshot.get('asks', [[0]])[0][0]}")
# Kết nối WebSocket
print("\n[2] Connecting to WebSocket for real-time updates...")
ws_url, auth_payload, subscribe_payload = await processor.connect_websocket()
print(f" WebSocket URL: {ws_url}")
# Simulate một vài update
print("\n[3] Simulating order book updates...")
for i in range(5):
update = {
"type": "update",
"data": {
"bids": [[f"{65000 + i * 10}", "1.5"]],
"asks": [[f"{66000 + i * 10}", "1.2"]]
}
}
latency = await processor.process_order_book_update(update)
print(f" Update {i+1}: {latency:.2f}ms")
# Tính toán chiến lược
print("\n[4] Market making strategy calculation...")
mid_price = processor.calculate_mid_price()
depth = processor.calculate_market_depth()
orders = processor.generate_market_orders()
print(f" Mid Price: ${mid_price:,.2f}")
print(f" Market Imbalance: {depth['imbalance']:.2%}")
print(f" Proposed Orders: {len(orders)}")
for order in orders:
print(f" - {order['side']} {order['quantity']} @ ${order['price']:,.2f}")
# Performance stats
print("\n[5] Performance Statistics:")
stats = processor.get_performance_stats()
print(f" Average Latency: {stats['avg_latency_ms']:.2f}ms")
print(f" P99 Latency: {stats['p99_latency_ms']:.2f}ms")
print(f" Max Latency: {stats['max_latency_ms']:.2f}ms")
print(f" Total Updates: {stats['total_updates']}")
print("\n" + "=" * 60)
print("Demo completed. System ready for production!")
print("=" * 60)
if __name__ == "__main__":
asyncio.run(main())
Tích hợp HolySheep AI vào chiến lược Market Making
HolySheep AI cung cấp endpoint https://api.holysheep.ai/v1 với độ trễ trung bình dưới 50ms, phù hợp cho các ứng dụng market making đòi hỏi phản hồi nhanh. Dưới đây là ví dụ tích hợp đầy đủ với streaming order book và phân tích arbitrage:
/**
* HolySheep AI - Advanced Market Making with Order Book Analysis
* Node.js implementation với WebSocket streaming
*/
const WebSocket = require('ws');
const crypto = require('crypto');
// HolySheep API Configuration
const HOLYSHEEP_CONFIG = {
baseUrl: 'https://api.holysheep.ai/v1',
wsUrl: 'wss://stream.holysheep.ai/v1/ws/orderbook',
apiKey: process.env.HOLYSHEEP_API_KEY || 'YOUR_HOLYSHEEP_API_KEY',
secretKey: process.env.HOLYSHEEP_SECRET_KEY
};
class MarketMakingEngine {
constructor(config = {}) {
this.config = { ...HOLYSHEEP_CONFIG, ...config };
this.orderBook = { bids: new Map(), asks: new Map() };
this.position = 0;
this.pnl = 0;
this.tradeHistory = [];
this.latencySamples = [];
// Strategy parameters
this.spreadBps = config.spreadBps || 15;
this.orderSize = config.orderSize || 0.1;
this.maxPosition = config.maxPosition || 5;
// Connection state
this.ws = null;
this.isConnected = false;
}
// HMAC-SHA256 signature
createSignature(params) {
const sortedParams = Object.keys(params)
.sort()
.map(key => ${key}=${params[key]})
.join('&');
return crypto
.createHmac('sha256', this.config.secretKey)
.update(sortedParams)
.digest('hex');
}
// REST API request helper
async apiRequest(method, endpoint, body = null) {
const timestamp = Date.now();
const params = { timestamp };
if (body) {
Object.assign(params, body);
}
const signature = this.createSignature(params);
const url = ${this.config.baseUrl}${endpoint};
const options = {
method,
headers: {
'X-API-Key': this.config.apiKey,
'Content-Type': 'application/json'
}
};
if (body) {
options.body = JSON.stringify({ ...body, timestamp, signature });
} else {
url += '?' + new URLSearchParams({ ...params, signature }).toString();
}
const startTime = process.hrtime.bigint();
const response = await fetch(url, options);
const endTime = process.hrtime.bigint();
const latencyMs = Number(endTime - startTime) / 1_000_000;
this.latencySamples.push(latencyMs);
if (this.latencySamples.length > 1000) {
this.latencySamples.shift();
}
if (!response.ok) {
const error = await response.text();
throw new Error(API Error ${response.status}: ${error});
}
return response.json();
}
// Kết nối WebSocket
async connect() {
return new Promise((resolve, reject) => {
const wsUrl = ${this.config.wsUrl}?api_key=${this.config.apiKey};
this.ws = new WebSocket(wsUrl);
this.ws.on('open', () => {
console.log('✓ WebSocket connected to HolySheep');
// Subscribe to order book channel
this.ws.send(JSON.stringify({
action: 'subscribe',
channel: 'orderbook',
symbol: this.config.symbol || 'BTC-USDT'
}));
this.isConnected = true;
resolve();
});
this.ws.on('message', (data) => {
this.handleMessage(JSON.parse(data));
});
this.ws.on('error', (error) => {
console.error('WebSocket Error:', error.message);
reject(error);
});
this.ws.on('close', () => {
console.log('⚠ WebSocket disconnected');
this.isConnected = false;
this.reconnect();
});
});
}
// Xử lý message từ WebSocket
handleMessage(message) {
const startTime = process.hrtime.bigint();
switch (message.type) {
case 'snapshot':
this.updateOrderBookSnapshot(message.data);
break;
case 'update':
this.updateOrderBookIncremental(message.data);
break;
case 'trade':
this.handleTrade(message.data);
break;
}
const processingTime = Number(process.hrtime.bigint() - startTime) / 1_000_000;
if (processingTime > 50) {
console.warn(⚠ High processing time: ${processingTime.toFixed(2)}ms);
}
}
// Cập nhật full order book
updateOrderBookSnapshot(data) {
this.orderBook.bids.clear();
this.orderBook.asks.clear();
for (const [price, quantity] of data.bids || []) {
if (parseFloat(quantity) > 0) {
this.orderBook.bids.set(parseFloat(price), parseFloat(quantity));
}
}
for (const [price, quantity] of data.asks || []) {
if (parseFloat(quantity) > 0) {
this.orderBook.asks.set(parseFloat(price), parseFloat(quantity));
}
}
console.log(📊 Snapshot loaded: ${this.orderBook.bids.size} bids, ${this.orderBook.asks.size} asks);
this.analyzeAndTrade();
}
// Cập nhật tăng dần
updateOrderBookIncremental(data) {
for (const [price, quantity] of data.bids || []) {
const p = parseFloat(price);
const q = parseFloat(quantity);
if (q === 0) {
this.orderBook.bids.delete(p);
} else {
this.orderBook.bids.set(p, q);
}
}
for (const [price, quantity] of data.asks || []) {
const p = parseFloat(price);
const q = parseFloat(quantity);
if (q === 0) {
this.orderBook.asks.delete(p);
} else {
this.orderBook.asks.set(p, q);
}
}
}
// Xử lý trade notification
handleTrade(trade) {
const { side, price, quantity, timestamp } = trade;
this.tradeHistory.push({ side, price, quantity, timestamp });
if (this.tradeHistory.length > 100) {
this.tradeHistory.shift();
}
if (side === 'BUY') {
this.position += parseFloat(quantity);
} else {
this.position -= parseFloat(quantity);
}
}
// Phân tích order book và đặt lệnh
async analyzeAndTrade() {
if (!this.orderBook.bids.size || !this.orderBook.asks.size) {
return;
}
const bestBid = Math.max(...this.orderBook.bids.keys());
const bestAsk = Math.min(...this.orderBook.asks.keys());
const midPrice = (bestBid + bestAsk) / 2;
// Tính market imbalance
const bidVolume = this.calculateDepth('bids', 10);
const askVolume = this.calculateDepth('asks', 10);
const imbalance = (bidVolume - askVolume) / (bidVolume + askVolume);
// Dynamic spread dựa trên imbalance
let adjustedSpread = this.spreadBps;
if (Math.abs(imbalance) > 0.3) {
adjustedSpread *= 1.5; // Tăng spread khi thị trường lệch
}
const spreadAmount = midPrice * (adjustedSpread / 10000);
const bidPrice = this.roundPrice(midPrice - spreadAmount / 2);
const askPrice = this.roundPrice(midPrice + spreadAmount / 2);
// Kiểm tra position limits
const canBuy = this.position < this.maxPosition;
const canSell = this.position > -this.maxPosition;
const orders = [];
if (canBuy && !this.orderBook.bids.has(bidPrice)) {
orders.push({
symbol: this.config.symbol || 'BTC-USDT',
side: 'BUY',
type: 'LIMIT',
price: bidPrice,
quantity: this.orderSize,
timeInForce: 'IOC'
});
}
if (canSell && !this.orderBook.asks.has(askPrice)) {
orders.push({
symbol: this.config.symbol || 'BTC-USDT',
side: 'SELL',
type: 'LIMIT',
price: askPrice,
quantity: this.orderSize,
timeInForce: 'IOC'
});
}
// Đặt lệnh qua API
for (const order of orders) {
try {
await this.placeOrder(order);
} catch (error) {
console.error(Failed to place ${order.side} order:, error.message);
}
}
}
// Đặt lệnh
async placeOrder(order) {
const result = await this.apiRequest('POST', '/orders', order);
if (result.status === 'filled') {
console.log(✓ ${order.side} order filled: ${order.quantity} @ $${order.price});
} else if (result.status === 'new') {
console.log(○ ${order.side} order placed: ${order.quantity} @ $${order.price});
}
return result;
}
// Helper methods
calculateDepth(side, levels) {
const book = this.orderBook[side];
const prices = [...book.keys()].sort((a, b) =>
side === 'bids' ? b - a : a - b
).slice(0, levels);
return prices.reduce((sum, price) => sum + book.get(price), 0);
}
roundPrice(price) {
const decimals = this.config.priceDecimals || 2;
return Math.round(price * Math.pow(10, decimals)) / Math.pow(10, decimals);
}
// Lấy thống kê hiệu suất
getStats() {
const sortedLatencies = [...this.latencySamples].sort((a, b) => a - b);
const p99Index = Math.floor(sortedLatencies.length * 0.99);
return {
avgLatency: this.latencySamples.reduce((a, b) => a + b, 0) / this.latencySamples.length,
p99Latency: sortedLatencies[p99Index] || 0,
maxLatency: sortedLatencies[sortedLatencies.length - 1] || 0,
position: this.position,
tradeCount: this.tradeHistory.length,
wsConnected: this.isConnected
};
}
// Kết nối lại tự động
async reconnect() {
console.log('Attempting to reconnect in 5 seconds...');
await new Promise(resolve => setTimeout(resolve, 5000));
try {
await this.connect();
} catch (error) {
console.error('Reconnection failed:', error.message);
this.reconnect();
}
}
}
// Khởi tạo và chạy
async function main() {
console.log('='.repeat(60));
console.log('HolySheep AI - Market Making Engine v2.0');
console.log('='.repeat(60));
const engine = new MarketMakingEngine({
symbol: 'BTC-USDT',
spreadBps: 12,
orderSize: 0.05,
maxPosition: 2.0
});
// Health check trước khi kết nối
console.log('\n[Health Check] Testing API connectivity...');
try {
const health = await engine.apiRequest('GET', '/health');
console.log(✓ API Status: ${health.status});
} catch (error) {
console.error('✗ API unreachable:', error.message);
process.exit(1);
}
// Bắt đầu kết nối WebSocket
console.log('\n[Connection] Establishing WebSocket connection...');
await engine.connect();
// Monitor loop
console.log('\n[Monitoring] Starting performance monitor...');
setInterval(() => {
const stats = engine.getStats();
console.log([${new Date().toISOString()}] +
Latency: ${stats.avgLatency.toFixed(2)}ms (P99: ${stats.p99Latency.toFixed(2)}ms) | +
Position: ${stats.position.toFixed(4)} | +
Trades: ${stats.tradeCount} | +
WS: ${stats.wsConnected ? '✓' : '⚠'});
}, 10000);
console.log('\n' + '='.repeat(60));
console.log('Market Making Engine is running!');
console.log('Press Ctrl+C to stop.');
console.log('='.repeat(60));
}
main().catch(console.error);
Lỗi thường gặp và cách khắc phục
1. Lỗi 401 Unauthorized - Invalid API Key
Mô tả lỗi: Khi gọi API nhận được response {"error": "Invalid API key", "code": 401}
Nguyên nhân: API key không đúng hoặc chưa được kích hoạt. Đặc biệt hay xảy ra khi copy-paste key có chứa khoảng trắng thừa hoặc ký tự newline.
# ❌ SAI: Key có thể chứa ký tự thừa
api_key = "sk_live_xxxxxx\n" # Ký tự newline thừa
✅ ĐÚNG: Strip whitespace và validate format
def validate_api_key(key: str) -> str:
"""Validate và clean API key trước khi sử dụng"""
if not key:
raise ValueError("API key is required")
# Loại bỏ whitespace và newline
clean_key = key.strip()
# Kiểm tra format cơ bản
if not clean_key.startswith("sk_"):
raise ValueError(f"Invalid API key format. Expected 'sk_...' got '{clean_key[:5]}...'")
if len(clean_key) < 32:
raise ValueError("API key too short, may be truncated")
return clean_key
Sử dụng
api_key = validate_api_key(os.environ.get("HOLYSHEEP_API_KEY", "YOUR_HOLYSHEEP_API_KEY"))
print(f"API Key validated: {api_key[:8]}...{api_key[-4:]}")
2. Lỗi 429 Rate Limit Exceeded
Mô tả lỗi: Nhận được response {"error": "Rate limit exceeded", "retry_after": 1000}
Nguyên nhân: Gọi API quá nhanh trong khi HolySheep giới hạn 100 requests/giây cho tier miễn phí và 1000 requests/giây cho tier trả phí.
import asyncio
import time
from collections import deque
from typing import Optional
class RateLimiter:
"""Adaptive rate limiter với exponential backoff"""
def __init__(self, max_requests: int = 100, window_seconds: float = 1.0):
self.max_requests = max_requests
self.window_seconds = window_seconds
self.requests = deque()
self._lock = asyncio.Lock()
self.backoff_until: Optional[float] = None
async def acquire(self) -> None:
"""Chờ cho đến khi được phép gọi request"""
async with self._lock:
now = time.time()
# Kiểm tra backoff
if self.backoff_until and now