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

案例Demo展示:

集群架构图 如下:

如上图,上图 展示了 这个集群 的 结构:

>一个中央服务器(可以有多个),负责 为 所有 集群成员服务端 或者 客户端 提供 配置数据

>对外 暴露的 成员服务端 有 两个Socket服务端,两个WebService服务端;

>两个 WCF服务端 不对外暴露,客户端 也不会从 中央服务器 得到 这两个WCF服务端的存在;

>客户端 从 中央服务器 得知,自己可以调度 四个服务端,以及每个服务端可以处理的 Action;客户端 将会 按照配置 随机调度 服务端 获取 想要的数据。当 其中 某个服务端 崩溃时,客户端会 降低失败服务端的调度优先级,并试着调度 另外可以处理 Action的 其他服务端;

运行展示:

这里 用 WinCE客户端 做为测试, WinPC客户端 也就不做测试啦;

服务端:

客户端:

测试 Slithice.Core.Utils.ConfigurationManager 类的稳定性:

测试 WinCE 客户端 手动调度 独立Socket服务端 :

测试 WinCE 客户端 从中央服务器 获取调度配置,随机调度 集群服务端 :

 

运行说明:

上图的 WinCE客户端运行,我们可以 看到:

>客户端 支持 手动设置 链接的服务器的调度对象,也支持 从 配置文件中 获取 链接服务器的调度对象;

>同一个 “配置” 按钮,随机 有 五个服务端 给出了 结果(只有 WebService 和 Socket —— WinCE 5.0 不支持 WCF);

>网格控件中,从 服务端 返回的是 一个 对象集合,这个 对象集合 就是用 Laura.Serialization 完成的 正反序列化;

>WinPC服务端 能够和 WinCE客户端 进行协同工作 —— 那么 WinPC服务端 和 WinPC客户端 也就理所当然 可以正常运行;所以 WinPC客户端 测试这里就 不予列出啦;

>Ps. 客户端 并非只支持 从中央服务器 配置获取,而且 还支持 自定义 配置获取;

集群容错:

Slithice 集群架构 支持 集群服务端 的 宕机容错;

还是 上面的 Demo —— 我们关闭 几个 集群服务端(模拟 服务器 宕机现象);

图片就不列举啦,结果是:

>WinCE 客户端 依然响应 正确值;

>但是 随机调度到错误服务端时,速度可能慢一点:

因为一次任务,有三次容错重连机会,即 实际 可能调度了 4、7、10、….. 次

>3次错误尝试 后 确定某个 服务端 确实错误;

>于是 更换 其他 服务端,1次成功尝试(如果更换的服务端 还错误,又会增加3次),并返回结果;

>对错误服务端的 调度 不会 一直 慢下去(每确定错误一次,这个 错误服务端 的 调度概率 会被 降低);

>集群 出现 服务端宕机,开始时,执行性能可能会慢一些;

>但是 随着 错误服务器 调度概率 越来越小,错误调度 也就会 不断减少,性能 也会 恢复;

舒小龙

2014-01-29 10:29

『集群』004 Slithice 集群分布式(多个客户端,基于中央服务器的集群服务)的更多相关文章

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

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

  2. 『集群』005 Slithice 基于 集群 的 自动容错

    Slithice 基于 集群 的 自动容错 Slithice容错概述: Slithice 支持 非集群 的 独立服务端: 支持 基于 中央服务器 的 集群服务端: 支持 基于 自定义配置 的 集群服务 ...

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

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

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

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

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

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

  6. 『练手』004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件

    004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件 导航栏 插件扩展 比如下图的    窗口 > 关闭所有文档    这个导航栏: 在 任何程序集,任何命名空间,任 ...

  7. 『SharePoint 2010』Sharepoint 2010 Form 身份认证的实现(基于AD)

    一.进管理中心,创建一个应用程序,配置如下: 二.填端口号,和选择form身份认证,以及填写成员和角色,其他都默认就可以了 三.使用SharePoint 2010 Management Shell在里 ...

  8. 『SharePoint 2010』Sharepoint 2010 Form 身份认证的实现(基于SQL)

    1:创建一个基于身份认证的应用程序(具体参见上篇基于AD) SQL-MembershipProvider 成员SQL-RoleManager 角色 2:修改管理中心,我们创建的应用程序,还有Web服务 ...

  9. Tomcat:基于Apache+Tomcat的集群搭建

    根据Tomcat的官方文档说明可以知道,使用Tomcat配置集群需要与其它Web Server配合使用才可以完成,典型的有Apache和IIS. 这里就使用Apache+Tomcat方式来完成基于To ...

随机推荐

  1. java泛型基础、子类泛型不能转换成父类泛型

    参考http://how2j.cn/k/generic/generic-generic/373.html 1.使用泛型的好处:泛型的用法是在容器后面添加<Type>Type可以是类,抽象类 ...

  2. AbstractQueuedSynchronizer AQS框架源码剖析

    一.引子 Java.util.concurrent包都是Doug Lea写的,来混个眼熟 是的,就是他,提出了JSR166(Java Specification RequestsJava 规范提案), ...

  3. golang 中 string 转换 []byte 的一道笔试题

    背景 去面试的时候遇到一道和 string 相关的题目,记录一下用到的知识点.题目如下: s:="123" ps:=&s b:=[]byte(s) pb:=&b s ...

  4. Postman----打开postman console控制台,查看接口测试打印log

    经常在脚本中使用变量时,你可能需要看到变量获取到的值,你可以使用Postman Console去实现的.操作步骤:应用菜单-->View--->Show Postman Console,去 ...

  5. EffictiveC++笔记 第1章

    Chapter 一: 条款 1 :视 C++为一个语言联邦 (P41 ) c++其实可以视为有四个部分: C Object-Oriented C++ Template C++ STL 条款 2:尽量以 ...

  6. 为什么VUE注册组件命名时不能用大写的?

    这段时间一直在弄vue,当然也遇到很多问题,这里就来跟大家分享一些注册自定义模板组件的心得 首先"VUE注册组件命名时不能用大写"其实这句话是不对的,但我们很多人开始都觉得是对的, ...

  7. 从零到一详聊如何创建Vue工程及遇到的常见问题

    前言 本文也会在github上我的web-study仓库中同步更新,欢迎star. 戳这里,传送 准备工作 判断是否需要FQ或安装镜像,镜像一般可安装国内淘宝镜像,详情可看这里:cnpm npm in ...

  8. 深度学习与计算机视觉:基于Python的神经网络的实现

    在前面两篇文章介绍了深度学习的一些基本概念,本文则使用Python实现一个简单的深度神经网络,并使用MNIST数据库进行测试. 神经网络的实现,包括以下内容: 神经网络权值的初始化 正向传播 误差评估 ...

  9. kubernetes实践之五:深入理解Service及内部DNS搭建

    一.Service存在的意义: 防止Pod失联(服务发现) 定义一组Pod的访问策略(负载均衡) 支持ClusterIP,NodePort以及LoadBalancer三种类型 Service的底层实现 ...

  10. BFS(广度优先搜索)

    简介 BFS的过程是首先访问起始结点v,接着访问顶点v的所有未被访问的邻接结点,然后对每个继续进行上述步骤,直到所有结点都被访问过为止,当然,在访问过程中,需要使用一个队列,然后类似二叉树的层次遍历来 ...