曾几何时,我写了一个内部应用程序从内部数据库中读取数据,然后拿这些数据,并将其张贴到Web服务。该应用程序非常简单,使用单线程和同步HTTP请求。
这个应用程序的范围已经改变,它正试图推动更多的数据比这是有史以来旨在推动。如果它从我们的内部数据库中读取1,000条记录,则它会将它们全部包装到一个HTTP POST中,从而给承载正在接收数据的Web服务的服务器带来沉重的CPU负担。 Web服务在处理POST中的一条记录时遇到错误时也会出现问题。 XML响应没有指定哪个特定的记录失败,所以我对我的请求成功的可见性有限。
我如何想修复它
我要重新设计我的应用程序更可靠,更周到的托管Web服务的服务器。具体来说,我希望有一名工作人员每隔15分钟从内部数据库收集记录并将其转化为工作。这些作业将被序列化并存储在队列中(可能是数据库表)。然后,我想让我的应用程序使用多个工作线程来处理队列(这是个好主意吗?)。一个线程会将作业从队列中弹出并通过向Web上传一个异步HTTP POST来处理它。根据请求的状态,作业会导致成功,失败,超时或中止。作业将在数据库中更新,进程将被记录下来,然后工作线程将转到下一个作业,如果作业队列为空,则变为空闲状态。
我不是设计师,所以我不知道要实现这样的事情的最好方法。以下是我在设计上的一些具体问题。
- 我在.NET MVC环境了解多线程一些负面的东西。我是否应该避免使用多线程,因为我没有做任何真正的CPU密集型工作?
- Quartz.NET看起来可以做很多很酷的事情。我应该看看使用Quartz.NET来做这样的事情吗?
- 是我设计的是否合理?如果不是,那怎么能改进呢?
- 你会如何设计一个系统,以满足新的应用程序的目标是什么?
我知道这是一个广泛的问题,但我希望我已经清楚地概述了我的目标。先谢谢你。
@Closers:太本地化了? –
我没有看到MVC(或任何其他WEB GUI)进来。这似乎是一个WCF的问题,也许使用MSMQ。 –
@HenkHolterman恕我直言,太局部化了,因为这个问题更多地与提问者系统的设计有关,而与任何特定的编程问题/障碍相关的问题更少。 – Yuck