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

『集群』005 Slithice 基于 集群 的 自动容错的更多相关文章

  1. 『集群』001 Slithice 服务器集群 概述

    Slithice 服务器集群 概述 Slithice是做什么的 Slithice 是一个 跨平台 的 分布式架构 框架: 旨在简化 分布式开发 的开发难度,节省 开发成本 和 后期维护成本: 并提供 ...

  2. 『集群』004 Slithice 集群分布式(多个客户端,基于中央服务器的集群服务)

    Slithice 集群分布式(多个客户端,基于中央服务器的多个集群服务端) 案例Demo展示: 集群架构图 如下: 如上图,上图 展示了 这个集群 的 结构: >一个中央服务器(可以有多个),负 ...

  3. 『集群』002 Slithice 集群配置工具 的使用

    Slithice 集群配置工具 的使用 Slithice集群配置工具 主界面 在测试 Slithice 的 Demo 中,我配置了 7个服务端: 一个 WCF 的 中央服务端: 两个 WCF 的 成员 ...

  4. 『集群』003 Slithice 最简分布式(多个客户端,一个独立服务端)

    Slithice 最简分布式(多个客户端,一个独立服务端) 案例Demo 展示: 我们搭建一个 可以 独立运行 的 服务端:然后 多个客户端 并发链接 这个 服务端 完成 分布式逻辑: 服务器 独立运 ...

  5. 『集群』006 Slithice 后期改进 和 Slithice可能存在的BUG

    Slithice 后期改进 和 Slithice可能存在的BUG Slithice 可能存在的 BUG: >Slithice 暂时 没有 对 循环调度 进行控制:不正确的 配置 可能导致 调度死 ...

  6. 『GreenPlum系列』GreenPlum 4节点集群安装(图文教程)

      目标架构如上图   一.硬件评估 cpu主频,核数推荐CPU核数与磁盘数的比例在12:12以上Instance上执行时只能利用一个CPU核资源进行计算,推荐高主频 内存容量 网络带宽重分布操作 R ...

  7. 『练手』005 Laura.SqlForever历史遗留 的 架构思想缺陷

    005 Laura.SqlForever历史遗留 的 架构思想缺陷 我们 比较一下 Laura.WinFramework 和 Laura.XtraFramework 的差异: Laura.WinFra ...

  8. 多云混合云之多集群统一管理:基于阿里云ACK统一纳管多个不同Kubernetes集群

    目前阿里云云原生产品家族已经支持多集群管理功能,允许使用阿里云容器服务Kubernetes(简称ACK)控制台或kubectl命令接入.统一纳管其他公有云.客户IDC自建K8s集群,集中管理部署K8s ...

  9. [转]搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

随机推荐

  1. 高效开发 Web 单页应用解决方案

    于 2017 年初,有在 Github 建立并维护一个项目:Vue Boilerplate Template,欲成就一款开箱即用 Vue + Webpack 的脚手架模版:其目标与宗旨是:根据以往经验 ...

  2. User Profile Service服务未能登录,无法登录

    不知你是否遇到这样的问题,某一天你打开PC,开机正常,可当你输入正确的密码回车,却发现Vista或Win7拒绝让你登录,提示"User Profile Service 服务未能登录.无法加载 ...

  3. java基础学习周计划之1--语言基础

    JAVA语言基础第一天一. 知识点:1. 认识Linux操作系统2. JAVA开发环境3. Eclipse IDE二. 关键问题(理论):1. Linux中常用命令pwd.ls.cd的作用2. 简述J ...

  4. rename.go

    {         if err != nil {             return err         }         return syscall.EINVAL     }     r ...

  5. channel.go

    )         c.RLock()         client, ok := c.clients[msg.clientID]         c.RUnlock()         if ok ...

  6. 在MFC中UpdateData()的作用

    UpdateData()用来刷新数据,其中UpdateData(true)将控件中的数据传递到控件捆绑的变量中去.UpdateData(false)将变量值传递到控件中去.例如:窗口中用 DDX_Te ...

  7. [NOIP2016]愤怒的小鸟 D2 T3

    Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的 ...

  8. 配置(迁移)Laravel的注意事项

    1.如果Laravel是在Linux下运行,如果权限不足,会报错 2.如果是从git上clone下来的项目,需要安装composer,切到项目根目录下 composer install compose ...

  9. Docker 快速开始

    1.  概念 对于开发人员和系统管理员来说,Docker是一个使用容器开发.部署和运行应用程序的平台.使用Linux容器部署应用程序称为容器化.容器并不新鲜,但是将它们用于轻松部署应用程序却很新鲜. ...

  10. 【递归打卡2】求两个有序数组的第K小数

    [题目] 给定两个有序数组arr1和arr2,已知两个数组的长度分别为 m1 和 m2,求两个数组中的第 K 小数.要求时间复杂度O(log(m1 + m2)). [举例] 例如 arr1 = [1, ...