Azure service fabric Azure服务结构可靠的集合和内存

Azure service fabric Azure服务结构可靠的集合和内存,azure-service-fabric,Azure Service Fabric,假设我在5个D1类(1核、3.5GB RAM、50GB SSD)虚拟机上运行一个服务结构集群。我在这个集群上运行了两个可靠的服务,一个是无状态的,一个是有状态的。假设复制目标为3 如何计算我的可靠收藏能容纳多少 假设我添加了一个或多个有状态服务。因为我不知道框架是如何分配服务的,所以我需要采取最保守的方法,假设一个节点可以在一个节点上运行我所有的有状态服务,并且它们的累积内存需要低于一台机器上可用的RAM吗 TLDR—估计集群的预期容量是一门艺术,也是一门科学。您可能会得到一个很好的下限,您可以

假设我在5个D1类(1核、3.5GB RAM、50GB SSD)虚拟机上运行一个服务结构集群。我在这个集群上运行了两个可靠的服务,一个是无状态的,一个是有状态的。假设复制目标为3

  • 如何计算我的可靠收藏能容纳多少

  • 假设我添加了一个或多个有状态服务。因为我不知道框架是如何分配服务的,所以我需要采取最保守的方法,假设一个节点可以在一个节点上运行我所有的有状态服务,并且它们的累积内存需要低于一台机器上可用的RAM吗


  • TLDR—估计集群的预期容量是一门艺术,也是一门科学。您可能会得到一个很好的下限,您可以将其推高,但在大多数情况下,在工作负载条件下部署、运行和收集数据是回答此问题的最佳方式

    1) 通常,给定计算机上的集合受可用内存量或节点上可用磁盘空间量的限制,以较低者为准。今天,我们将集合中的所有数据保存在内存中,并将其持久化到磁盘。因此,集群中的集合可以容纳的最大容量通常为(集群中的可用内存量)/(目标副本集大小)

    请注意,“可用内存”是机器上运行的其他代码(包括操作系统)留下的任何内容。在上面的示例中,虽然您没有在所有节点上运行,但您只能获得其中的3个节点。因此,(不切实际地)假设这些其他因素的开销为0,您可以期望在运行有状态服务副本的节点上的内存耗尽之前,能够将大约3.5 GB的数据放入该有状态服务副本中。集群中仍有2个节点为空

    让我们再举一个例子。假设它与上面的示例大致相同,只是在本例中设置了要分区的有状态服务。假设您选择的分区计数为5。现在,在每个节点上,您都有一个主副本和两个来自其他分区的辅助副本。在这种情况下,每个分区最多只能保存大约1.16 GB的状态,但现在总体上可以将5.83 GB的状态打包到集群中(因为所有节点现在都可以充分利用)。顺便说一句,为了证明数学是正确的,即(每个节点3.5 GB内存*集群中的5个节点)[17.5]/(目标副本集大小3)=5.83

    在所有这些示例中,我们还假设所有分区和所有副本的内存消耗是相同的。很多时候,结果都是不正确的(至少是暂时的)-一些分区可能会有更多或更少的工作要做,因此资源消耗不均衡。我们还假设二级选举和初选总是一样的。在状态量的情况下,可以公平地假设这些状态将相当均匀地跟踪,尽管对于其他资源消耗可能不是这样(只是需要记住)。在消耗不均匀的情况下,这正是Service Fabric的其余群集资源管理将有所帮助的地方,因为我们可以了解不同副本的消耗情况,并将它们高效地打包到群集中以利用可用空间。自动报告集合中与状态相关的资源消耗在我们的雷达上,这是我们想要做的事情,因此在未来,这将是自动的,但今天您必须自己报告此消耗

    2) 默认情况下,我们将根据默认度量来平衡服务(更多关于度量的信息请参阅)。因此,默认情况下,这两个不同服务的不同副本可能最终出现在计算机上,但在您的示例中,您将得到4个节点,其中1个来自该计算机上服务的副本,然后是1个节点,其中2个来自两个不同服务的副本。这意味着每个服务(根据您的示例,每个服务有一个分区)只能在每个服务中消耗1.75 GB内存,而集群中的内存总量为3.5 GB。这再次小于集群的总可用内存,因为有一些节点是您没有利用的

    请注意,这是可能的最大消耗量,并且假定在服务本身之外没有消耗量。把这当作你的最大限度是不可取的。出于几个原因,您可能希望减少它,但最实际的原因是确保在出现升级和故障时,集群中有足够的可用容量。例如,假设您有5个升级域和5个容错域。现在让我们假设,当您在升级域中进行升级时,容错域的节点数量会失败。这意味着(略少于)40%的集群容量可以随时消失,并且您可能希望在剩余节点上留有足够的空间继续。这意味着,如果您的集群以前可以容纳5.83 GB的状态(根据我们之前的计算),那么实际上您可能不希望在其中放置超过3.5 GB的状态,因为有了更多的状态,服务可能无法恢复到100%的正常状态(还要注意的是,我们不会立即构建替换副本,因此在遇到这种情况之前,节点必须在ReplicaRestartWaitDuration期间处于停机状态)。关于度量、容量和缓冲容量(您可以使用这些信息来确保节点上留有足够的空间来处理故障情况)还有更多信息故障域和升级域将在中介绍

    实际上,还有一些其他因素会限制您可以存储的状态量。您需要做几件事:

    • 估计数据的大小。通过计算对象所持有的每个字段的大小,可以预先合理估计数据的大小。