博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kbmMW均衡负载与容灾(1)(转载红鱼儿)
阅读量:6084 次
发布时间:2019-06-20

本文共 1478 字,大约阅读时间需要 4 分钟。

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作者的说明文档

转载地址:http://kezwa.baihongyu.com/

你可能感兴趣的文章
Java和H5前端区别
查看>>
hdu6049
查看>>
Java多线程系列目录
查看>>
冷门_可变参数方法
查看>>
powerdesigner 外键生成sql语句设置在创建表里面
查看>>
Android之Monkey全参数(包含隐藏参数)
查看>>
可变参数
查看>>
搭建LoadRunner中的场景(三)场景的执行计划
查看>>
[开源]KJFramework.Message 智能二进制消息框架 -- 对于数组的极致性优化
查看>>
Android SDK与ADT版本不匹配的解决
查看>>
ehcache缓存的简单使用
查看>>
tomcat内存溢出
查看>>
DFS Codeforces Round #290 (Div. 2) B. Fox And Two Dots
查看>>
POJ3581:Sequence——题解
查看>>
BZOJ4009 & 洛谷3242 & LOJ2113:[HNOI2015]接水果——题解
查看>>
用dom4j解析xml文件并执行增删改查操作
查看>>
Shell脚本排序总结
查看>>
C++ map<char *,int>
查看>>
在个人笔记本上安装centos6.8
查看>>
python 注册
查看>>