[英]Blocking Tyk Gateway middleware causing requests to queue up
我在 Docker 容器中具有 2 个 vCPU 的 AWS t3a.small
节点上运行 Tyk v3.0.1
。 我们通过custom_middleware_bundle
(Python) 实现了自定义逻辑。
我看到了间歇性错误,我可以归结为看起来像“单进程/单线程”的问题。 基本上,当我在阻塞的 Python 中间件中执行任何操作时,长时间运行的 HTTP 请求或出于演示目的time.sleep
,整个这个和所有其他使用该中间件的 API 变得无响应,对 Tyk 网关的请求排队直到阻塞操作完成。 对不使用中间件的其他 API 的请求正在成功处理。 我知道 Python 是单线程的。 但是,根据文档, “Tyk 将自动将自己分散到所有内核以处理流量” ,这让我假设它至少在多个进程中运行中间件,能够提供某种并发性。
我正在通过/opt/tyk-gateway/tyk --conf=/opt/tyk-gateway/tyk.conf
运行 Tyk。 这是我的 tyk.conf
{
"listen_port": 8080,
"secret": "XXXXX",
"template_path": "/opt/tyk-gateway/templates",
"tyk_js_path": "/opt/tyk-gateway/js/tyk.js",
"middleware_path": "/opt/tyk-gateway/middleware",
"use_db_app_configs": false,
"app_path": "/opt/tyk-gateway/apps/",
"storage": {
"type": "redis",
"host": "127.0.0.1",
"port": 6379,
"username": "",
"password": "",
"database": 0,
"optimisation_max_idle": 2000,
"optimisation_max_active": 4000
},
"enable_analytics": false,
"analytics_config": {
"type": "csv",
"csv_dir": "/tmp",
"mongo_url": "",
"mongo_db_name": "",
"mongo_collection": "",
"purge_delay": -1,
"ignored_ips": []
},
"health_check": {
"enable_health_checks": true,
"health_check_value_timeouts": 60
},
"optimisations_use_async_session_write": true,
"enable_non_transactional_rate_limiter": true,
"enable_sentinel_rate_limiter": false,
"enable_redis_rolling_limiter": false,
"allow_master_keys": false,
"policies": {
"policy_source": "file",
"policy_record_name": "/opt/tyk-gateway/policies/policies.json"
},
"hash_keys": true,
"close_connections": false,
"http_server_options": {
"enable_websockets": true,
"read_timeout": 300,
"write_timeout": 300
},
"allow_insecure_configs": true,
"coprocess_options": {
"enable_coprocess": true,
"coprocess_grpc_server": "",
"python_path_prefix": "/opt/tyk-gateway"
},
"enable_bundle_downloader": true,
"bundle_base_url": "http://127.0.0.1:8888",
"global_session_lifetime": 100,
"force_global_session_lifetime": false,
"max_idle_connections_per_host": 500,
"log_level": "info",
"proxy_default_timeout": 300
}
我们的 AWS t3a.small
节点有 2 个 vCPU。 以下是该容器的 CPU 特定 Docker 设置:
"CpuShares": 0,
"NanoCpus": 0,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"CpuCount": 0,
"CpuPercent": 0,
我可以做些什么来确保 Tyk Gateway 可以在仍然使用 Python 中间件的同时处理多个并行请求?
我认为单线程进程是一个插件警告/陷阱。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.