多个服务或具有多个线程的单个服务

时间:2016-04-19 06:24:37

标签: .net c#-4.0 architecture windows-services

我们正在重写我们的.net应用程序。目前的应用程序有4个Windows服务。第一个服务接受来自UI的请求,并通过发布用于刷新UI的事件来更新UI。此服务在内部使用2个thrall池,每个池最多16个线程来为GUI提供服务。来自UI的任何需要业务处理的请求被传递给工作进程windows服务(有2个这样的Windows服务).MSMQ用于在服务之间来回传递请求。第四个Windows服务就像负载平衡一样,将来自第一个服务的请求定向到工作者。所有服务都在同一个盒子上运行

现在在重写时,我们想知道我们是否应该维护相同的架构,或者是否可以使用单独的线程将它们分成相同的服务。从绩效角度来看哪个更好。

1 个答案:

答案 0 :(得分:4)

现在你在同一个盒子上运行它,但是你认为将来可能需要扩展到多个盒子吗?

涉及多种服务的架构更具可扩展性,更易于维护和更灵活。您获得的一些主要好处是,

  • 您的架构更松散耦合
  • 您可以单独扩展每个服务/工作负载
  • 您可以使用其他技术替换每项服务 (也许有一天你想用你的工作流程实现 Linux上的C ++,你可以灵活地做到这一点
  • 更容易为您的系统添加新功能,例如,如果您 想要添加额外的日志记录,你可以挂钩到MSMQ并启动 在不触及实际代码的情况下记录您的消息

多线程可以减少延迟,从而为您带来一些性能提升,但如果您在同一台计算机上运行这两个系统,则不会有太大差异。但是,如果您因高负载而遇到麻烦,并且只想扩展业务逻辑服务;那你就不走运了。因此,我总是采用多服务(一种微服务架构)来分离关注点和其他好处。

我希望这会有所帮助。