小编Dim*_*y K的帖子

我应该将哪个域名作为IoT MQTT端点烘焙到我的IoT设备中?

情况描述

因此,当我在工厂中构建我的超级传感器时,它将通过MQTT每隔30秒向AWS IoT发送其指标,我必须在设备中烘焙传感器将要连接的DNS域名.

AWS IoT建议在表单中使用端点<random-string>.iot.eu-west-1.amazonaws.com,对我而言A26PKG2U6WRS2I.iot.eu-west-1.amazonaws.com

这是稍微格式化的dig A26PKG2U6WRS2I.iot.eu-west-1.amazonaws.com命令输出,显示在少数重定向后,此域名解析为6个IP地址,这似乎是负载平衡器.

DOMAIN DETAILS: 

A26PKG2U6WRS2I.iot.eu-west-1.amazonaws.com. 290 
POINTS TO CNAME 
iotmoonraker.eu-west-1.prod.iot.eu-west-1.amazonaws.com.


iotmoonraker.eu-west-1.prod.iot.eu-west-1.amazonaws.com. 254 
POINTS TO CNAME 
dualstack.iotmoonraker-e-elb-9q2vvmxp3rir-1271985754.eu-west-1.elb.amazonaws.com.

RESOLVES TO IPs:
dualstack.iotmoonraker-e-elb-9q2vvmxp3rir-1271985754.eu-west-1.elb.amazonaws.com. 50 IN A 54.229.34.249
dualstack.iotmoonraker-e-elb-9q2vvmxp3rir-1271985754.eu-west-1.elb.amazonaws.com. 50 IN A 52.19.106.35
dualstack.iotmoonraker-e-elb-9q2vvmxp3rir-1271985754.eu-west-1.elb.amazonaws.com. 50 IN A 52.18.139.53
dualstack.iotmoonraker-e-elb-9q2vvmxp3rir-1271985754.eu-west-1.elb.amazonaws.com. 50 IN A 52.48.96.41
dualstack.iotmoonraker-e-elb-9q2vvmxp3rir-1271985754.eu-west-1.elb.amazonaws.com. 50 IN A 52.19.155.13
dualstack.iotmoonraker-e-elb-9q2vvmxp3rir-1271985754.eu-west-1.elb.amazonaws.com. 50 IN A 54.76.47.209
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  • 当我在C中为我的PIC单片机实现MQTT通信时,我的DNS解析器会被单个域可以解析的许多IP混淆.目前我不知道我是否可以解决这个问题.目前我的解决方案是 - 创建自己的域名iot-ingestion.domain-i-own.com 并将其指向其中一个IP地址.有更好的选择吗?

  • A26PKG2U6WRS2I.iot.eu-west-1.amazonaws.com主机名烘焙到我的设备中是多么可靠?如果我想在2 - 3年内切换更改IoT堆栈并切换到不同的技术/提供商,该怎么办?

dns amazon-web-services mqtt iot aws-iot

6
推荐指数
1
解决办法
1702
查看次数

我应该将 Cache-Control: no-cache 添加到我的 REST API 的 GET 端点吗?

创建使用 POST/PUT 的 REST API 很简单。它们是非幂等的,因此默认情况下不会被浏览器缓存。

但是,在创建 GET 端点时,事情变得更棘手了。我担心浏览器(或特定浏览器)在默认情况下会尝试缓存 GET 请求,而我最终会得到陈旧的数据。

这种对激进缓存的恐惧是真的吗?

让我们以端点为例GET /articles/123/comments

尽管这个端点是一个 GET 端点,但每个请求都可以返回不同的内容,因为文章的评论被提交。

  • 这会被缓存吗?
  • 它会被特定的攻击性浏览器缓存吗?

假设没有与响应提供的缓存相关的标头。

content-length: 2518
content-type: application/json
date: Thu, 17 Oct 2019 07:51:59 GMT
status: 200

Run Code Online (Sandbox Code Playgroud)

避免 GET 请求的陈旧数据的最佳实践是什么?

似乎有不同的策略来解决这个问题,但最好的方法是什么?

  • 通过唯一的查询字符串缓存破坏我的 GET 调用?

    例如。 GET /articles/123/comments?nonce=12312310980923409

  • 添加Cache-Control: no-cache(这会一直受到尊重吗?)

  • 添加ETag: xyz_HASH_OF_MY_LIST_OF_COMMENTS

  • 添加Cache-Control: max-age=0(禁用缓存)

  • 添加Cache-Control: max-age=60(以减少缓存的最大持续时间)

  • 只是不要担心并假设没有像ETag, Last-ModifiedGET 请求这样的标头不会被任何浏览器缓存?

caching http http-caching browser-cache offline-caching

6
推荐指数
1
解决办法
1247
查看次数

如何在 DynamoDB 中更新项目并维护 CreatedAt 和 UpdatedAt 字段?

我正在尝试将网络测验的答案保存到 DynamoDB 表中。每次提交答案时,最终都会调用下面的代码。例如。对于 3 个答案,它将被调用 3 次。

每次添加答案时,字段UpdatedAt都会更新为当前时间戳。这让我知道上次提交的答案是什么时候。但是我也想知道第一个答案是什么时候提交的,因此我也需要CreatedAt字段。我想知道如何实现?

(我正在检查ConditionalCheckExpression,但它似乎适用于整个更新操作。而我需要找到一种CreatedAt仅在第一次插入项目时进行更新的方法)。

    const now = new Date();
    let updateParams = {
        TableName: process.env.TABLE_RESULTS, 
        Key: {
            QuizId: '' + quiz_id,
            SessionId: '' + session_key,
        },
        UpdateExpression: `SET #QQ_ID = :answer, #updatedAt = :updatedAt`,
        ExpressionAttributeNames: {
            '#QQ_ID'   : `QQ_${question_id}`,
            '#updatedAt': 'UpdatedAt',
        },
        ExpressionAttributeValues: {
            ':answer': answer,
            ':updatedAt' : now.toISOString(), 
        }
    };

    let result = await doc.update(updateParams).promise();
Run Code Online (Sandbox Code Playgroud)

amazon-dynamodb

4
推荐指数
1
解决办法
2088
查看次数