小编fel*_*x-b的帖子

Docker swarm模式的被动副本

我正试图找出一种在Docker swarm模式下在服务副本之间实现主动/被动故障转移的正确方法.

该服务将保持一个不会丢失的有价值的内存状态,这就是我需要多个副本的原因.副本将在内部实现Raft,因此只有在给定时刻处于活动状态("领导者")的副本才会接受来自客户端的请求.

(如果你不熟悉Raft:简单地说,它是一个分布式共识算法,它有助于实现主动/被动容错的复制群集.根据Raft,主动副本 - 领导者 - 将其数据的变化复制到被动副本 - 追随者.只有领导者接受客户的请求.如果领导者失败,则在追随者中选出新的领导者).

据我所知,Docker将保证指定数量的副本启动并运行,但它将以主动/主动方式平衡所有副本之间的传入请求.

如何告诉Docker仅将请求路由到活动副本,但仍保证所有副本都已启动?

一种选择是通过另一个NGINX容器路由所有请求,并在每次选出新的领导者时更新其规则.但这将是一个额外的跳跃,我想避免.

我也试图避免使用外部/重叠工具,consul或者kubernetes为了使解决方案尽可能简单.(HAProxy不是一个选项,因为我需要一个Linux/Windows便携式解决方案).所以目前我正在努力了解是否可以单独完成Docker swarm mode.

我遇到的另一种方法是从被动副本返回失败的健康检查.它与技巧kubernetes 根据这个答案,但我不知道它会与码头工人工作.群集管理器如何解释来自任务容器的失败健康检查?

我很感激任何想法.

nginx docker docker-swarm

10
推荐指数
1
解决办法
925
查看次数

异步/等待:使后台任务不阻塞的正确方法

编辑:从OP的评论,目标是 非阻塞后台任务,以便其余保持响应

说我有一个这样的功能:

void OnFrameSampleAcquired(VideoCaptureSample sample)
{  
    //Some code here

    //Here I want to introduce an Asynchrnous process
    ProcessAsynchronously(_latestImageBytes);

    //some more code here
}
Run Code Online (Sandbox Code Playgroud)

在评论中,我想介绍一个对异步函数的调用。现在,我无法修改OnFrameSampleAcquired(意味着我无法使其“异步”)。我怎样才能做到这一点?

我在想

async void ProcessAsynchronously(byte[] image)
{
    await Process1(image);
    await Process2(image);
    // ...
}
Run Code Online (Sandbox Code Playgroud)

要么 async Task ProcessAsynchronously(byte[] image)

其中ProcessX也声明为 async

这是一个好方法吗?

感谢您提供任何见解,因为我在异步处理方面的实践经验很少。

c# asynchronous task-parallel-library async-await

1
推荐指数
1
解决办法
1951
查看次数