kbmMW为均衡负载与容灾提供了很好的机制,支持多种实现方式,现在看看最简单的一种,客户端控制的容灾和简单的负载均衡。

现在,我们将kbmMWServer部署到不同的服务器,或者在同一服务器部署多份实例,这样,我们会有一个服务的访问列表:
192.168.0.88:9000
192.168.0.88:9001
192.168.0.89.9000
192.168.0.89.9001

服务准备好了,现在,改造一下客户端的Transport,就可以实现容灾和负载均衡。具体来说,就是利用ClientTransport的两个属性与一个事件:

两个属性:
MaxRetrires:重联次数,触发ClientTransportReconnect事件时,参数Alternative为False

MaxRetriesAlternative:换Transport地址的重联次数,触发ClientTransportReconnect事件时,参数Alternative为True

系统首先按MaxRetries定义的次数试着联接服务,如果都不成功,再按MaxRetriesAlternative定义的次数试着联接服务器,再不
成功,最终触发OnConnectionLost事件。如果你没有处理OnConnectionLost事件,则产生异常Connection
lost。每次重联,都会触发ClientTransportReconnect事
件,在这个事件中,通过参数Alternative可以判断是否需要重新定义Transport服务地址,如果换了新的服务地址,则系统按新地址重联服务
器。假设MaxRetries定义3,MaxRetriesAlternative定义为2,则一共试着重联服务器5次,最后两次,在触发ClientTransportReconnect事件时,Alternative参数为True。

一个事件,这个事件有三个参数:
Sender:Transport对象
Alternative:为True表示应该换一个服务地址
RetriesLeft:剩余的重联次数

下面代码演示了如何利用这个事件更换服务器地址:
procedure
TwpMainModule.kbmMWHTTPSYSClientTransport1Reconnect(Sender:
TObject;
  Alternative: Boolean; RetriesLeft:
Integer);
var
  i:integer;
const
  AltHosts:array [0..5] of string = (
  '192.168.0.88:9000',
  '192.168.0.88:9001',
  '192.168.0.88:9002',
  '192.168.0.89:9000',
  '192.168.0.89:9001',
  '192.168.0.89:9002'
  );
begin
  if Alternative then
  begin
   
i:=Random(High(AltHosts)-1);
   
TkbmMWCustomClientTransport(Sender).host:=AltHosts[i];
  end;
end;

OK,最简单的均衡负载就这样实现了!

这样处理看起来简单,但存在问题,第一是每个客户端都要知道服务的列表,如果列表变化,不便维护;另外,没有实现真正的均衡,用户有可能都跑到一个服务上。为了解决这些问题,明天计划整理【集中式均衡负载的实现方式】。

参考kbmMW作者的说明文档

kbmMW均衡负载与容灾(1)(转载红鱼儿)的更多相关文章

  1. kbmMW均衡负载与容灾(3)(转载红鱼儿)

    在kbmMW均衡负载与容灾(1)中,介绍了利用ClientTransport的OnReconnect事件,对联接的应用服务器的地址进行更换,做容灾处理.实际上,作者还给我们提供了另外一种机制,直接在C ...

  2. kbmMW均衡负载与容灾(1)

    kbmMW为均衡负载与容灾提供了很好的机制,支持多种实现方式,现在看看最简单的一种,客户端控制的容灾和简单的负载均衡. 现在,我们将kbmMWServer部署到不同的服务器,或者在同一服务器部署多份实 ...

  3. kbmMW均衡负载与容灾(2)(转载红鱼儿)

    集中式均衡负载 为实现集中式均衡负载方案,需要实现两个不同的应用服务器,一个是只包含均衡负载组件再无其他内容的应用服务器,可称之为均衡负载应用服务器,下文简称LB Server,另外一个就是包含一个或 ...

  4. [转载红鱼儿]delphi 实现微信开发(2)接入微信公众号平台

    先要学习一下接入的资料,在这里,因为原理都在,所以一定要认真阅读,然后,利用Delphi实现一个对应函数,然后申请微信公众平台接口测试帐号. function CheckSignature(const ...

  5. [转载红鱼儿]delphi 实现微信开发(1)

    大体思路: 1.用户向服务号发消息,(这里可以是个菜单项,也可以是一个关键词,如:注册会员.) 2.kbmmw web server收到消息,生成一个图文消息给微信,在图文消息中做好自己的url,在u ...

  6. 清幽傲竹实现的kbmMWServer数据库联接失败重联(转载红鱼儿)

    1.修改kbmMWUnidac单元的TkbmMWUNIDACConnection.InternalOpenConnection方法,加上:          //支持unidac重联          ...

  7. [转载红鱼儿]Delphi实现微信开发(3)如何使用multipart/form-data格式上传文件

    开始前,先看下要实现的微信接口,上传多媒体文件,这个接口是用Form表单形式上传的文件.对我来说,对http的Form表单一知半解,还好,查到这个资料,如果你也和我一样,必须看看这篇文章. 在xali ...

  8. [转载红鱼儿]Delphi XE7 update1进步太大了

    写以下的文字是怀着无比兴奋的心情写的,急于同朋友们分享XE7的进步! 1.更新的bug列表并不全 通过bug修正列表及发布的消息,可以看到up1修正了很多bug,正如我所说,有些bug并没有写到发布的 ...

  9. Always on (HA 负载均衡 异地容灾 一体化 )

    Sqlserver 2012 开始,以往困扰我们的三个棘手问题:可扩展性.数据保护.异地容灾可以统一通过alwayson 来实现.2014  支持secondary 节点更是达到8个.在硬件调配方面比 ...

随机推荐

  1. 原生js实现ajax与jquery的ajax库,及json

    这是一篇笔记博客, Ajax: 和服务器进行数据交换(异步) 用js实现复杂的原理:用于发送请求的对象在不同的浏览器中是不同的 同源策略:ajax发送请求的url地址与服务器地址必须是同一域名,协议, ...

  2. TCL脚本语言基础介绍

    Tcl简介(一):Tcl 语法 Tcl 语法 Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以释运行,其强大的功能和简单精妙的语法会使你感到由衷的喜悦,这片文章对 Tcl有很好的描述和说明.如 ...

  3. TOJ2811: Bessie's Weight Problem(完全背包)

    传送门(<---可以点的) 描述 Bessie, like so many of her sisters, has put on a few too many pounds enjoying t ...

  4. Android模拟器故障:waiting for target deviceto come online

    关闭再打开模拟器.删除再新建模拟器均无效. 解决办法:在AVD Manager中,选择立即冷启动(Cold Boot Now)模拟器.

  5. Householder矩阵,Givens矩阵

    householder 矩阵相当于对某一空间中的元素(向量.矩阵)进行镜像变换,但是模值并不发生变化. H=I-2uuT householder矩阵有几个重要的性质: 1 : H-1 = H 2:  ...

  6. The Attention Merchants

    Title: The Attention Merchants (书评类文章) <注意力商人> attention 注意力 merchant 商人(零售商,强调通过贩卖物品获取利益)  bu ...

  7. mybatis BigDecimal Double Long 的坑爹事

    写接口的时候别用 public Map<String,Double> selectForRealRemainer(Orders orders); 用这样就行 public Map<S ...

  8. PTA 7-9 旅游规划(SPFA)

    有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...

  9. [剑指Offer]23-链表中环的入口节点

    题目链接 https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4?tpId=13&tqId=11208&t ...

  10. 分布式大数据多维数据分析(olap)引擎kylin[转]

    Apache Kylin是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay 开发并贡献至开源社区.它能在亚秒内查询巨大的Hiv ...