产品定价 立即试用
社区版
文档 > 其他功能 > API限制
入门
指南 安装 架构 API 常见问题

API与速率限制

API&RateLimits功能通过限制单个host/device/tenant在单位时间(分钟、小时等)内的请求数来控制API使用量。

API&RateLimits默认关闭。系统管理员可通过thingsboard.yml配置速率限制。

REST API限制

RESTAPI调用被各类UI组件及可能代表客户用户或租户用户运行的自动脚本使用。 限制租户或客户的API调用量至关重要,以避免因自定义部件或脚本错误导致服务器过载。

rest.limits.tenant.enabled 参数或 TB_SERVER_REST_LIMITS_TENANT_ENABLED 环境变量用于启用/禁用租户级限制。

rest.limits.tenant.configuration 参数或 TB_SERVER_REST_LIMITS_TENANT_CONFIGURATION 环境变量用于配置RESTAPI调用的最大数量。 例如,值”100:1,2000:60”表示每秒不超过100次请求、每分钟不超过2000次请求。

1
2
3
4
5
6
7
8
9
10
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限制

WebSocket用于将设备的新遥测值实时推送到仪表板。

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_* 环境变量控制每类实体(tenant、customer、public或regularuser)的最大活动连接数。 若某类实体的会话数过多,新连接将被拒绝。

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次更新。

示例配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server:
  ...
  ws:
    send_timeout: "${TB_SERVER_WS_SEND_TIMEOUT:5000}"
    limits:
      # 限制每台服务器上可用的会话数量和订阅数。将值设置为零以禁用特定限制
      max_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}"

数据库速率限制

尽管已对RESTAPI调用量进行限制,但部分调用可能产生多次数据库查询。规则链在消息处理期间同样可能产生大量查询。 单次telemetry上传也会产生数据库查询以将数据写入DB。

可针对CassandraDB指定限制,并可配置打印统计信息的参数。例如:

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次更新。

1
2
3
4
5
6
7
8
9
10
11
# Cassandra driver configuration parameters
cassandra:
  ...
  # Cassandra cluster connection query parameters
  query:
  ...
    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层生效,在消息推送到规则引擎之前应用。

transport.rate_limits.tenant.configuration 参数或 TB_TRANSPORT_RATE_LIMITS_TENANT 环境变量用于配置每个租户所有设备的最大消息数。 例如,值”1000:1,20000:60”表示每秒不超过1000条消息、每分钟不超过20000次更新。

transport.rate_limits.device.configuration 参数或 TB_TRANSPORT_RATE_LIMITS_DEVICE 环境变量用于配置单个设备的最大消息数。 例如,值”10:1,300:60”表示每秒不超过10条消息、每分钟不超过300次更新。

1
2
3
4
5
6
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}"

下一步