方案特定:Windows服务与Azure作业,服务器上的调度程序中的控制台应用程序



方案:

我们有一个Web应用程序,我们网站中的每个用户都可以添加其他社交网站的多个帐户,例如Facebook,Twitter等。

我们必须执行一些自动化作业(例如,从其帐户中获取API的数据才能为这些用户生成分析(

关键点

用户可以启动或停止任何帐户的服务,以停止或开始收集分析的数据。
当用户单击开始/停止时,我必须在调度程序中启动自动化的Windows Service/CRONE JOB/CONSOLE应用程序。

要清除的关注点:

  1. 对于用户x,谁添加了n的社交帐户数,我应该为每个帐户启动线程,或每个用户线程,或每个线程的y用户数?

  2. Windows服务的优化方法是什么?调整器中的控制台应用程序?还是可以使用Windows服务的某种数据库触发器?或一些第三方库,例如Quartz.Nethangfire等?

Web应用程序是在ASP.NET MVC,MSSQL Server,C#中开发的,并部署在专用的Windows Server上。

编辑

  1. 请记住,如果用户开始为一个帐户启动服务,并且不会长时间停止它,我们需要该服务才能继续工作。
  2. 我们不想立即进行服务,我们可以延迟一两个minuets的用户操作。

就像我们可以在一两分钟后而不是每秒之后阅读Facebook上的用户活动。

很难为您提供任何详细信息的建议,但是对我来说,您正在谈论某种具有巨大的后端计算的push-注释系统。控制台应用程序和调度程序对我来说是个坏主意,因为您必须为每个新用户启动另一个过程,最终您只需将服务器带上新任务。

也是关于线程的同样的 - 其中一个将您的内存用于诸如呼叫堆栈,本地存储等的系统内容。如果您的用户群足够大,那么您的应用程序将获得线程饥饿而不是性能增益。您可能需要将数据处理分为TPL,也许需要编写自己的TaskScheduler,但请尝试避免长期运行,这将对用户请求不断进行轮询。

因此,解决方案可能像某些基于事件的应用程序(例如,使用RabbitMQ队列(,它为每个请求产生了一些任务,尽可能粒子,就像用户A想要知道FacebookTwitter更新一样,启动两个任务,并单独通知用户有关其完成的通知,因此您将获得尽可能多的可扩展性。

要云是否云,这取决于您,可能是您在这里需要一些测量值,但是对我来说,听起来您真的需要它。可以使用TPL Dataflow库来实施内部处理,其中一个代表一种类型的处理,最后是某种汇总逻辑。

总而言之,基于事件的方法为您提供了一种以异步方式处理用户请求的方法,并将一些推送通知或客户端进行了调查。在处理引擎内部,创建大量的小任务,因此您的应用不会粘贴一些贪婪的用户报告。

相关内容

最新更新