我的服务架构有以下服务:
我从多个客户端收到大量数据,并且我想将其插入到一组队列(Azure Service Bus)中,以便每个服务(在2.中)在从队列接收后处理它。
问题是我无法在队列中存储250K以上的邮件。
在处理并保存在Azure存储帐户中之前,存储这些1MB数据块的最佳做法是什么?
天真的解决方案:
单个实例微服务,它将数据保存在状态管理器中,只有一个引用将保存在队列中。
这种解决方案打破了微服务架构,因为它不具备可扩展性。
请帮忙吗?
答案 0 :(得分:2)
我同意Mikhail的观点,即从Web API层向blob存储写入每个请求是正确的解决方案。然后,您将对blob的引用进行排队,第二层服务实例将使这些引用出列并依次处理每个blob。
这是分布式系统中相当普遍的模式......每1 MB的blob存储请求都有成本,但是没有免费的午餐。除非您想在Web层中进行请求处理,否则您需要将请求数据保存在某处。听起来你已经决定反对Web层中的处理......这通常是一个很好的建议,但这取决于处理的性质,预期的请求量,VM功能等。
我不喜欢在Service Fabric中使用有状态的actor /服务来保存1 MB的请求有效负载,这很简单,因为请求数量(以及所需的RAM)扩展集群会很昂贵增长。考虑在整个集群中可靠地复制该1 MB状态(或避开复制并等待不可避免的问题),相对于其他选项,这几乎肯定是一个坏主意。
祝你好运!