【发布时间】:2017-10-16 19:35:09
【问题描述】:
我正在设计一个服务结构无状态服务,它需要每个实例的配置数据。我最初的想法是创建命名分区,并使用PartitionInfo 获取命名键,并使用共享只读字典来加载每个实例的设置。问题是,现在在内部(从其他服务)访问这个实例需要一个分区键。由于使用此方法的所有分区都将在内部提供相同的数据,因此我连接到哪个分区并不重要(我希望它是随机的)。所以,这给了我很多可能的方法来解决这个问题:
- 使用
ServiceProxy.Create随机访问分区(在我上面的尝试中)。
以下不涉及分区的解决方案:
- 基于每个实例的配置。 This post 在提出解决方案时没有提供太多帮助。每个实例独有的配置部分将是最理想的解决方案。
- 创建命名实例,并使用名称作为用户名(基本上将字符串附加到非分区实例)
- 按索引获取实例,并使用索引对共享只读字典获取用户名。
- 不知何故使用 InitializationData(参见 this post)来获取用户名字符串(如果 InitializationData 可以在每个实例中是唯一的)。
以上所有将解决我的问题。这些方法中的任何一种都可能吗?
编辑:我正在尝试创建的服务示例:
假设我们有一个 stackoverflow 问题服务(简称 SOQS)。为了这个例子,假设一个用户可以在任何时候连接到 stackoverflow 的 websocket。 SOQS 内部方法(发布到我的服务结构)有一种方法:GetQuestions()。每个 SOQS 都需要使用唯一的用户名/密码连接到 stackoverflow,当新问题通过 websocket 推送时,它们会添加到内部问题列表中。 SOQS 的GetQuestions() 方法(从我的服务结构内部调用)会给出相同的问题列表。然后我可以通过添加更多实例来进行负载平衡(只要我有更多的用户名/密码),然后可以分配我的结构内部的负载。我可以调用ServiceProxy.Create<SOQS>() 连接到随机实例以获取我的问题列表。
【问题讨论】:
标签: c# azure azure-service-fabric