『集群』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

posted on 2014-03-18 11:11  InkFx  阅读(419)  评论(0编辑  收藏  举报