mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
refactor: 增加内存保护措施,精简启动任务
- 流式响应不再存储完整文本,仅记录长度用于 token 估算 - complete_response 文本累积增加 64KB 上限保护 - 通知缓冲区(email/webhook)增加溢出保护,超限丢弃旧通知 - 熔断器淘汰策略改进,全部 open/half-open 时按最旧失败时间淘汰 - 移除启动时清理任务和统计聚合回填,减少启动负担 - token 估算简化为基于长度的方法,避免持有完整文本
This commit is contained in:
@@ -208,11 +208,21 @@ class ResilienceManager:
|
||||
def get_circuit_breaker(self, key: str) -> CircuitBreaker:
|
||||
"""获取或创建熔断器"""
|
||||
if key not in self.circuit_breakers:
|
||||
# 淘汰已恢复的旧熔断器,防止无界增长
|
||||
# 淘汰旧熔断器,防止无界增长
|
||||
if len(self.circuit_breakers) >= self._MAX_CIRCUIT_BREAKERS:
|
||||
# 优先淘汰已恢复(closed)的
|
||||
closed_keys = [k for k, cb in self.circuit_breakers.items() if cb.state == "closed"]
|
||||
for k in closed_keys:
|
||||
del self.circuit_breakers[k]
|
||||
if closed_keys:
|
||||
for k in closed_keys:
|
||||
del self.circuit_breakers[k]
|
||||
else:
|
||||
# 全部处于 open/half-open,按最后失败时间淘汰最旧的一半
|
||||
sorted_keys = sorted(
|
||||
self.circuit_breakers,
|
||||
key=lambda cb_key: self.circuit_breakers[cb_key].last_failure_time or 0,
|
||||
)
|
||||
for k in sorted_keys[: len(sorted_keys) // 2 or 1]:
|
||||
del self.circuit_breakers[k]
|
||||
self.circuit_breakers[key] = CircuitBreaker()
|
||||
return self.circuit_breakers[key]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user