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。

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

下面代码演示了如何利用这个事件更换服务器地址:

procedure TwpMainModule.kbmMWHTTPSYSClientTransport1Reconnect(Sender: TObject;
Alternative: Boolean; RetriesLeft: Integer);
var
i:integer;
const
AltHosts:array [..] 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)-);
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. Always on (HA 负载均衡 异地容灾 一体化 )

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

  5. SQL Server上唯一的数据库集群:负载均衡、读写分离、容灾(数据零丢失、服务高可用)

    SQL Server上唯一的数据库集群:负载均衡.读写分离.容灾(数据零丢失.服务高可用).审计.优化,全面解决数据库用户问题.一键安装,易用稳定,性价比高,下载链接:http://www.zheti ...

  6. 传统业务上云:跨AZ容灾架构解析

    本文由  网易云发布. 数字化转型浪潮之下,采用云计算服务提升业务敏捷性.降低运维成本,成为了传统企业的优选方案.网易云资深解决方案架构师张亮通过某物流企业客户的实际案例,分享了传统业务系统在云上的架 ...

  7. elasticsearch集群扩容和容灾

    elasticsearch专栏:https://www.cnblogs.com/hello-shf/category/1550315.html 一.集群健康 Elasticsearch 的集群监控信息 ...

  8. Nginx网络负载均衡,负载均衡,网络负载,网络均衡

    本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分站链接负载(天空软件站,华军软 ...

  9. 华为云计算IE面试笔记-请描述华为容灾解决方案全景图,并解释双活数据中心需要从哪些角度着手考虑双活设计

    容灾全景图: 按照距离划分:分为本地容灾 同城容灾 异地容灾  本地容灾包括本地高可用和本地主备.(本数据中心的两机房.机柜) 本地高可用这个方案为了保持业务的连续性,从两个层面来考虑: ①一个是从主 ...

随机推荐

  1. spark的RDD如何转换为DataFrame

    1.Dataset与RDD之间的交互 Spark仅支持两种方式来将RDD转成Dataset.第一种方式是使用反射来推断一个RDD所包含的对象的特定类型.这种基于反射的方式会让代码更加地简洁,当你在编写 ...

  2. RocketMQ之九:RocketMQ消息发送流程解读

    在讨论这个问题之前,我们先看一下Client的整体架构. Producer与Consumer类体系 从下图可以看出以下几点:(1)Producer与Consumer的共同逻辑,封装在MQClientI ...

  3. Leetcode之动态规划(DP)专题-121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock)

    Leetcode之动态规划(DP)专题-121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock) 股票问题: 121. 买卖股票的最佳时机 122. 买卖股票的最 ...

  4. MySQL知识篇-nmon监控

    说明1:监控MySQL服务器资源不止一种方式,这种nmon监控图形化.历史记录查询笔记方便,便于MySQL优化后,对比其效率不同,资源利用率不同. 说明2:摘抄自https://www.cnblogs ...

  5. 【图像算法OpenCV】几何不变矩--Hu矩

    原文地址  http://blog.csdn.NET/daijucug/article/details/7535370 [图像算法OpenCV]几何不变矩--Hu矩 一 原理 几何矩是由Hu(Visu ...

  6. 简单的搭载Spring cloud框架

    大家不懂的可以在评论区给我留言

  7. [转帖]calico网络原理及与flannel对比

    calico网络原理及与flannel对比 https://blog.csdn.net/ganpuzhong42/article/details/77853131 2017年09月05日 16:34: ...

  8. 网站循环加载监控-C#

    背景: 公司有一个报表的网站,服务器或系统不太稳定,导致客户有时候查看报表网址的时候网站打不开或者打开时间过长,影响用户体验 需求: 通过程序循环打开网址了解加载情况,使用谷歌浏览器内核.,程序开发不 ...

  9. 小记--------spark资源调度机制源码分析-----Schedule

    Master类位置所在:spark-core_2.11-2.1.0.jar的org.apache.spark.deploy.master下的Master类 /** * driver调度机制原理代码分析 ...

  10. SQLSERVER2008 内存占用高的处理方式

    原文:SQLSERVER2008 内存占用高的处理方式 方法一: 方法二: 使用以下语句查找出什么语句占内存最高,针对占内存高的语句进行优化SELECT SS.SUM_EXECUTION_COUNT, ...