问题标签 [azure-service-fabric]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
azure - 如何在 azure 中扩展基于 docker 的服务
在 azure 中扩展基于 docker 的应用程序服务的最佳方式是什么?在 AWS,我知道我们可以使用容器服务。目前我在 azure 上使用云服务,它可以轻松扩展。还有看起来比云服务更好的 Service Fabric。但是当我使用 docker 时,如何将它们扩展到多个虚拟机?
c# - Azure Service Fabric - 分布式计算代码示例 Monte Carlo 模拟 - 性能问题
在收听了最近的 azure 播客(尤其是关于在 azure 上构建低延迟金融系统的播客)并阅读了有关 Service Fabric 的所有炒作后,我决定尝试更改“分布式计算代码示例 Monte Carlo 模拟”模式以满足我的需要。
我的场景是:具有给定起始状态的一个请求使用基于蒙特卡罗的简单(计算方式)模型运行 10k 完整运动比赛模拟。
我的第一次尝试是:
1 * 有状态的“处理器”Actor,接收匹配的开始状态并将其转发给 10k + 任务 Actor,以及相关的聚合器 ActorId
10K+ * 运行 1 次模拟并将结果传递给其聚合器 Actor 的无状态“任务”Actor。模拟时间很短(~2ms)
100 * 有状态的“聚合器”Actor,聚合接收到的模拟并传递给终结器 Actor
1 * 'Finaliser' 计算最终结果的 Actor
只需使用 Tasks 在我的开发机器上运行上述内容需要 < 100 毫秒,但上述设置(作为本地集群在开发机器上运行)需要 50 秒甚至更多!
在调试了一个潜在原因后,我发现处理器 Actor 发送初始任务所需的时间,所以我想知道调用 Service Fabric 有什么样的开销(我猜各种命名服务调用正在发生当我调用演员的方法时)以及缓慢是否可能是由于这个和我的任务数量造成的?
为了消除其他可能性,我做了以下事情,发现总时间只有很小的差异:
- 使所有参与者无状态,以确保状态管理不会增加开销。
- 在处理器中创建所有 ActorProxies 并存储它们的引用以供将来调用以确保 Actor 激活不会引起问题。
有没有人对从这里去哪里有任何建议,或者有没有人试图实现类似的东西?
谢谢,亚历克斯
actor - Azure Service Fabric 与 Project Orleans 中的参与者粒度
举个简单的例子:我有一个拥有 1,000,000 个用户的服务,每个用户都有一些个人资料信息。我想使用演员管理此配置文件信息的 CRUD 操作。
在Project Orleans中,我的理解是每个用户有一个谷子,因此 1,000,000 个相同演员类型的虚拟谷子(只有在使用时才会创建),每个谷子将管理存储在其中的单个用户的个人资料信息状态。随着我的用户增长,谷物的数量也在增长。
在Service Fabric中,如果我对文档的解释正确,它的工作方式会略有不同。我将有一个有状态的参与者类型来管理所有用户的 CRUD 操作,并且为了可扩展性,我将对参与者进行分区,让每个分区负责用户数据的子集。鉴于partition options,我看不到一个明显的方法来实现它与 Project Orleans 相同的细粒度方式。
我真的很喜欢 Project Orleans 中的方法。演员只是为单个用户处理数据,可扩展性是显而易见的(更多的用户等于更多的颗粒)。内存模型也很简单:单个参与者通过少量状态按需获取水分。
似乎 Service Fabric 实现会稍微复杂一些。每个参与者都在与一组用户打交道,为了可扩展性,我必须提前决定应该创建多少个分区,因为以后无法修改。至于内存模型,每个参与者管理的数据量随着用户数量的增长而增长。
所以我的问题是:我的理解是否正确,Service Fabric 中的参与者只是比 Project Orleans 更粗粒度?
更新
感谢您的回答。我的错误是认为分区包含单个参与者实例,该实例将包含和管理分区内所有参与者 ID 的状态。这是完全错误的。Michiel 指出,一个分区包含许多参与者实例,每个参与者 ID 一个。因此,演员可以以与奥尔良项目相同的方式实施。这现在更有意义了,谢谢。
c# - FabricNotReadableException 是什么意思?以及我们应该如何应对?
我们在 Service-Fabric 上的有状态服务中使用以下方法。该服务具有分区。有时我们会从这段代码中得到 FabricNotReadableException。
这是否意味着分区已关闭并正在移动?其中我们遇到了二级分区?因为在某些情况下还会引发 FabricNotPrimaryException。
我已经看到了 MSDN 链接(https://msdn.microsoft.com/en-us/library/azure/system.fabric.fabricnotreadableexception.aspx)。但是什么
表示当分区无法接受读取时引发的异常。
意思是?分区不能接受读取是怎么回事?
azure-service-fabric - ServiceFabric StatefulService 方法传递了 Actor 代理 DataContract 错误
我有StatefulService
一个方法。该方法的第一个参数接受与我的一个 Actor 对应的接口类型。Actor 使用 调用服务方法ServiceProxy
,并作为第一个参数传入this
。这会编译文件。签名匹配。
但是,在运行时,我收到一个关于 IMyActorType 类型不为DataContractSerializer
. 我知道这条消息意味着什么。不ServiceProxy
处理ActorReferences
?我知道ActorProxy
工作。我可以使用ActorProxy
.
或者这可能是我的配置中的一些问题StatefulService
?我的ServiceReplicaListener
设置有什么问题吗?
StatefulService
我现在已经通过将我的方法的方法签名更改为ActorReference
. 序列化很好,我可以在另一边打开它。但是,我宁愿有正确的打字。
azure-service-fabric - 多个 IActor 接口
我需要Actor
实现多个接口。这可能吗?
目前,当我尝试让该Actor
类型实现一个派生自另一个接口的接口时IActor
,我收到一条消息,它实现了多个接口,ActorServiceAttribute
需要用来区分。添加ActorServiceAttribute
不会删除错误消息。
[编辑]
我相信我解决了这个问题。错误令人困惑。您需要在 Actor 类型上直接实现 BOTH 接口。构建时发现似乎没有通过接口层次结构枚举 find IActor
。
azure-service-fabric - 从结构外部使用 Service Fabric CommunicationClient 和 servicePartitionClient?
我希望能够从非结构应用程序或服务调用有状态的 HTTP/WebApi 服务。我可以将发布的 url 用于有状态服务,但希望通过解析分区端点来利用故障转移到不同的主节点。
我首先尝试在桌面控制台应用程序中进行测试,但它无法执行 InvokeWithRetryAsync 内部的通信 Lambda 函数。
这是死胡同(非结构应用程序无法解析有状态服务)还是有另一种方法可以从非结构应用程序解析端点。否则,我可能会将请求包装在“中间人”无状态服务(如 Wordcount Webservice)中。
azure-service-fabric - ServiceProxy 抛出 ProtocolException,重试时通信未恢复
我们在与集群中运行的服务通信时看到了 ProtocolExceptions。消息和 InnerException 消息:
该服务在本地开发集群上运行,与该服务通信成功后抛出异常。
我们用于通信的代码是:
我们有重试逻辑(尝试之间的延迟增加)。但是这个电话永远不会成功。所以看起来服务处于故障状态并且无法从中恢复。
更新
我们还在日志中看到以下错误:
2015 年 14 月 12 日更新
如果抛出此 ProtocolException,重试将无济于事。即使经过数小时的等待,它仍然失败。
我们记录端点地址
解析的端点看起来像
此终结点与 Service Fabric Explorer 报告的相同。
从我们看到的日志来看,该服务似乎正在运行(可以通过另一种 API 方法访问),但该特定调用从未成功。
c# - 删除已停用的有状态参与者
我了解到有状态的演员在空闲一段时间(默认为 60 分钟)后会被停用。这将从托管这些参与者的节点中释放 RAM(和 CPU)。但是,如果需要重新激活它们,它们的状态将保留在集群中。
我想知道是否有可能以某种方式枚举已停用的演员(具有持久状态),以便根据某些自定义标准永久删除其中一些演员。
这样做的目的是释放集群中的磁盘空间,因为他们知道某些参与者将永远不会再次被激活(如果他们愿意,他们会表现得就像他们是全新的一样)。
作为附带的好处,如果确实可以获得“曾经激活但可能停用”的演员列表,那么我们就不必手动维护这样的列表。
azure - Service Fabric:打包代码错误:缺少必需的引用
更新 SF 后,我遇到了一个完全无法使用 SF 的问题,我将尝试用没有代码的文字来解决问题。
Service Fabric 应用程序AppName.SF
由AppName.SF.StatefulActor
和组成AppName.SF.StatefulService
。两者都引用了名为AppName.Core
.
案例 1: StatefulActor
不引用StatefulService
- 包执行正常:
AppName.SF\pkg\Debug\AppName.SF.StatefulActor\Code has
AppName.Core.dll
AppName.SF\pkg\Debug\AppName.SF.StatefulService\Code
有AppName.Core.dll
每个包代码文件夹都有AppName.Core.dll
. 部署成功执行。
案例 2: StatefulActor
引用StatefulService
- 包执行不良:
AppName.SF\pkg\Debug\AppName.SF.StatefulActor\Code
有AppName.Core.dll
AppName.SF\pkg\Debug\AppName.SF.StatefulService\Code
没有(!) AppName.Core.dll
因此,如果我尝试在集群中部署应用程序,则会收到缺少参考错误。SF 更新到 1.4.87-preview 后出现问题。