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

时间: 2024-09-27 15:52:03

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

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

在kbmMW均衡负载与容灾(1)中,介绍了利用ClientTransport的OnReconnect事件,对联接的应用服务器的地址进行更换,做容灾处理.实际上,作者还给我们提供了另外一种机制,直接在ClientTransport中定义可联接服务器及如何切换.具体来说就是三个属性,如下图: 1.FallbackServers:定义可访问的应用服务器的列表:利用Add,每次加一个AppServer地址联接串,即服务地址. 2.AutoFallback:启用FallbackServers地址:如果定义

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

集中式均衡负载 为实现集中式均衡负载方案,需要实现两个不同的应用服务器,一个是只包含均衡负载组件再无其他内容的应用服务器,可称之为均衡负载应用服务器,下文简称LB Server,另外一个就是包含一个或多个业务逻辑服务(Query Service and Http Service...)及一个均衡负载服务(Load Balancing Service)的应用服务器,可称之为业务逻辑应用服务器,简称APP Server. kbmMW提供了较多的负载均衡组件: TkbmMWRandomLoadBala

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

先要学习一下接入的资料,在这里,因为原理都在,所以一定要认真阅读,然后,利用Delphi实现一个对应函数: function CheckSignature(const signature, timestamp, nonce, token: string): boolean; var strs: TStringList;   tmpStr: string; begin strs := TStringList.Create;   try     strs.Add(token);     strs.A

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

大体思路: 1.用户向服务号发消息,(这里可以是个菜单项,也可以是一个关键词,如:注册会员.) 2.kbmmw web server收到消息,生成一个图文消息给微信,在图文消息中做好自己的url,在url中,可以把第一步消息带来的openid写到url的参数表中. 3.用户点这个图文消息 4.web server收到这个图文消息的url,根据这个url,生成一个网页给微信,这里面关键是把openid写到网页中 5.用户填写这个网页,提交(提交的同时也把openid也提交回来了) 6.Ok,现在得

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

开始前,先看下要实现的微信接口,上传多媒体文件,这个接口是用Form表单形式上传的文件.对我来说,对http的Form表单一知半解,还好,查到这个资料,如果你也和我一样,必须看看这篇文章. 在xalion窑主的指导下,我使用了indy自带的TIdMultiPartFormDataStre am类,来提交上传的文件. 如果使用indy的idhttp,则调用这个方法,即可以提交Form. function Post(AURL: string; ASource: TIdMultiPartFormDat

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

1.修改kbmMWUnidac单元的TkbmMWUNIDACConnection.InternalOpenConnection方法,加上: //支持unidac重联           FDatabase.Options.LocalFailover:=Options.LocalFailover;           FDatabase.OnConnectionLost:=OnConnectionLost;           FDatabase.AfterConnect:=AfterConnec

甩掉运维黑锅,容灾部署如何该怎么做

现如今本地负载均衡技术已经解决服务器集群的高可用问题,但是断电.施工挖断光缆.自然灾害等依然可以导致整个数据中心无法工作.另外,中国网络由多家运营商组成,各运营商之间互联互通质量差已是不争的事实.因此大型互联网企业早已不满足于单一.或者双活数据中心提供网站服务,越来越多的互联网企业开始考虑在不同地区.不同运营商部署多个数据中心集群,以实现用户访问就近接入.负载均衡和故障容灾. 现如今本地负载均衡技术已经解决服务器集群的高可用问题,但是断电.施工挖断光缆.自然灾害等依然可以导致整个数据中心无法工作

跨园区容灾,升级不停服——高可用负载均衡集群实践

对于云计算行业来说,云服务的可用性和可扩展性是的检测其服务质量的重要标准,也是最受用户关注的两大难题.各云计算厂商针对容灾.升级等需求的解决方案,最能够体现其底层架构的实力.腾讯云基于基础架构的优势,为分期乐.微信红包等平台提供技术支持,可以完美满足如下三点需求: 1. 高可用能力,容灾能力强,升级不停服 2. 可扩展性强,功能丰富,性能超高 3. 避免重复造轮子,性价比之王 近期,针对一些客户对腾讯云产品可用性的问询,腾讯云基础产品团队对负载均衡产品的原理做出详细阐述,并希望通过对腾讯负载均衡

阿里云负载均衡升级:同城容灾进一步提升可用性

为了向广大SLB用户提供更加稳定可靠的负载均衡服务,近期阿里云对其SLB系统进行了升级,优先在杭州和青岛地域部署了同城容灾的本地高可用解决方案,下面就让我们一起来了解一下SLB同城容灾方案. 什么是同城容灾? SLB集群本身,已经实现了各种冗余,包括电力.网络.服务器等.我们单集群可以防止“单路电力故障”.“单边网络故障”.“服务硬件故障”.“系统意外宕机”甚至“整(一)个机柜突然掉电.突然断网.突然宕机”等故障对用户对外服务造成的影响. 但是更大范围的故障,比如整个数据中心不可用,已经不能从S