我公司(Shortbar)正在为呼吁GRPC霍尔姆斯一个酒店管理系统的应用服务器。我们设置如下:
- HOLMS.Application是一个.NET类库,做服务器的实际工作
- HOLMS.Application.ConsoleRunner是一个C#控制台应用程序托管HOLMS.Application(组装) 。 (1)开发人员为了方便(在问题中提到)以及(2)在Docker容器内部运行的生产场景使用控制台运行器,其中容器运行时(例如Amazon ECS)实现作业控制/缩放。它遵循“12因子应用程序”指南,包括将其本身作为单独的独立无状态进程运行,快速启动/关闭以及环境变量配置注入。系统会记录到stdout中,但stdout会在prod环境中耗尽(例如Sumo,logstash等)。这就是我们的SaaS多租户解决方案将如何投入生产。
- HOLMS.Application.ServiceRunner将HOLMS.Application打包到Windows服务中,用于更传统的内部部署环境,其中客户的IT部门将自行运行服务。此软件包使用Windows注册表进行配置,并依赖Windows服务作业控制来启动/关闭/重新启动。它登录到Windows事件日志。
ConsoleRunner和ServiceRunner每个只有大约200行代码;大多数情况下,他们只是包装应用程序包,然后调用它。
希望这会有所帮助。
鉴于系统的性质,它听起来应该是_reliable_并且有些_fault-tolerant_。这是一个通常不会与_console apps_关联的特征。一个很大的消极。另一方面,Windows服务是_recoverable_。一个很大的积极。 – MickyD