想象有一个网络服务:
- 在服务器集群 (nginx/node.js) 上运行
- 所有数据都远程存储
- 必须在 20ms 内响应
必须为响应读取的数据是这样拆分的..
批次A
- 数百万个存储在 AWS DynamoDB 中的小对象
- 在随机时间随机更新
- 只有一致的读取,不能被捕获
批次B
- 约 2,000 条 SQL 记录
- 很少更新,记录最多1KB
- 最长可捕获 60-90 秒
我们不能一次全部读取它们,因为我们不知道从 BatchB 中获取哪些记录,直到我们从 BatchA 中读取。
从 DynamoDB 读取最多需要 10 毫秒。如果我们从远程位置读取 BatchB,我们将没有时间进行计算,或者我们已经超时。
我目前的想法是将所有 BatchB 记录加载到每个节点的内存中(只有 ~2MB)。启动时,系统将连接到 SQL 服务器并获取所有记录,然后每 60 或 90 秒更新一次。问题是最好的方法是什么?
我可以简单地将它们全部读入 node.js 中的变量(数组),然后在 60-90 秒后使用 SetTimeout 更新数组。但这是最好的解决方案吗?