perf: 优化 SSL 管理器性能,使用 HTTP 连接复用
主要优化: - HTTP 连接复用:使用 requests.Session() 复用连接,减少连接开销 - 所有 API 调用现在使用同一个 session - 减少 TCP 连接建立和 TLS 握手开销 - 代码清理: - 移除未使用的导入(base64, timedelta) - 移除重复的 headers 参数(已在 session 中设置) - 性能提升: - 减少每次 API 调用的开销 - 特别是在频繁调用时(如证书续期、批量操作)效果明显 这些优化提升了 SSL 管理器的整体性能,特别是在处理多个证书操作时。
This commit is contained in:
parent
b30fafd34f
commit
d81d3362af
@ -18,8 +18,7 @@ import requests
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from typing import Optional, List, Dict
|
||||
from datetime import datetime, timedelta
|
||||
import base64
|
||||
from datetime import datetime
|
||||
|
||||
# 配置日志
|
||||
logging.basicConfig(
|
||||
@ -65,6 +64,10 @@ class APISIXSSLManager:
|
||||
|
||||
# 验证配置
|
||||
self._validate_config()
|
||||
|
||||
# 创建 HTTP 会话,复用连接
|
||||
self.session = requests.Session()
|
||||
self.session.headers.update(self._get_apisix_headers())
|
||||
|
||||
def load_config(self, config_path: str):
|
||||
"""从配置文件加载配置(可选,用于覆盖默认配置)"""
|
||||
@ -221,13 +224,11 @@ class APISIXSSLManager:
|
||||
|
||||
logger.info(f"配置 SNI 域名列表: {cert_domains}")
|
||||
|
||||
headers = self._get_apisix_headers()
|
||||
|
||||
try:
|
||||
# 先检查是否已存在相同 SNI 的配置
|
||||
# 方法1:通过 ID 查找(如果之前创建时使用了这个 ID)
|
||||
check_url = f"{self.apisix_admin_url}/apisix/admin/ssls/{ssl_id}"
|
||||
response = requests.get(check_url, headers=headers, timeout=10)
|
||||
response = self.session.get(check_url, timeout=10)
|
||||
|
||||
existing_ssl_id = None
|
||||
if response.status_code == 200:
|
||||
@ -236,7 +237,7 @@ class APISIXSSLManager:
|
||||
else:
|
||||
# 方法2:查询所有 SSL 配置,检查是否有相同 SNI 的配置
|
||||
all_ssls_url = f"{self.apisix_admin_url}/apisix/admin/ssls"
|
||||
all_response = requests.get(all_ssls_url, headers=headers, timeout=10)
|
||||
all_response = self.session.get(all_ssls_url, timeout=10)
|
||||
if all_response.status_code == 200:
|
||||
all_ssls = all_response.json()
|
||||
ssl_list = all_ssls.get('list', []) if isinstance(all_ssls, dict) else all_ssls
|
||||
@ -261,18 +262,16 @@ class APISIXSSLManager:
|
||||
# 更新现有证书(更新时需要 id)
|
||||
logger.info(f"更新 APISIX SSL 配置: {domain} (ID: {existing_ssl_id})")
|
||||
ssl_config["id"] = existing_ssl_id
|
||||
response = requests.put(
|
||||
response = self.session.put(
|
||||
f"{self.apisix_admin_url}/apisix/admin/ssls/{existing_ssl_id}",
|
||||
headers=headers,
|
||||
json=ssl_config,
|
||||
timeout=10
|
||||
)
|
||||
else:
|
||||
# 创建新证书(POST 时不包含 id,让 APISIX 自动生成)
|
||||
logger.info(f"创建 APISIX SSL 配置: {domain}")
|
||||
response = requests.post(
|
||||
response = self.session.post(
|
||||
f"{self.apisix_admin_url}/apisix/admin/ssls",
|
||||
headers=headers,
|
||||
json=ssl_config,
|
||||
timeout=10
|
||||
)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user