保留从客户端接收到的大数据直到被处理
Keep big sized data received from clients until processed
我有包含以下服务的服务结构:
- 接收请求的无状态 web-api,当每个请求有一个 1MB 的字节数组时。
- 处理数据并将其写入 Azure 存储帐户的服务。
我从多个客户端收到大量数据,我想将其插入一组队列(Azure 服务总线),以便每个服务(在 2. 中)在从排队。
问题是我无法在队列中存储超过 250K 的消息。
在 Azure 的存储帐户中处理并保存这些 1MB 数据块之前,存储这些数据块的最佳做法是什么?
天真的解决方案:
A single instance micro-service that holds the data in the state manager and only a reference will be saved in the queue.
这个解决方案打破了微服务架构,因为它不可扩展。
请帮忙?
我同意 Mikhail 的观点,即从 Web API 层将每个请求写入 blob 存储是正确的解决方案。然后,您将对 blob 的引用排队,您的第二层服务实例将使这些引用出列并依次处理每个 blob。
这是分布式系统中相当常见的模式...每个 1 MB 的 blob 存储请求都会产生成本,但天下没有免费的午餐。除非您想在 Web 层中进行请求处理,否则您需要将请求数据保存在某处。听起来您已经决定不在 Web 层中处理...这通常是个好建议,但这取决于处理的性质、您预期的请求量、VM 功能等。
我不喜欢在 Service Fabric 中使用有状态 actors/services 来保存 1 MB 请求负载的想法,因为一个简单的事实是,根据请求计数(并且需要)扩展集群会变得昂贵内存)增长。考虑跨集群可靠复制 1 MB 状态(或避免复制并等待不可避免的问题),相对于其他选项,这几乎肯定是个坏主意。
祝你好运!
我有包含以下服务的服务结构:
- 接收请求的无状态 web-api,当每个请求有一个 1MB 的字节数组时。
- 处理数据并将其写入 Azure 存储帐户的服务。
我从多个客户端收到大量数据,我想将其插入一组队列(Azure 服务总线),以便每个服务(在 2. 中)在从排队。
问题是我无法在队列中存储超过 250K 的消息。
在 Azure 的存储帐户中处理并保存这些 1MB 数据块之前,存储这些数据块的最佳做法是什么?
天真的解决方案:
A single instance micro-service that holds the data in the state manager and only a reference will be saved in the queue.
这个解决方案打破了微服务架构,因为它不可扩展。
请帮忙?
我同意 Mikhail 的观点,即从 Web API 层将每个请求写入 blob 存储是正确的解决方案。然后,您将对 blob 的引用排队,您的第二层服务实例将使这些引用出列并依次处理每个 blob。
这是分布式系统中相当常见的模式...每个 1 MB 的 blob 存储请求都会产生成本,但天下没有免费的午餐。除非您想在 Web 层中进行请求处理,否则您需要将请求数据保存在某处。听起来您已经决定不在 Web 层中处理...这通常是个好建议,但这取决于处理的性质、您预期的请求量、VM 功能等。
我不喜欢在 Service Fabric 中使用有状态 actors/services 来保存 1 MB 请求负载的想法,因为一个简单的事实是,根据请求计数(并且需要)扩展集群会变得昂贵内存)增长。考虑跨集群可靠复制 1 MB 状态(或避免复制并等待不可避免的问题),相对于其他选项,这几乎肯定是个坏主意。
祝你好运!