【问题标题】:Multiple services or single service with multiple threads多个服务或具有多个线程的单个服务
【发布时间】:2016-08-11 03:30:03
【问题描述】:
我们正在重写我们的 .net 应用程序。当前应用程序有 4 个 Windows 服务。第一个服务接受来自 UI 的请求,并通过发布刷新 UI 的事件来更新 UI。此服务在内部使用 2 个线程池,每个池最多 16 个线程来服务 GUI。来自 UI 的任何需要业务处理的请求都会传递到工作进程 windows 服务(有 2 个这样的 windows 服务)。MSMQ 用于在服务之间来回传递请求。第四个 Windows 服务的作用类似于负载平衡,并将请求从第一个服务定向到工作人员。所有服务都在同一个盒子上运行
现在在重写时,我们想知道我们是否应该保持相同的架构,或者是否可以将它们全部合并到具有单独线程的相同服务中。从性能的角度来看,哪个会更好。
【问题讨论】:
标签:
.net
c#-4.0
architecture
windows-services
【解决方案1】:
目前您在同一个盒子上运行它,但您认为将来可能需要扩展到多个盒子吗?
涉及多个服务的架构更具可扩展性、可维护性和灵活性。您获得的一些主要好处是,
- 您的架构更加松散耦合
- 您可以单独扩展每个服务/工作负载
- 您可以用不同的技术替换每个服务
(也许有一天您想使用
Linux 上的 C++),您可以灵活地做到这一点
- 向您的系统添加新功能更容易,例如,如果您
想要添加额外的日志,你可以挂钩到 MSMQ 并开始
在不接触实际代码的情况下记录您的消息
由于延迟减少,多线程可能会给您带来一点性能提升,但如果您在同一台机器上运行两个系统,那么差别不会很大。但是如果你每个人都因为高负载而陷入困境,并且你只想扩展你的业务逻辑服务;那么你将不走运。所以我总是会选择多服务(一种微服务架构),它可以分离关注点和其他好处。
我希望这会有所帮助。