我们有一个内部部署解决方案(c#.net)工作正常,现在我们正在尝试迁移到云(azure)以利用自动缩放功能。
我们遇到了一些问题,其中一个是后台任务监控。
我们创建一个新的长期运行任务,如下所示:
1- Write the C# code that will be run on background
2- Run it using our own JobFramework in another thread and storing some handle for the running task
3- Keep checking the progress of the task using the handle
现在让我们假设我们在缩放后得到了2个实例,而第一个则运行了一些任务。
如果用户使用句柄检查任务的状态,并且请求转到第二台机器,我们将得到意外的结果,因为它在第一台机器的某个线程上运行。
有什么建议可以解决这个问题吗?
答案 0 :(得分:0)
不知道细节;我走了。
这是一个典型的扩展问题(负载均衡器背后的多个实例等)。基本上对于任何依赖于其他运行状态等的请求,您需要同步它们。这是同一个问题,因为多个实例与同一个数据库通信,因此锁定等待处理。
我会通过在实例之外的公共位置维护状态来处理这个问题。实际上,您甚至可以使用公共数据库或缓存端点来维护状态并模拟自己的锁等。
另一种方法是在实例之外维护像SQS这样的消息队列,实例需要巧妙地接收工作,但这可能是一个重大改变,因此可能不容易实现。