『集群』004 Slithice 集群分布式(多个客户端,基于中央服务器的集群服务)
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 集群分布式(多个客户端,基于中央服务器的集群服务)的更多相关文章
- 『集群』003 Slithice 最简分布式(多个客户端,一个独立服务端)
Slithice 最简分布式(多个客户端,一个独立服务端) 案例Demo 展示: 我们搭建一个 可以 独立运行 的 服务端:然后 多个客户端 并发链接 这个 服务端 完成 分布式逻辑: 服务器 独立运 ...
- 『集群』005 Slithice 基于 集群 的 自动容错
Slithice 基于 集群 的 自动容错 Slithice容错概述: Slithice 支持 非集群 的 独立服务端: 支持 基于 中央服务器 的 集群服务端: 支持 基于 自定义配置 的 集群服务 ...
- 『集群』001 Slithice 服务器集群 概述
Slithice 服务器集群 概述 Slithice是做什么的 Slithice 是一个 跨平台 的 分布式架构 框架: 旨在简化 分布式开发 的开发难度,节省 开发成本 和 后期维护成本: 并提供 ...
- 『集群』002 Slithice 集群配置工具 的使用
Slithice 集群配置工具 的使用 Slithice集群配置工具 主界面 在测试 Slithice 的 Demo 中,我配置了 7个服务端: 一个 WCF 的 中央服务端: 两个 WCF 的 成员 ...
- 『集群』006 Slithice 后期改进 和 Slithice可能存在的BUG
Slithice 后期改进 和 Slithice可能存在的BUG Slithice 可能存在的 BUG: >Slithice 暂时 没有 对 循环调度 进行控制:不正确的 配置 可能导致 调度死 ...
- 『练手』004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件
004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件 导航栏 插件扩展 比如下图的 窗口 > 关闭所有文档 这个导航栏: 在 任何程序集,任何命名空间,任 ...
- 『SharePoint 2010』Sharepoint 2010 Form 身份认证的实现(基于AD)
一.进管理中心,创建一个应用程序,配置如下: 二.填端口号,和选择form身份认证,以及填写成员和角色,其他都默认就可以了 三.使用SharePoint 2010 Management Shell在里 ...
- 『SharePoint 2010』Sharepoint 2010 Form 身份认证的实现(基于SQL)
1:创建一个基于身份认证的应用程序(具体参见上篇基于AD) SQL-MembershipProvider 成员SQL-RoleManager 角色 2:修改管理中心,我们创建的应用程序,还有Web服务 ...
- Tomcat:基于Apache+Tomcat的集群搭建
根据Tomcat的官方文档说明可以知道,使用Tomcat配置集群需要与其它Web Server配合使用才可以完成,典型的有Apache和IIS. 这里就使用Apache+Tomcat方式来完成基于To ...
随机推荐
- dqname_widnows.go
package nsqd // On Windows, file names cannot contain colons. func getBackendName(topicName, channel ...
- [Usaco2005 nov]Grazing on the Run 边跑边吃草 BZOJ1742
分析: 首先,连续选择一段必定最优... 区间DP,f[i][j]表示从i开始,连续j个被吃掉了,并且,牛在i处,g[i][j]则表示在i+j-1处 f[i][j]可以从g[i+1][j]和f[i+1 ...
- laravel 请求request 接收参数
获取请求输入 获取所有输入值 你可以使用 all 方法以数组格式获取所有输入值: $input = $request->all(); 获取单个输入值 使用一些简单的方法,就可以从 Illumin ...
- Netty实现高性能的HTTP服务器
浅谈HTTP Method 要通过netty实现HTTP服务器(或者客户端),首先你要了解HTTP协议. HTTP在客户端 - 服务器计算模型中用作请求 - 响应协议. 例如,web浏览器可以是客户端 ...
- 说说new 和 malloc()
熟悉c++的朋友应该都知道,c++提供给了程序员与硬件打交道的可能性,比如说内存管理.一个高水平的c++程序员可以将c++程序的性能优化到极致,榨干硬件资源.而现在我想说说与内存管理有关的new 和 ...
- 微信小程序中placeholder的样式
通常,现代浏览器大多支持::placeholder选择器,用于设置placeholder的样式,但是在微信小程序中并不支持这种方式,而是提供了一个专门的属性(placeholder-class)来处理 ...
- Java语言编程 - Java历史简介
1.1 Sun公司 介绍Java的历史之前,先介绍一下Java语言的缔造公司,Sun公司,Sun公司的全称是:Stanford University Network.值得一提的是,Sun公司从1982 ...
- react源码总览(翻译)
用react也有段时间了, 是时候看看人家源码了. 看源码之前看到官方文档 有这么篇文章介绍其代码结构了, 为了看源码能顺利些, 遂决定将其翻译来看看, 小弟英语也是半瓢水, 好多单词得查词典, 不当 ...
- Spring Boot 定义系统启动任务,你会几种方式?
在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进行,以后都不再执行,这里,容易想到web基础中的三大组件( ...
- 从0开始构建你的api网关--Spring Cloud Gateway网关实战及原理解析
API 网关 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题 ...