:::info
匹配版本:V3.20
页面状态:翻译中
原文地址:点击跳转
:::
API & Rate 限制允许通过限制在单位时间(分钟、小时等)一个主机/设备/租户的请求次数来控制API的使用。
API & Rate 限制默认关闭。系统管理员可以在 thingsboard.yml 文件中配置 Rate 限制。
REST API 限制
所有类型的 UI 组件都使用 REST API 调用,可能还有一些代表客户用户或租户用户启动的自动脚本。限制租户或客户 API 调用的数量非常重要,以避免由于自定义部件或脚本中的错误而导致服务器过载。
使用rest.limits.tenant.enabled参数或TB_SERVER_REST_LIMITS_TENANT_ENABLED环境属性来**启用/关闭**租户级的限制。rest.limits.tenant.configuration参数或TB_SERVER_REST_LIMITS_TENANT_CONFIGURATION环境属性用于配置的 REST API 调用的最大次数。 例如,值100:1,2000:60表示每秒不超过100个请求,每分钟不超过2000个请求。
server:...rest:limits:tenant:enabled: "${TB_SERVER_REST_LIMITS_TENANT_ENABLED:false}"configuration: "${TB_SERVER_REST_LIMITS_TENANT_CONFIGURATION:100:1,2000:60}"customer:enabled: "${TB_SERVER_REST_LIMITS_CUSTOMER_ENABLED:false}"configuration: "${TB_SERVER_REST_LIMITS_CUSTOMER_CONFIGURATION:50:1,1000:60}"
Websocket 限制
Websockets 用于把从设备新获取的遥测数据的实时通知发送到仪表板。ws.send_timeout 参数和 TB_SERVER_WS_SEND_TIMEOUT 环境属性限制向客户端成功传递 websocket 消息的超时时间。如果客户端太慢,会话将被关闭。ws.limits.max_queue_per_ws_session 参数或 TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_QUEUE_PER_WS_SESSION 环境属性限制等待传递给客户端的最大消息。如果客户端太慢,会话将被关闭。ws.limits.max_sessions_per_*参数或TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_SESSIONS_PER_*环境属性限制每个特定实体的最大活动连接数量:租户、客户、公共用户或常规用户。如果在每个特定标准内有太多的会话,就会删除新的连接。ws.limits.max_subscriptions_per_*参数或TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_SUBSCRIPTIONS_PER_*环境属性限制每个特定实体(租户、客户、公共用户或常规用户)的所有会话中的最大活动订阅量。如果在每个特定标准内有太多订阅,则不接受新订阅。ws.limits.max_updates_per_session参数TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_UPDATES_PER_SESSION 环境属性可以为每个会话配置从服务器发送到客户端的最大消息量。例如,值300:1、3000:60表示每秒不超过300次更新,每分钟不超过3000次更新。
您可以在下面找到示例配置:
server:...ws:send_timeout: "${TB_SERVER_WS_SEND_TIMEOUT:5000}"limits:# Limit the amount of sessions and subscriptions available on each server. Put values to zero to disable particular limitationmax_sessions_per_tenant: "${TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_SESSIONS_PER_TENANT:0}"max_sessions_per_customer: "${TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_SESSIONS_PER_CUSTOMER:0}"max_sessions_per_regular_user: "${TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_SESSIONS_PER_REGULAR_USER:0}"max_sessions_per_public_user: "${TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_SESSIONS_PER_PUBLIC_USER:0}"max_queue_per_ws_session: "${TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_QUEUE_PER_WS_SESSION:500}"max_subscriptions_per_tenant: "${TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_SUBSCRIPTIONS_PER_TENANT:0}"max_subscriptions_per_customer: "${TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_SUBSCRIPTIONS_PER_CUSTOMER:0}"max_subscriptions_per_regular_user: "${TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_SUBSCRIPTIONS_PER_REGULAR_USER:0}"max_subscriptions_per_public_user: "${TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_SUBSCRIPTIONS_PER_PUBLIC_USER:0}"max_updates_per_session: "${TB_SERVER_WS_TENANT_RATE_LIMITS_MAX_UPDATES_PER_SESSION:300:1,3000:60}"
数据库的速度限制
尽管我们通过REST API调用的数量来限制用户,但是有些调用可能会生成不止一个数据库查询。类似地,规则链也可能在消息处理期间导致大量查询。单次遥测上传也会导致数据库查询将数据写入数据库。
您可以指定 Cassandra 数据库的限制,还可以指定打印统计数据的参数。例如:
2018-11-29 10:51:25,020 [SockJS-1] INFO o.t.s.d.n.CassandraBufferedRateExecutor -Permits queueSize [0] totalAdded [6395] totalLaunched [6395] totalReleased [6396] totalFailed [0] totalExpired [0]totalRejected [0] totalRateLimited [0] totalRateLimitedTenants [0] currBuffer [0]
还可以指定打印超过阈值的租户名称。cassandra.query.tenant_rate_limits.configuration 参数 CASSANDRA_QUERY_TENANT_RATE_LIMITS_CONFIGURATION 环境属性用于配置每个租户的最大查询量。例如,值1000:1,30000:60表示每秒不超过1000次更新,每分钟不超过30000次更新。
# Cassandra driver configuration parameterscassandra:...# Cassandra cluster connection query parametersquery:...rate_limit_print_interval_ms: "${CASSANDRA_QUERY_RATE_LIMIT_PRINT_MS:10000}"tenant_rate_limits:enabled: "${CASSANDRA_QUERY_TENANT_RATE_LIMITS_ENABLED:false}"configuration: "${CASSANDRA_QUERY_TENANT_RATE_LIMITS_CONFIGURATION:1000:1,30000:60}"print_tenant_names: "${CASSANDRA_QUERY_TENANT_RATE_LIMITS_PRINT_TENANT_NAMES:false}"
传输速度限制
限制从单个设备或每个租户的所有设备接受的消息数量是非常重要的。此限制应用于传输层,在消息被推送到规则引擎之前。transport.rate_limits.tenant.configuration 参数或 TB_TRANSPORT_RATE_LIMITS_TENANT 环境属性用于配置来自每个租户的所有设备的最大消息量。例如,值1000:1,20000:60表示每秒不超过1000条消息,每分钟不超过20000条更新。transport.rate_limits.tenant.configuration参数或TB_TRANSPORT_RATE_LIMITS_DEVICE环境属性配置来自单个设备的最大消息量。例如,值10:1,300:60表示每秒不超过10条消息,每分钟不超过300次更新。
transport:...rate_limits:enabled: "${TB_TRANSPORT_RATE_LIMITS_ENABLED:false}"tenant: "${TB_TRANSPORT_RATE_LIMITS_TENANT:1000:1,20000:60}"device: "${TB_TRANSPORT_RATE_LIMITS_DEVICE:10:1,300:60}"
