gpt4 book ai didi

azure-service-fabric - 服务结构 - 每个分区的有状态服务单个实例

转载 作者:行者123 更新时间:2023-12-04 08:22:59 25 4
gpt4 key购买 nike

我正在尝试消化服务结构架构模式及其最佳实践。

用例:

我定义了一个有 26 个分区的有状态服务,并且在每个分区中我存储了具有相同首字母的单词。

  • 1) 这是否意味着我的有状态服务实际上有 26 个实例?
  • 2) 在有状态服务之外,即在调用者中时 - 我正在为我的服务结构客户端构建一个 URI,指定我希望客户端操作的分区 ID。这是否意味着一旦我处于有状态服务的上下文中(即服务客户端实例化并称为有状态服务) - 我无法引用其他分区?
  • 3) 说有状态服务是 的工作单元是真的吗?需求要知道要操作哪个分区,并且不能 自己做决定?这里我指的是很多例子,在有状态服务的 RunAsync 方法内部,有对底层可靠存储的调用,例如,采用的代码 from this post :
    protected override async Task RunAsync(CancellationToken cancelServicePartitionReplica)
    {
    var myDictionary = await this.StateManager.GetOrAddAsync<IReliableDictionary<string, int>> ("myDictionary");

    var partition = base.ServicePartition.PartitionInfo.Id;
    byte append = partition.ToByteArray()[0];

    while (!cancelServicePartitionReplica.IsCancellationRequested)
    {

    // Create a transaction to perform operations on data within this partition's replica.
    using (var tx = this.StateManager.CreateTransaction())
    {
    var result = await myDictionary.TryGetValueAsync(tx, "A");

    await myDictionary.AddOrUpdateAsync(tx, "A", 0, (k, v) => v + append);
    ServiceEventSource.Current.ServiceMessage(this,
    $"Append {append}: {(result.HasValue ? result.Value : -1)}");
    await tx.CommitAsync();
    }

    // Pause for 1 second before continue processing.
    await Task.Delay(TimeSpan.FromSeconds(3), cancelServicePartitionReplica);
    }
    }

  • 因此,可能我的陈述 3) 是错误的 - 有状态服务可能会调用其内部存储,而没有人(服务客户端)在外部调用它并提供确切分区的信息。 但是,上面的代码如何决定将其数据放入哪个分区? 最重要的是,以后如何通过应提供准确分区 ID 的服务客户端查询该数据?

    最佳答案

    有状态服务“实例”实际上是副本。您可以为每个分区配置多少副本(用于性能、扩展、高可用性和灾难恢复)。只有一个副本(主要)进行写入。所有副本(次要和主要)都可以用于读取。副本包含数据集的一个分片。
    分区 1 中的数据不与分区 2 共享。

    调用有状态服务的客户端需要自己决定要与哪个分区通信。服务只能在自己的分区(直接)中读/写。

    更多信息 here .

    关于azure-service-fabric - 服务结构 - 每个分区的有状态服务单个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37772239/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com