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

最新文章

  1. 无表头单链表的总结----从a链表中删去与b链表中有相同ID的那些节点
  2. Codeforces554 C Kyoya and Colored Balls
  3. js判断radiobuttonlist的选中值显示/隐藏其它模块
  4. 获取wifi信息
  5. nodejs安装和环境搭建
  6. Cannot unwrap to requested type [javax.sql.DataSource]
  7. Scrum角色
  8. 关于GCC的理解——On the understanding of the GCC
  9. Solr4.8.0源码分析(24)之SolrCloud的Recovery策略(五)
  10. [问题解决] ubuntu server12.04 认证的问题
  11. 理解Java String和String Pool
  12. two Pass方法连通域检测
  13. ZeroC Ice IceBox使用
  14. elixir mix 简介
  15. windows 环境下通过运行快速启动程序
  16. Linux之cat的使用
  17. linq使用Take和Skip实现分页
  18. Python 爬虫实例(11)—— 爬虫 苏宁易购
  19. [LeetCode] 383. Ransom Note_Easy tag: Hash Table
  20. java.sql.SQLException: Access denied for user 'root '@'localhost' (using password: YES) 最蠢

热门文章

  1. Python logger /logging
  2. Django的ORM操作
  3. BZOJ4944 泳池 解题报告
  4. 磁盘IOPS计算与测量
  5. vim永久显示行号
  6. 单台PC玩转NEUTRON(一:环境准备)
  7. Spring 系列之Spring常用注解总结
  8. Actor模型及原理
  9. ASP.NET Core Web API 索引 (更新Identity Server 4 视频教程)
  10. CSharpGL(53)漫反射辐照度