在Akka.NET的帮助下,我参与了一组具有分布式处理功能的微服务的开发。
通常,他们由一些调度员和一些工人组成。默认情况下,Dispatcher将工作分配给其本地工作程序,但是当它[以某种方式]确定当前主机已超载时,则将工作分配给远程工作程序。
假设我们有10个主机(VM)和30个这样的服务(语义不同)。
问题是:如何正确缩放它们? 第一个解决方案是运行每个主机3个服务,能够在其他9台机器上按需自动扩展每个服务。并且在一段时间后不需要时缩小尺寸。 第二种解决方案是始终在所有10个主机上运行所有30个服务。
答案 0 :(得分:2)
在较高的层面上,您需要考虑容错,本地化,恢复,CAP等一般分布式计算问题。
除非您对不同的服务有不同的扩展需求,否则我可能会选择在所有主机上运行它们的第二种方法。这提供了更大的容错能力,并且在概念上比具有自动缩放功能更简单。但是,这假设您对每种类型的服务都有类似的需求,这意味着所有服务都会受到主机中断或故障的影响。如果一个特定的服务有不同的需求(即不同的SLA,非功能需求,需要更强大的机器等),那么每个服务的更专业的部署就有更多的争论。