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

最新文章

  1. (二)Netty源码学习笔记之服务端启动
  2. DOM document object model learn
  3. 每日一博 | 用 Ionic2 创建 App 启动页滑动欢迎界面
  4. HashMap 中的 entrySet()使用方法 2016.12.28
  5. 使用Nginx在自己的电脑上实现负载均衡
  6. xode View 的封装
  7. public, protected, private, internal, protected internal简析
  8. 辉哥用的这种方法实现ZABBIX的MYSQL批量监控
  9. 移动端 常见布局CSS3的细节
  10. 使用SignalR打造消息总线
  11. php 启动过程 - sapi MINIT 过程
  12. Linux iptables用法与NAT
  13. Unity进阶----AssetBundle_03(2018/11/07)
  14. OpenCV3编程入门-读书笔记1
  15. postman-SSL证书问题-支持HTTPS请求
  16. font_awesome的icon库的使用
  17. Entity Framework学习初级篇2
  18. 腾讯云JavaWeb环境配置
  19. BugkuCTF ---游戏过关 writeup
  20. 安装cnpm

热门文章

  1. leetcode 数组类型题
  2. hadoop深入简出(二)
  3. TZOJ 3665 方格取数(2)(最大点权独立集)
  4. 【转】以太网最大帧和最小帧、MTU
  5. windows+nginx+tomcat实现集群负载均衡(生产环境必读)
  6. day 22 反射,双下方法
  7. day 11 生成器
  8. 数据节点-df 无法输出结果
  9. 队列 和 线程 之GCD dispatch
  10. mysql中各种join连表查询总结