![]() |
1
5
要使服务至少保持运行,您可以安排Windows服务管理器在服务崩溃时自动重新启动该服务(请参阅服务属性上的“恢复”选项卡)。此处提供了更多详细信息,包括设置这些属性的批处理脚本。- Restart a windows service if it crashes 高可用性不仅仅是让服务远离外部——服务本身需要牢记高可用性(即,在整个过程中使用良好的编程实践、适当的数据结构、成对的资源获取和释放),并对整个压力进行测试,以确保其在预期负载下保持正常运行。 对于等量命令,可以通过多次重新调用该命令来实现对间歇性故障(如锁定的资源)的容忍。这允许服务保护客户机不受故障影响(直到某一点)。客户机也应该进行编码以预测故障。客户机可以通过多种方式处理服务故障—日志记录、提示用户、重试X次、记录致命错误和退出都是可能的处理程序—根据您的要求,哪一种处理程序适合您。如果服务有“会话状态”,当服务发生严重故障(即进程重新启动)时,客户机应该知道并处理这种情况,因为这通常意味着当前的会话状态已经丢失。 一台机器很容易受到硬件故障的影响,所以如果您要使用一台机器,那么请确保它有冗余的组件。HDD特别容易发生故障,因此至少有镜像驱动器或RAID阵列。PSU是下一个弱点,因此冗余PSU和UPS也是值得的。 至于集群,Windows支持服务集群,并使用网络名称而不是单个计算机名称管理服务。这允许您的客户机连接到运行服务的任何计算机,而不是硬编码的名称。但是,除非您采取其他措施,否则这是资源故障转移—将请求从服务的一个实例定向到另一个实例。转换状态通常会丢失。如果您的服务正在写入数据库,那么还应该对其进行集群化,以确保可靠性,并确保更改可用于整个集群,而不仅仅是本地节点。 这真的只是冰山一角,但我希望它能给你一些想法,让你开始进一步的研究。 |
![]() |
2
0
如果你把你想解决的问题分解掉,我想你自己可能会想出一些答案。正如贾斯汀在评论中提到的,没有人回答。它完全取决于您的服务做什么以及客户如何使用它。您也没有指定任何有关客户机-服务器交互的详细信息。HTTP?TCP?UDP?其他? 下面是一些让你开始的事情。 1)如果服务或服务器出现故障,您会怎么做?
2)好的,但是现在客户如何知道多个服务?
3)那么如果一个服务中断怎么办?
这应该让您开始了解如何开始使用高可用性的基本概念。如果您提供关于体系结构的具体细节,您可能会得到更好的响应。 |
![]() |
3
0
如果服务不公开任何客户端连接接口,您可以:
但是,如果您有一个客户机通过namedpipes/tcp/etc连接到这个服务,那么客户机将必须在数据库中运行服务的情况下检查机器的地址,或者有一些更高级的东西,比如智能交换机来重定向流量。 |