『集群』005 Slithice 基于 集群 的 自动容错
Slithice 基于 集群 的 自动容错
Slithice容错概述:
Slithice 支持 非集群 的 独立服务端;
支持 基于 中央服务器 的 集群服务端;
支持 基于 自定义配置 的 集群服务端;
在容错方面, 独立服务端 不支持 容错:出现错误,就得不到正确结果;
中央服务器 或 自定义配置 的 集群,是支持容错的:一台服务端执行异常,会自动转交 另外服务端 执行
—— 直到 所有可供调度的 服务端 全部错误,才会返回 错误信息;
自动容错原理:
在 《004 Slithice 集群分布式(多个客户端,基于中央服务器的多个集群服务端).doc》 中,
我们已经 见到了 基于 集群服务端 的调度,在此 不再多举案例;
比如,客户端 启动时,通过 配置获取方式(比如 中央服务器) 得到一个配置:
>Action_001 可以交由 Service_001、Service_002、Service_003,Service_004 四个服务端处理;
>Action_002 可以交由 Service_002、Service_003,Service_004 三个服务端处理;
>Action_003 可以交由 Service_002,Service_004 两个服务端处理;
>Service_001 通讯类型 Socket,调度概率 是 100
>Service_002通讯类型 Socket,调度概率 是 50
>Service_003通讯类型 WebService,调度概率 是 50
>Service_004通讯类型 WCF,调度概率 是 300
>但是 客户端 是 WinCE 平台,只支持 Socket,WebService 两种通讯方式;
>于是 客户端 就将 Service_004 最开始就 排除啦;
这时,客户端 需要 执行 Action_001 并得到 结果;
>分析出 Service_001、Service_002、Service_003 都可以处理;
>按照 调度概率 随机返回一个 服务端,比如说是 Service_002;
>这时 Service_002 宕机,执行重试3次,最终确定 失败;
>设置 Service_002 调度概率 为 49;
>按照 调度概率 从 Service_001、Service_003 中 随机返回一个 服务端,比如说 Service_001;(Service_002 会被排除)
>这时,Service_001 执行成功,返回结果 并设置 Service_001 的 调度概率 为 101;
然后,客户端 需要 执行 Action_003 并得到结果;
>分析出 Service_002 只有一个服务端可以处理;
>向 Service_002 调度,执行重试3次,最终确定 失败;
>设置 Service_002 调度概率 为 48;
>没有 其他 可供调度 的 服务端 —— 只有返回 执行错误;
集群容错效果:
最终,我们会发现:
>不支持 通讯方式 的 服务端 初始化时 就会 被排除;
>频繁错误的 服务端 的 调度概率 会 越来越小;
>出现 执行错误时,任务 会被 自动交给 另外的 服务端 处理;
>同一个任务,已经执行 出错的 服务端 在 任务转交 时 会被排除;
>只有 全部错误,才会 最终返回错误;
舒小龙
2014-01-29 13:34