如何确定 Service Fabric 群集中节点类型的数量、节点数量和 VM 大小以获得相对简单但高吞吐量 API?
How do I determine the number of Node Types, Number of nodes and VM size in Service Fabric cluster for a relatively simple but high throughput API?
我有一个 Asp.Net 核心 2.0 Wen API,它的逻辑相对简单(SQL Azure DB 上的简单 select,return 关于1000-2000 条记录。没有连接、聚合、函数等)。我只有 1 个 GET API。这是从 angular SPA 调用的。两者都作为无状态服务部署在服务结构中,作为自托管 exe 托管在 Kestrel 中。
考虑到用户数量和他们刷新的频率,我确定每分钟大约有 15000 个请求。换句话说 250 req/sec.
我试图了解创建 Service Fabric 集群时的不同设置。
我想知道:
- 有多少节点类型? (我已经确定为前端和后端)
- 每个节点类型有多少个节点?
- 我需要 select 的 VM 大小是多少?
我已经准备好有关集群容量规划的 Azure documentation。虽然我理解这些概念,但我没有参考框架来确定我需要为上述问题提供的实际值。
在您阅读有关集群规划的大多数地方,他们会建议该主题是部分科学和部分艺术,因为这个问题没有简单的答案。很难回答这个问题,因为它在很大程度上取决于您的应用程序的复杂性,在不知道其工作原理的内部结构的情况下,我们只能猜测一个解决方案。
根据您的问题,我可以给您的最佳指导是 Measure first, Measure again, Measure... Plan later
。您的应用程序可能是内存密集型、网络密集型、CPU、磁盘等等,找到最佳配置的唯一方法是了解它。
要在对 SF 结构做出任何决定之前了解您的应用程序,您可以简单地部署一个具有多种节点类型的简单集群,其中包含每个 VM 大小的一个节点,并在每个节点上测量您的应用程序行为,然后您会添加更多节点并在这些节点上跨越多个服务实例,然后查看哪种配置最适合每个服务。
1.How many Node Types?
我喜欢将节点类型映射为 1:1 到您的应用程序中的角色,但这不是规律,这将取决于每个服务将消耗多少资源,如果服务消耗足够的资源来制作单个VM(node) busy (Memory, CPU, Disk, IO),这是拥有自己的节点类型的一个很好的候选者,在其他情况下,有些服务是轻量级的,这会浪费资源配置一个完整的 VM(节点),例如计划的作业、备份等,在这种情况下,您可以提供一组可以为这些服务共享的机器,这是您必须牢记的一件重要事情您与多个服务共享一个节点类型是因为它们将争夺资源(内存,CPU,网络,磁盘)并且您为每个服务单独采取的性能措施可能不再相同,因此它们会需要更多资源,选项是一起测试它们。
另一点是副本的数量,只有一个服务实例是不可靠的,所以你必须创建它的副本(我在下一个答案中描述的正确数字),在这种情况下你最终将服务负载拆分到多个节点,使该节点类型未得到充分利用,您可以考虑在同一节点类型上加入服务。
2.How many nodes per node type?
如前所述,这将取决于您的服务资源消耗,但一个非常基本的规则是每个节点类型至少 3 个。
为什么是 3?
因为 3 是您可以进行滚动更新并保证法定人数为 nodes\service\instances 运行.
51% 的最低数字
- 1个节点:如果你有一个服务运行1个实例在一个节点类型为1的节点,当如果您部署了新版本的服务,则必须在新版本出现之前关闭此实例,因此在升级时您将没有任何实例来为负载提供服务。
- 2 Nodes:类似于1个节点,但是在这种情况下你只保留1个节点运行,以防万一如果失败,在新实例出现之前你不会有故障转移来处理负载,如果你是 运行 有状态服务,情况会更糟,因为在升级期间你将只有一个数据副本,并且如果失败,您可能会丢失数据。
- 3 个节点:在更新期间您仍然有 2 个节点可用,当正在更新的节点返回时,下一个是放下,你还有2个节点运行,如果一个节点出现故障,另一个节点可以支撑负载,直到部署新节点。
3个节点并不意味着你的集群会非常可靠,这意味着失败和数据丢失的机会会更低,你可能会不幸同时松散2个节点。正如 docs 中所建议的那样,在生产环境中最好始终将节点数保持在 5 个或更多,并计划有 51% nodes\services 的法定人数可用。在这种情况下,如果您确实需要更长的正常运行时间,我会推荐 5、7 或 9 个节点 99.9999...%
3.What is the VM size I need to select?
如前所述,只有测量才能给出这个答案。
观察:
这些建议没有考虑到主节点类型的规划,建议主节点类型上至少有5个节点,是放置SF系统服务的地方,他们负责管理
集群,因此它们必须高度可靠,否则您可能会失去对集群的控制。如果您计划与您的应用程序服务共享这些节点,请记住您的服务可能会影响它们,因此您必须始终监控它们以检查它可能造成的任何影响。
我有一个 Asp.Net 核心 2.0 Wen API,它的逻辑相对简单(SQL Azure DB 上的简单 select,return 关于1000-2000 条记录。没有连接、聚合、函数等)。我只有 1 个 GET API。这是从 angular SPA 调用的。两者都作为无状态服务部署在服务结构中,作为自托管 exe 托管在 Kestrel 中。
考虑到用户数量和他们刷新的频率,我确定每分钟大约有 15000 个请求。换句话说 250 req/sec.
我试图了解创建 Service Fabric 集群时的不同设置。
我想知道:
- 有多少节点类型? (我已经确定为前端和后端)
- 每个节点类型有多少个节点?
- 我需要 select 的 VM 大小是多少?
我已经准备好有关集群容量规划的 Azure documentation。虽然我理解这些概念,但我没有参考框架来确定我需要为上述问题提供的实际值。
在您阅读有关集群规划的大多数地方,他们会建议该主题是部分科学和部分艺术,因为这个问题没有简单的答案。很难回答这个问题,因为它在很大程度上取决于您的应用程序的复杂性,在不知道其工作原理的内部结构的情况下,我们只能猜测一个解决方案。
根据您的问题,我可以给您的最佳指导是 Measure first, Measure again, Measure... Plan later
。您的应用程序可能是内存密集型、网络密集型、CPU、磁盘等等,找到最佳配置的唯一方法是了解它。
要在对 SF 结构做出任何决定之前了解您的应用程序,您可以简单地部署一个具有多种节点类型的简单集群,其中包含每个 VM 大小的一个节点,并在每个节点上测量您的应用程序行为,然后您会添加更多节点并在这些节点上跨越多个服务实例,然后查看哪种配置最适合每个服务。
1.How many Node Types?
我喜欢将节点类型映射为 1:1 到您的应用程序中的角色,但这不是规律,这将取决于每个服务将消耗多少资源,如果服务消耗足够的资源来制作单个VM(node) busy (Memory, CPU, Disk, IO),这是拥有自己的节点类型的一个很好的候选者,在其他情况下,有些服务是轻量级的,这会浪费资源配置一个完整的 VM(节点),例如计划的作业、备份等,在这种情况下,您可以提供一组可以为这些服务共享的机器,这是您必须牢记的一件重要事情您与多个服务共享一个节点类型是因为它们将争夺资源(内存,CPU,网络,磁盘)并且您为每个服务单独采取的性能措施可能不再相同,因此它们会需要更多资源,选项是一起测试它们。
另一点是副本的数量,只有一个服务实例是不可靠的,所以你必须创建它的副本(我在下一个答案中描述的正确数字),在这种情况下你最终将服务负载拆分到多个节点,使该节点类型未得到充分利用,您可以考虑在同一节点类型上加入服务。
2.How many nodes per node type?
如前所述,这将取决于您的服务资源消耗,但一个非常基本的规则是每个节点类型至少 3 个。
为什么是 3?
因为 3 是您可以进行滚动更新并保证法定人数为 nodes\service\instances 运行.
51% 的最低数字- 1个节点:如果你有一个服务运行1个实例在一个节点类型为1的节点,当如果您部署了新版本的服务,则必须在新版本出现之前关闭此实例,因此在升级时您将没有任何实例来为负载提供服务。
- 2 Nodes:类似于1个节点,但是在这种情况下你只保留1个节点运行,以防万一如果失败,在新实例出现之前你不会有故障转移来处理负载,如果你是 运行 有状态服务,情况会更糟,因为在升级期间你将只有一个数据副本,并且如果失败,您可能会丢失数据。
- 3 个节点:在更新期间您仍然有 2 个节点可用,当正在更新的节点返回时,下一个是放下,你还有2个节点运行,如果一个节点出现故障,另一个节点可以支撑负载,直到部署新节点。
3个节点并不意味着你的集群会非常可靠,这意味着失败和数据丢失的机会会更低,你可能会不幸同时松散2个节点。正如 docs 中所建议的那样,在生产环境中最好始终将节点数保持在 5 个或更多,并计划有 51% nodes\services 的法定人数可用。在这种情况下,如果您确实需要更长的正常运行时间,我会推荐 5、7 或 9 个节点 99.9999...%
3.What is the VM size I need to select?
如前所述,只有测量才能给出这个答案。
观察:
这些建议没有考虑到主节点类型的规划,建议主节点类型上至少有5个节点,是放置SF系统服务的地方,他们负责管理 集群,因此它们必须高度可靠,否则您可能会失去对集群的控制。如果您计划与您的应用程序服务共享这些节点,请记住您的服务可能会影响它们,因此您必须始终监控它们以检查它可能造成的任何影响。