- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始为我的 Service Fabric 应用程序编写一些动态端点发现,并正在寻找有关如何解析服务端点的示例。我在 stackoverflow 上找到了以下代码示例:
https://stackoverflow.com/a/38562986/4787510
我对此做了一些细微的改变,所以这是我的代码:
private readonly FabricClient m_fabricClient
public async Task RefreshEndpointList()
{
var appList = await m_fabricClient.QueryManager.GetApplicationListAsync();
var app = appList.Single(x => x.ApplicationName.ToString().Contains("<MyFabricDeploymentName>"));
// Go through all running services
foreach (var service in await m_fabricClient.QueryManager.GetServiceListAsync(app.ApplicationName))
{
var partitions = await m_fabricClient.QueryManager.GetPartitionListAsync(service.ServiceName);
// Go through all partitions
foreach (var partition in partitions)
{
// Check what kind of service we have - depending on that the resolver figures out the endpoints.
// E.g. Singleton is easy as it is just one endpoint, otherwise we need some load balancing later on
ServicePartitionKey key;
switch (partition.PartitionInformation.Kind)
{
case ServicePartitionKind.Singleton:
key = ServicePartitionKey.Singleton;
break;
case ServicePartitionKind.Int64Range:
var longKey = (Int64RangePartitionInformation)partition.PartitionInformation;
key = new ServicePartitionKey(longKey.LowKey);
break;
case ServicePartitionKind.Named:
var namedKey = (NamedPartitionInformation)partition.PartitionInformation;
key = new ServicePartitionKey(namedKey.Name);
break;
default:
throw new ArgumentOutOfRangeException($"Can't resolve partition kind for partition with id {partition.PartitionInformation.Id}");
}
var resolvedServicePartition = await ServicePartitionResolver.GetDefault().ResolveAsync(service.ServiceName, key, CancellationToken.None);
m_endpointCache.PutItem(service.ServiceTypeName, new ServiceDetail(service.ServiceTypeName, service.ServiceKind, ServicePartitionKind.Int64Range, resolvedServicePartition.Endpoints));
}
}
}
}
我很高兴找到了这个片段,但是在研究它的过程中,我发现了一件事让我有点困惑。
所以,在阅读了 SF 文档之后,据我了解,这似乎是它从上到下遵循的架构:
Service Fabric 集群 -> Service Fabric 应用程序(例如 myApp_Fabric) -> 服务(例如前端服务、个人资料图片微服务、后端服务)
从服务中我们可以深入到分区,而分区基本上类似于集群中节点上的“容器”,其中可以驻留多个实例(副本),实例是服务的实际部署。
不过,我不太确定节点/分区/副本差异是否正确。
但是,回到我的困惑和实际问题:
为什么有关分区策略(singleton、intRange、named)的信息附加到分区信息中,而不是服务本身?据我了解,分区基本上是我如何将服务配置为跨服务结构节点分布的产物。
那么,为什么分区策略不直接与服务绑定(bind)?
最佳答案
关于Service Fabric中的服务,有两种类型:有状态服务和无状态服务。
无状态服务不使用可靠集合来处理状态。如果它们需要维护状态,则必须依赖外部持久性解决方案,例如数据库等。由于它们不处理可靠集合提供的状态,因此它们被分配了 Singelton 分区类型。
有状态服务能够将状态存储在可靠的集合中。为了能够扩展这些服务,这些集合中的数据应该按分区进行划分。每个服务实例都分配有一个特定的分区。每个服务指定分区数量,如下例所示:
<Service Name="Processing">
<StatefulService ServiceTypeName="ProcessingType" TargetReplicaSetSize="3" MinReplicaSetSize="3">
<UniformInt64Partition PartitionCount="26" LowKey="0" HighKey="25" />
</StatefulService>
</Service>
因此,鉴于上面的示例,我不明白您最后关于分区策略不直接与服务绑定(bind)的评论。
鉴于上述情况,该服务将有 26 个实例运行,每个分区一个,乘以副本数量。
如果是无状态服务,则只有一个分区(单例分区),因此实际实例数为 1 * 3(副本数)= 3。(3 个副本只是一个示例。大多数情况下无状态服务的实例计数设置为 -1,即集群中每个节点有 1 个实例。)
另一件事:在您的代码中,您在代码迭代分区中有一个注释行:
// E.g. Singleton is easy as it is just one endpoint, otherwise we need some load balancing later on
此评论错误地指出分区与负载平衡有关。事实并非如此,它与数据在服务实例上的分区方式有关,并且您需要获取处理特定分区的服务的地址。假设我有一个包含 26 个分区的服务,我想获取存储在第 5 个分区中的数据。然后,我需要获取为该分区提供服务的实例的端点。
您可能已经阅读过 the docs 。如果没有,我建议您也阅读一下。
处理您的评论:
I was just wondering, is it not possible that multiple services run on the same partition?
可靠集合与使用它们的服务耦合,底层分区也是如此。因此,同一分区上不能运行多个服务。
但是,服务实例可以。如果某个服务的副本大小为 3,则将有 3 个实例为该分区提供服务。但只有 1 个是主实例,负责读取和写入复制到辅助实例的数据。
关于azure - 为什么 Service Fabric 服务的分区策略与分区而不是服务相关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55558066/
我正在使用 choronos,它建议使用 start/stop 命令开始停止,如下所示 开始计时 停止计时 但是,我正在编写 puppet manifest,它只适用于下面的服务命令。 服务计时开始
来历及作用 services.exe进程程序文件是由微软公司为其发布的Windows操作系统定义的一个系统进程,常见于Windows 2000/XP/Vista/2007等系统中,被描述为服务和控
我一直在尝试使用installutil:installutil /u GSIS.FileMoverService.exe安装Windows服务。 我得到的输出是: Uninstalling assem
如果一个域有多个团队和多个 Web 应用程序,那么注册 Service Worker 来管理整个站点的最佳建议是什么?具有范围的顶级服务 worker /或子域中的多个服务 worker ?由于一个域
我已经在 eclipse 中创建了企业项目。动态web项目和ejb项目对企业项目有借鉴意义。当我运行管理员(企业项目)运行时选择 wildfly 服务器 18。我收到以下错误。谁能告诉我我错过了什么。
我已经使用 apache-cxf-2.7.4 创建了一个 Web 服务。我进入了我的项目中制作的类(class)。我的项目中的库是: math3-commons-3.2.jar XStream-1.4
我在域中的 Virtual Box 中运行集群计算机,默认情况下服务在 Network 服务下运行,服务一直停止,事件日志中出现以下错误。 请从下面的错误日志中查找错误详细信息。任何帮助都会很棒。 L
在我的应用程序中,用户可以在 map 上发布事件。应用程序的入口点是一个无状态的 web api 服务。为了在内部代表用户,我想要一个用户服务。我应该何时使用 Reliable Stateful Ac
当我尝试运行在WIX中创建的安装程序时,出现以下错误消息: “服务'Report Generator Service'(报告生成器服务)无法启动。请验证您是否具有启动系统服务的足够特权”。 我已经在这
尝试使用 cloudformation 创建 ECS 服务(在 Fargate 上)但出现错误: Invalid service in ARN (Service: AmazonECS; Status
我正在编写一个简单的Windows服务,该服务每个月向所有员工发送一封电子邮件。我的问题是,完成后如何停止自我?我是该领域的新手,请帮帮我。非常感谢。 它将部署在服务器上以每月运行。我没有开始做这件事
有谁知道是否有办法在 service worker 中获取此号码或日期: 将我的服务 worker 缓存命名为 cache-1182 会很方便或 cache-20171127171448 我想在安装事
我想开始使用 Azure Service Fabric 技术。 我按照this document工作并安装最新的SDK。安装后,我打开 PowerShell(“以管理员身份运行”)命令行窗口并写入这些
我在使用 whenever gem 时遇到了一些问题。我创建了一个 rake 任务,当我自己启动它时它工作得很好但是当我在日志中收到以下消息时尝试自动执行它: ActiveRecord::Statem
我想在 service fabric 集群中为两个不同的 web 应用程序(webpi/website)共享 http/80 端口,应用程序必须有 2 个不同的主机名: mywebapi.com 和
我创建了一个使用 MongoDB 实现 hibernate OGM 的应用程序。它在 Eclipse 中运行得很好,但是,当我构建一个 fat jar 并尝试运行它时,出现以下错误: Exceptio
我有一个 Selenium Python 测试套件。它开始运行,但几分钟后抛出以下错误: Exception AttributeError: "'Service' object has no attr
我按照此链接的说明进行操作:https://www.thegeekdiary.com/centos-rhel-7-how-to-make-custom-script-to-run-automatica
我在 ubuntu 下的 jboss 上部署了简单的“HelloWorld”Web 服务。 我创建了简单的客户端,但我无法让它工作。每次运行客户端时,我都会收到 NullPointerExceptio
我正在尝试为我的网站使用后台定期同步。我正在使用 localhost 并在 1*1000 毫秒时注册 periodicsync 事件,但这根本不会触发。 我看过这个demo ,但即使我将该网站安装为应
我是一名优秀的程序员,十分优秀!