技术交流

学习资料

立即试用 商务报价
社区版
社区版 专业版 云服务 Edge Edge PE 网关 授权服务 Trendz分析 Mobile 应用程序 Mobile PE应用程序
文档 > 其它特点 > API限制
入门
指南 安装 架构 API 常见问题

API限流

API和速率限制功能可通过限制单个时间单位(分钟,小时等)中来自单个主机/设备/租户的请求数量来控制API使用。

默认情况下API和费率限制为禁用状态系统管理员可以使用[thingsboard.yml进行启用。

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个请求。

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_timeoutTB_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_sessionTB_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:
      # Limit the amount of sessions and subscriptions available on each server. Put values to zero to disable particular limitation
      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}"

数据库限制

尽管通过REST API调用的数量来限制用户但是某些调用可能会产生不止一个数据库查询同样规则链也可能在消息处理期间引起很多查询,单个遥测上传还导致数据库查询将数据写入DB。
你可以指定Cassandra DB的限制也可以指定参数以打印统计信息。例如:

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.configurationCASSANDRA_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.rate_limits.tenant.configurationTB_TRANSPORT_RATE_LIMITS_TENANT参数从每个租户所有设备消息的最大数量,例如”1000:1,20000:60”表示每秒不超过1000条消息每分钟不超过20000条更新。

transport.rate_limits.tenant.configurationTB_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}"

下一步

  • 入门指南 - 快速学习ThingsBoard相关功能。

  • 安装指南 - 学习如何在各种操作系统上安装ThingsBoard。

  • 连接设备 - 学习如何根据你的连接方式或解决方案连接设备。

  • 可 视 化 - 学习如何配置复杂的ThingsBoard仪表板说明。

  • 数据处理 - 学习如何使用ThingsBoard规则引擎。

  • 数据分析 - 学习如何使用规则引擎执行基本的分析任务。

  • 硬件样品 - 学习如何将各种硬件平台连接到ThingsBoard。

  • 开发指南 - 学习ThingsBoard中的贡献和开发。