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


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

  • 相关阅读:
    web自动化搞定文件上传
    App自动化08-Android SDK目录架构详解
    App自动化07-Appium日志分析,深入剖析 Appium 实现原理
    App自动化06-adb常见连接问题整理
    crontab 定时任务
    谷歌对华为断供了,那自动化测试还做吗?
    Fiddler 抓取 https 请求大全
    App自动化05-adb
    App自动化04-Inspector检查器启动QQ测试
    (转载)边缘计算与深度学习综述
  • 原文地址:https://www.cnblogs.com/xalion/p/4696968.html
Copyright © 2020-2023  润新知