精华内容
下载资源
问答
  • 问:nginx负载均衡服务器死机或者挂掉之后,怎么自动转到另一台负载均衡服务器上继续转发请求。

    问:nginx负载均衡服务器死机或者挂掉之后,怎么自动转到另一台负载均衡服务器上继续转发请求。

    展开全文
  • 首先我们先介绍一下什么是负载均衡:负载平衡(Loadbalancing)是种计算机...负载均衡器内部会根据应用服务器的负载情况,决定把消息转发给哪台服务器处理。同时负载均衡器还可以对用户屏蔽应用服务器失效,只要把用户
  • 最近公司的项目要在电信上线,遇到了一个问题:我们的应用部署在一台服务器上,但做了负载均衡。这样就会有一个问题:我们的工程里面本来就有两个定时器会在指定的时间间隔内,运行相关程序,但负载均衡后的结果却是...

    http://blog.sina.com.cn/s/blog_61d8d9640101ajmz.html
    最近公司的项目要在电信上线,遇到了一个问题:我们的应用部署在一台服务器上,但做了负载均衡。这样就会有一个问题:我们的工程里面本来就有两个定时器会在指定的时间间隔内,运行相关程序,但负载均衡后的结果却是:有可能会出现,在A服务机上的应用在跑定时器时,B也会同时跑定时器,这样就很容易造成数据库表的死锁或者产生脏数据。这就是所谓的定时器双机处理。为了实现在这种情况下,始终只有一个定时器在跑,项目组做了这样的一个设计,个人感觉这个设计比较完美,就把它的一个大概思路在这里记一下:
          首先,我们先在数据库建一个表:timerT,表里面有三个字段:status(表当前定时器是否处于可运行状态)、timestamp(时间戳)、serverIP(正在运行定时器的服务器IP)。
          这里其具体的用法是:当两台服务器,都运行起来后,服务器A开始执行定时器,这时,A会去读取表timerT的status字段,当为0时,则执行定时器的业务逻辑,此时A定时器,需要把status改为1,以便让另一台服务器的定时器B不去执行业务逻辑并把当前服务器的IP记录到表中,同时修改启动一个新的线程,在XXX长的时间间隔内不断去修改timestamp的值,当A执行完业务逻辑时,就把status的值改为0,这样B定时器就可以执行。这样做可以解决一个问题,就是:当其中一个定时器A挂掉后,我们另一个定时器B,可以比对timestap的值与当前时间是否超过XXX时长,如果超过,则证明定时器A已经挂掉,这时B就会把status的值改成1,把serverIP改成B定时器所在的服务器IP,并执行业务逻辑。
    展开全文
  • 1)L4负载均衡是基于流的服务器负载均衡,能够对报文进行逐流分发,即将同一条流的报文分发给同一台服务器; 2)L7负载均衡是基于内容的服务器负载均衡,能够对七层报文内容进行深度解析,并根据其中的关键字进...

    1. 服务器负载均衡

    服务器负载均衡是将客户端请求在集群中的服务器上实现均衡分发的技术。按照位于七层网络协议栈的不同层的划分,服务器负载均衡可以分为四层(L4)负载均衡和七层(L7)负载均衡两种。
    1)L4负载均衡是基于流的服务器负载均衡,能够对报文进行逐流分发,即将同一条流的报文分发给同一台服务器
    2)L7负载均衡是基于内容的服务器负载均衡,能够对七层报文内容进行深度解析,并根据其中的关键字进行逐包转发,按照既定策略将连接导向指定的服务器。
    两者相比较,L4负载均衡因无法对七层业务实现按内容分发,限制了它的适用范围,因此L7负载均衡受到了业界的极大重视并日渐成为服务器负载均衡的主流。

    1.1 四层负载均衡

    L4负载均衡的实现主要有NAT(NAT,Network Address Translation)方式和DR(Direct Routing)方式两种类型,它们适用于不同的应用场景。

    (1)网络地址转换

    网络地址转换(NAT,Network Address Translation)属于广域网接入技术,它是一种将私有(保留)地址转化为合法IP地址的转换技术,被广泛应用于各种类型互联网接入方式和各种类型的网络中。

    采用NAT方式实现的L4服务器负载均衡,后端服务器可以位于不同的物理位置和不同的局域网内。负载均衡设备在分发服务请求时,需要进行虚拟IP地址和目的IP地址转换,再通过路由将报文转发给具有相应目的地址的服务器。NAT方式L4负载均衡的典型组网如图所示。

    NAT方式L负载均衡的典型组网

    主要组件包括如下几项:
    ◇ 负载均衡设备:负责将客户端服务请求分发到服务器集群中的具体服务器进行处理。
    ◇ 真实服务器:负责响应和处理各种客户端服务请求的服务器,多台服务器构成集群。
    ◇ 虚拟IP地址:集群对外提供的公网IP地址供客户端请求服务时使用。
    ◇ 服务器IP地址:服务器的IP地址供负载均衡设备分发服务请求时使用。这个IP地址可以是公网IP,也可以是私网IP。

    NAT方式L4服务器负载均衡的工作原理如图4-7所示。
     NAT方式L4负载均衡的工作流程

    工作流程是这样的:

    • (1)负载均衡设备负责接收客户端发送至虚拟IP地址的服务请求。
    • (2)负载均衡设备通过服务器可用性验证、会话持续性保证等对负载均衡算法进行调度,选择出负责响应和处理该请求的真实服务器。
    • (3)负载均衡设备用真实服务器的IP地址改写请求报文的目标地址,再将请求发送给选定的真实服务器。
    • (4)真实服务器的响应报文首先通过负载均衡设备。
    • (5)负载均衡设备将响应报文的源地址修改为虚拟lP地址,再返回给客户端。

    这种方法使用了网络地址转换(NAT)技术实现L4负载均衡,它具有组网灵活,适用于多种组网类型的特征。该方法对服务器没有额外的要求,不需要修改服务器的配置。

    (2)DR(Direct Routing)

    DR(Direct Routing)是另一种L4服务器负载均衡的实现方式。与NAT方式的L4负载均衡不同,DR方式只有客户端发出的服务请求报文需要通过负载均衡设备,而服务器发出的响应报文则无须通过,这样能够有效减少负载均衡设备的负载压力,避免负载均衡设备成为系统性能瓶颈。

    DR方式下,负载均衡设备在分发服务器请求时,不采用改变请求目的IP地址的方法,而是将报文的目的MAC地址替换为服务器的MAC地址,然后直接将报文转发给服务器。
    DR方式L4负载均衡的典型组网

    从图中可以看出,DR方式L4服务器负载均衡的实现方案与NAT方式类似,区别是负载均衡设备是以旁挂形式与交换机相连接的,而且集群中每台处理用户请求的服务器都拥有单独的虚拟IP地址

    DR方式L4负载均衡的原理是为负载均衡设备和真实服务器同时配置虚拟IP地址,但是要求真实服务嚣的虚拟IP地址不能响应ARP请求,例如在环回接口上配置虚拟IP地址。用于响应服务请求的服务器上除了虚拟IP地址,还需要配置一个真实的IP地址用于和负载均衡设备通信。负载均衡设备要和真实服务器同处于一个二层网络内。因为服务器的虚拟IP地址不能响应ARP请求,所以从客户端发送给虚拟IP地址的报文将由负载均衡设备接收,负载均衡设备再将其分发给相应的真实服务器,而从真实服务嚣发送给客户端的响应报文则直接由交换机返回。
    DR方式L4负载均衡的工作流程

    这种方法没有采用传统的通过查找路由表的转发方式来分发请求报文,而是通过修改目的MAC直接路由给服务器,DR方式也就因此而得名。该方法只要求客户端到服务器的单方向请求报文经过负载均衡设备,负载均衡设备负担较小,不易成为瓶颈,具有更高的处理性能。

    1.2 七层负载均衡

    L4服务器负载均衡在截取数据流以后,对数据包的检查和分析仅局限于IP报文头部和TCP/UDP报文头部,而并不关心TCP/UDP数据包的有效载荷信息。而L7服务器负载均衡则要求负载均衡设备除了支持基于四层的负载均衡以外,还要解析数据包中四层以上的信息,即应用层的信息,例如解析HTTP内容,从而在数据包中提取出HTTP URL或者Cookie信息,用来作为负载均衡的依据。

    L7服务器负载均衡通过内容分析控制应用层服务分发,提供了一种高层的访问流量控制方式,与此前传统的L4负载均衡相比,L7负载均衡具有如下优点:

    (1)能够根据数据包内容(例如判断数据包是图像文件、压缩文件或者多媒体文件等)把数据流量引向能够处理相应内容的服务器,提高系统可管理性和灵活性。
    (2)能够根据连接请求的数据类型(例如根据URL判定用户发来的请求是和普通文本、图像等静态文档相关,还是和ASP、CGI等动态文档相关),把其引向相应的服务器处理,在提高系统性能的同时有助于改善安全性。
    (3)能够根据应用层载荷保证会话持续性,相对于L4服务器负载均衡采用的基于地址的持续性保证方式更加精细。

    L7负载均衡的典型组网

    L7服务器负载均衡与NAT方式L4服务器负载均衡在实现上非常类似,其主要区别是增加了服务组的概念。服务组是一个逻辑概念,是指依据一些公共属性将多台服务器划分为不同的组。例如:可以将服务器划分为静态资料存储服务器组和动态交换服务器组,或者划分为音乐服务器组、视频服务器组和图片服务器组等,根据应用层属性划分的服务器组内部各台服务器更容易有相近的性能和特性。

    L7负载均衡的工作流程
    (1)客户端与位于服务器集群前端的负载均衡设备之间建立TCP连接。
    (2)客户端将发送到虚拟IP地址的服务请求发送给负载均衡设备,负载均衡设备接收客户端请求。
    (3)负载均衡设备通过服务器可用性验证、会话持续性保证、服务组匹配策略、负载均衡算法调度等步骤,选择出负责响应和处理该请求的真实服务器。
    (4)负载均衡设备利用客户端地址与真实服务器建立TCP连接。
    (5)负载均衡设备将客户端请求报文的目的地址重写为真实服务嚣的IP地址,并将该请求发送给相应的服务器。
    (6)真实服务器向负载均衡设备响应服务。
    (7)报文在通过负载均衡设备时,源地址被还原为虚拟IP地址,再返回给客户端。

    L7服务器负载均衡在负载均衡过程中能够对应用层协议进行深度识别,带来了很多更精细化均衡的可能,但它也对系统性能提出了非常高的要求,通常需要采用专用芯片以硬件电路的方式实现。同时,它需要针对每种应用层协议都配备相应的独立的识别机制,这极大地限制了L7服务器负载均衡的应用扩展性。由于HTTP协议应用广泛且协议相对简单,所以当前L7负载均衡技术对HTTP请求进行负载均衡的商用能力最强。

    在实际应用中,L4负载均衡和L7负载均衡往往是搭配使用的,当然最好是在同一台负载均衡设备上兼具四层和七层功能。负载均衡设备首先从报文中提取IP地址和端口,进行四层负载均衡,如果发现确有必要进行进一步的基于报文内容的转发,再实施七层负载均衡操作。

    2. 链路负载均衡

    链路负载均衡是指通过动态算法在多条网络链路中进行负载均衡

    链路负载均衡根据业务流量的方向可以分为Outhound链路负载均衡Inbound链路负载均衡两种情况。
    (1)Outbound链路负载均衡主要解决的是企业内部业务系统访问外部互联网服务时如何在多条不同的链路中动态分配和负载均衡的问题;
    (2)Inbound链路负载均衡主要解决的是位于互联网外部的用户如何在访同企业内部网站和业务系统时动态地在多条链路上平衡分配,并在一条链路中断时能够智能地自动切换到另一条可用链路。

    链路负载均衡与服务器负载均衡之间的主要区别是承担负载的对象不同,单就负载均衡设备而言,其关键技术、部署方式等内容都具有类似之处。其中,在负载均衡调度算法方面,链路负载均衡有一些特有算法,例如就近链路选择算法、基于链路带宽的调度算法等。特别是就近链路选择算法,能够在链路负载均衡过程中,实时探测链路的状态,井根据探测结果选择最优链路,保证流量通过最优链路转发。就近链路选择算法对链路状态的探测可以通过链路健康性检测实现,例如通过发送DNS报文和ICMP报文、建立TCP半开连接等方法在验证链路可达性的同时获得相关的就近链路计算参数。在实现中,就近链路计算参数主要包括:链路物理带宽、链路成本(例如链路月租)、链路延迟时间、路由跳数等。就近链路选择算法也可以根据这些参数进行加权计算,然后根据计算结果判断链路的优劣。

    2.1 Outbound链路负载均衡

    当内网和外网之间存在多条链路时,Outbound链路负载均衡可以实现在多条链路上分担内网用户访问外网服务器流量的功能,其典型组网如图所示。
    0utbaund链路负载均衡的典型组网

    (1)负载均衡设备:负责将内网到外网的流量在多条物理链路上分发。
    (2)物理链路:网络服务器提供商(ISP)提供的实际通信链路。
    (3)虚拟IP地址:负载均衡设备对外提供的虚拟IP地址,用做用户发送报文的目的地址。

    Outbound链路负载均衡的原理是将负载均衡设备的虚拟IP址作为内网用户发送报文的目的地址用户在将访问虚拟IP地址的报文发送给负载均衡设备后,负载均衡设备通过链路选择算法选择出最佳的物理链路,并将内网访问外网的业务流量分发到该链路上。
    0utbaund链路负载均衡的工作流程
    Outbound链路负载均衡的技术特点包括如下几项。
    (1)通过结合NAT技术进行组网,不周链路使用不同源IP地址,从而能够保证往返报文均经由同一条链路。
    (2)通过健康性检测,可以检测链路上任意节点的连通性,从而有效地保证整条路径的可达性。
    (3)通过负载均衡调度算法的调度,可以在多条链路间均衡流量,例如利用基于带宽的算法优化带宽利用、利用就近链路选择算法选择最优链路。

    2.2 Inbound链路负载均衡

    Inbound链路负载均衡的主要作用是在多条链路上均衡调度外网用户访问企业内部网站和业务系统时的流量,并在一条链路中断时能够智能地自动切换到另一条可用链路。
    在这里插入图片描述
    如图所示,Inbound链路负载均衡的实现方案虽然与Outbound链路负载均衡在很多方面具有相似性,但是因为针对的是不同传输方向上的业务流量,因此部分功能有如下几点区别:
    (1)负载均衡设备:负责引导外网流量通过不同的物理链路转发到内网,实现流量在多条物理链路上的分发。同时,负载均衡设备还需要作为待解析域名的权威名称服务器
    (2)物理链路:网络服务器提供商(ISP)提供的实际通信链路。
    (3)本地DNS服务器:负责处理本地用户发送的DNS解析请求,将该请求转发给作为权威名称服务器的负载均衡设备。

    Inbound链路负载均衡的原理是将负载均衡设备作为权威名称服务器,用于记录域名与内网服务器IP地址之间的映射关系(即域名的A记录)
    补充:一个域名会被映射为多个IP地址,每个IP地址则对应一条物理链路。当外网用户通过域名方式访问内网服务器时,本地DNS服务器依照递归原则会向负载均衡设备请求域名解析,负载均衡设备通过就近链路选择算法筛选、ISP选择等步骤,选择出最佳的物理链路,并将通过该链路与外网连接的接口IP址作为DNS域名解析结果反馈给外网用户。相应的工作流程如图所示。

     Inbound链路负载均衡的工作流程

    Inbound链路负载均衡通过和服务器负载均衡相配合,可以同时实现多条链路间的均衡和多台服务器间的均衡。另一种应用方式是通过动态的链路选择算法,最终实现以链路最优为基础的服务嚣负载均衡。

    展开全文
  • 然后通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器都独立回应客户机的请求。由于建立内容完全一致的Web服务器并不复杂,可以使用服务器同步更新或者共享...
  • 服务器负载均衡技术

    千次阅读 2009-10-16 09:46:00
    负载均衡,从结构上分为本 地负载均衡和地域负载均衡(全局负载均衡),前种是指对本地的服务器集群做负载均衡,后种是指对分别放置在不同的地理位置、在不同的网络及服务器群集 之间作负载均衡。 每个主机运行...

    背景介绍:

    由于网络的数据流量多集中在中心服务器一端,所以现在所说的负载均衡,多指的是对访问服务器的负载进行均衡(或者说分担)措施。负载均衡,从结构上分为本 地负载均衡和地域负载均衡(全局负载均衡),前一种是指对本地的服务器集群做负载均衡,后一种是指对分别放置在不同的地理位置、在不同的网络及服务器群集 之间作负载均衡。

    每个主机运行一个所需服务器程序的独立拷贝,诸如Web、FTP、Telnet或e-mail服务器程序。对于 某些服务(如运行在Web服务器上的那些服务)而言,程序的一个拷贝运行在群集内所有的主机上,而网络负载均衡则将工作负载在这些主机间进行分配。对于其他服务(例如e-mail),只有一台主机处理工作负载,针对这些服务,网络负载均衡允许网络通讯量流到一个主机上,并在该主机发生故障时将通讯量移至其他主机。

    常见服务器负载均衡策略

    1、 DNS

    最早的负载均衡技术是通过DNS来实现的,在DNS中为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。

    DNS负载均衡是一种简单而有效的方法,但是它不能区分服务器的差异,也不能反映服务器的当前运行状态。当使用DNS负载均衡的时候,必须尽量保证不同 的客户计算机能均匀获得不同的地址。由于DNS数据具备刷新时间标志,一旦超过这个时间限制,其他DNS服务器就需要和这个服务器交互,以重新获得地址数据,就有可能获得不同IP地址。因此为了使地址能随机分配,就应使刷新时间尽量短,不同地方的DNS服务器能更新对应的地址,达到随机获得地址,然而将过期时间设置得过短,将使DNS流量大增,而造成额外的网络问题。DNS负载均衡的另一个问题是,一旦某个服务器出现故障,即使及时修改了DNS设置,还是要等待足够的时间(刷新时间)才能发挥作用,在此期间,保存了故障服务器地址的客户计算机将不能正常访问服务器。

    尽管存在多种问题,但它还是一种非常有效的做法,包括Yahoo在内的很多大型网站都使用DNS。

    也可以在客户端实现,客户端获取某个域名对应的ip地址列表,然后分别去ping这些ip地址,选择一个响应最快作为连接服务器。这种方法可以防止某个机器故障不能及时发现的问题,响应的延迟大小也基本上可以反映网络和服务器负载情况。这种策略的缺点是增加了客户端代码的复杂度。这种策略在一些升级服务器上有应用。

    2、 代理服务器

    使用代理服务器,可以将请求转发给内部的服务器,使用这种加速模式显然可以提升静态网页的访问速度。然而,也可以考虑这样一种技术,使用代理服务器将请求均匀转发给多台服务器,从而达到负载均衡的目的。

    这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部服务器,而这种代理方式是代理多个客户访问内部服务器,因此也被称为反向代理模式。虽然实现这个任务并不算是特别复杂,然而由于要求特别高的效率,实现起来并不简单。

    使用反向代理的好处是,可以将负载均衡和代理服务器的高速缓存技术结合在一起,提供有益的性能。然而它本身也存在一些问题,首先就是必须为每一种服务都专门开发一个反向代理服务器,这就不是一个轻松的任务。

    代理服务器本身虽然可以达到很高效率,但是针对每一次代理,代理服务器就必须维护两个连接,一个对外的连接,一个对内的连接,因此对于特别高的连接请求,代理服务器的负载也就非常之大。反向代理方式下能应用优化的负载均衡策略,每次访问最空闲的内部服务器来提供服务。但是随着并发连接数量的增加,代理服务器本身的负载也变得非常大,最后反向代理服务器本身会成为服务的瓶颈。

    3、 地址转换网关

    支持负载均衡的地址转换网关,可以将一个外部IP地址映射为多个内部IP地址,对每次TCP连接请求动态使用其中一个内部地址,达到负载均衡的目的。很多 硬件厂商将这种技术集成在他们的交换机中,作为他们第四层交换的一种功能来实现,一般采用随机选择、根据服务器的连接数量或者响应时间进行选择的负载均衡 策略来分配负载。由于地址转换相对来讲比较接近网络的低层,因此就有可能将它集成在硬件设备中,通常这样的硬件设备是局域网交换机。

    当前局域网交换机所谓的第四层交换技术,就是按照IP地址和TCP端口进行虚拟连接的交换,直接将数据包发送到目的计算机的相应端口。通过交换机就能将 来自外部的初始连接请求,分别与内部的多个地址相联系,此后就能对这些已经建立的虚拟连接进行交换。因此,一些具备第四层交换能力的局域网交换机,就能作 为一个硬件负载均衡器,完成服务器的负载均衡。

    由于第四层交换基于硬件芯片,因此其性能非常优秀,尤其是对于网络传输速度和交换 速度远远超过普通的数据包转发。然而,正因为它是使用硬件实现的,因此也不够灵活,仅仅能够处理几种最标准的应用协议的负载均衡,如HTTP 。当前负载均衡主要用于解决服务器的处理能力不足的问题,因此并不能充分发挥交换机带来的高网络带宽的优点。

    4、 协议内部支持

    除了这三种负载均衡方式之外,有的协议内部支持与负载均衡相关的功能,例如HTTP协议中的重定向能力等,HTTP运行于TCP连接的最高层。客户端通过 端口号80的TCP服务直接连接到服务器,然后通过TCP连接向服务器端发送一个HTTP请求。在服务器分清客户端所需的网页和资源之前,至少要进行四次 TCP的数据包交换请求。由于负载平衡设备要把进入的请求分配给多个服务器,因此,它只能在TCP连接时建立,且HTTP请求通过后才能确定如何进行负载 的平衡。当一个网站的点击率达到每秒上百甚至上千次时,TCP连接、HTTP报头信息以及进程的时延已经变得很重要了。在HTTP请求和报头中有很多对负 载平衡有用的信息。首先,也是最重要的一点是,我们可以从这些信息中获知客户端所请求的URL和网页,利用这个信息,负载平衡设备就可以将所有的图像请求 引导到一个图像服务器,或者根据URL的数据库查询内容调用CGI程序,将请求引导到一个专用的高性能数据库服务器。惟一能局限这些信息获取的因素是负载 平衡设备本身的灵活程度。事实上,如果网络管理员熟悉Web内容交换技术,他可以仅仅根据HTTP报头的cookie字段来使用Web内容交换技术改善对 特定客户的服务,如果能从HTTP请求中找到一些规律,还可以充分利用它作出各种决策。除了TCP连接表的问题外,如何查找合适的HTTP报头信息以及作 出负载平衡决策的过程,是影响Web内容交换技术性能的重要问题。

    但它依赖于特定协议,因此使用范围有限。根据现有的这些负载均衡技术,并应用优化的均衡策略,来实现后端服务器负载分担的最优状态。

    游戏世界的负载均衡

    1、 根据功能模块分散压力

    每个服务器只完成特定功能,玩家根据需要连接不同的服务器。

    clip_image002

    2、 根据玩家数目分散压力

    每个服务器完成所有功能,把玩家分配到不同服务器中,从而减少单个服务器压力。

    clip_image004

    BigWorld介绍

    1、本地交互是廉价的,跨主机交互是昂贵的,因此尽量把相互接近的实体放到同一个服务器上。

    地理上相差很远的实体则考虑放到不同服务器上。

    clip_image006

    3、 以实体(玩家、怪物和其他NPC等)为中心计算负载

    实体作为单一事件的代码和数据。

    实体可以在不同主机间移动。

    实体都可以被保存到数据库。

    clip_image008

    4、 地图的划分有静态的和动态两种。

    静态划分虽然容易,但是很多时候并不能反映真实的负载情况。

    动态划分虽然开发难度大些,但是更灵活,更容易平衡真实负载。

    动态划分是通过实时的移动不同游戏服务器的地图边界来实现的。

    动态划分可以实时调整不同服务器的压力,无需预先配置和预测。

    clip_image010

    5、 如何提高效率

    减少服务器之间的交互。

    在边界区域放置实体对象的拷贝(ghost对象)。

    所有读操作都在本地执行,这样比远程读取对象属性快很多。

    假设一个地图由6个server来负责

    clip_image012

    以server 5为例

    clip_image014

    其中绿色区域是用来放置临近的其他server的ghost对象

     
     clip_image016

    其中绿色区域为发送实体对象信息到其他临近server用来创建ghost对象

    clip_image018

    如何减少不同主机之间的通信

    1、 通过RPC调用改变对象状态属性。

    2、 所有的读操作都在本地执行。

    3、 写操作会从ghost对象传到实体对象。

    a) print localMonster.health

    i. Reads from local copy

    b) localMonster.attack()

    i. Calls “attack” function directly on local object

    c) print remoteMonster.health

    i. Reads from local ghost copy

    d) remoteMonster.attack()

    i. Sends command to remote server

    ii. Remote server calls “attack” on local object

    通过AOI来提高数据通知效率

    1、 最简单的方法是所有对象互相可见。

    2、 这样会导致n2 次数据传递,代价非常大。

    3、 如果只是发给对象感兴趣的区域(Area of Interest AOI ),则可以大大提高通知效率。

    下面是AOI示意图

    clip_image020

    问题与解决方案

    问题一

    实体对象在不同server间移动,但是由于server的ip是动态变化,让客户端来做又不合适,一个合理的做法是加入代理服务器proxy。

    最简单的架构

    clip_image022

    使用代理服务器(BaseApp)

    clip_image024

    使用代理服务器转发报文

    用户在CellApp 1上

    clip_image026

    用户移动到CellApp 2上

    clip_image028

    问题二

    当对象给另外一个服务器的对象发送消息或RPC,在回复消息之前被负载均衡方式移动到其他服务器,这时回复消息是否会出错?

    使用邮箱和自动转发功能解决这个问题。

    在下面的例子中,player 2随便在那个服务器上,当他向player 1发送一条消息后被转移到其他服务器,但是他还是能够收到player 1的回复。

    clip_image029

    服务器伸缩性演示

    播放影片

    问题三

    硬件和实体都可能不是统一的,硬件有差别,不同实体的开销也不相同。

    解决方法:根据cpu的消耗情况来分担负载,而不是根据用户数目。

    如何处理当机

    1、 所有机器都向中心服务器汇报状态。

    2、 当机发生时,不同游戏服务器的地图边界重新划分。

    3、 负载重新分配。

    4、 死亡的对象通过ghost恢复,由于重叠的区域比较大,因此真正死亡的对象不多。

    如何防止还未死掉的机器过载

    1、 减少加载的对象数目。

    2、 减少工作负载直到条件改善。

    一个负载均衡之后的示例

    clip_image031

    物理地图的单元划分

    整个世界地图被划分成很多单元,每一个单元都是100×100平方米的面积,负载均衡时边界调整是以单元为单位的。

    单元的划分也有利于并行加载地图,提高了加载的速度。

    当一个地图的容量超过机器物理内存时,也可以轻松处理。

    理论上支持无限大的地图。

    数据库伸缩处理

    传统的最简单的处理是,所有的游戏服务器都和一个中心数据库打交道,这样会导致中心数据库的压力过大,容易出现过载。

    解决方案:

    每个BaseApp都有一个SQLite DB,然后SQLite DB把数据合并到中心数据库。

    这样大大减少了中心数据库的压力。

    如何保证对象ID唯一性

    1、对象必须有唯一性ID,否则对象在不同服务器间移动就有问题。

    2、如果都在中心数据库产生唯一性ID,这样会导致中心数据库的压力成为一个瓶颈。

    解决方案一:

    在不同机器上随机产生128位的ID,这样重复的可能性很小,但是并不完美。

    另外,128位对象ID显得有点长。

    解决方案二:

    有中心数据库给每个游戏服务器分配ID,每个游戏服务器再给本机器上的对象分配下级ID。

    这样拼接起来的ID肯定不会有重复,而且长度较短。

    缺点是ID浪费较大,每个游戏服务器都占有一个号码段,跟用户多少无关。

    如何处理边缘对象的移动

    由于服务器的地图边缘经常动态移动,那么如何处理在地图边缘来回移动的对象?该对象可能在两个不同服务器上来回移动。

    这些移动对服务器的性能有较大影响。

    解决方案:

    1、 延迟处理,是否定时处理?

    2、 一些重要的对象身份属性不依赖于物理位置。

    展开全文
  • Nginx多台服务器实现负载均衡

    千次阅读 2019-06-04 19:15:52
    Nginx负载均衡服务器: IP:192.168.0.4(Nginx-Server) Web服务器列表: Web1: 192.168.0.5(Nginx-Node1/Nginx-Web1) Web2:192.168.0.7(Nginx-Node2/Nginx-Web2) 实现目的:用户访问Nginx-Server时,通过Nginx...
  • 服务器负载均衡算法

    千次阅读 2009-09-25 21:24:00
    服务器负载均衡算法服务器负载均衡算法有很多(持续性的和非持续性的),包括轮循算法、最少连接算法、响应时间算法、散列算法、最少连接失误算法,链路带宽算法等等。此外实际服务器(Real Server)可以被分配不同的...
  • 此实验与本博客的nginx代理负载均衡及同步web...**需求:在一台服务器上实现nginx负载均衡并在这台机器上同时运行web服务 本服务器IP为:192.168.88.88一、安装配置nginx 1、搭建环境#yum -y install gcc gcc-c++
  • 我们使用上文中的思路去搭建一个简单的负载均衡,然后关闭其中一台再来访问,会发现我们的浏览器卡住一直转圈圈,过了很久才会显示结果。 由此我们可以得出结论Nginx负载的时候如果其中一台服务挂掉了,它会把请求...
  • 简单实现web服务器负载均衡

    千次阅读 多人点赞 2013-07-30 14:13:27
    负载均衡建立在现有网络结构之上,提供了种有效方式扩展...本篇讲述如何利用反向代理来实现web服务器负载均衡。这里通过均衡服务器的实际承载,响应请求数量,传输数据流量,来实现负载均衡。优点是架构较简单。
  • 服务器 负载均衡 load balance

    千次阅读 2012-05-11 12:33:55
    负载均衡( Load Balance LB )建立在现有网络结构之上,它提供了种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 负载均衡有两方面的含义...
  • 当您的网站或者APP用户访问量增多,一台服务器就会显得越来越不够用,这时候你会采取增加服务器台数的办法解决问题,而通常和增加服务器数量配套使用的还有“负载均衡”。那么负载均衡是什么?有什么用呢?蒙鸟云将...
  • 服务器负载均衡是什么?

    千次阅读 2019-02-12 11:01:24
    经过某种负载分管技术,将外部发送来的央求均匀分配到对称结构中的某一台服务器上,而接收到央求的服务器独登时回应客户的央求。均衡负载可以平均分配客户央求到服务器列阵,籍此供应快速获取重要数据,解决很多并发...
  • 八步搞定Linux服务器负载均衡配置

    千次阅读 2019-04-03 16:48:53
    1、准备好三台虚拟机,一台模拟负载均衡器,两台模拟服务器RS,该三台服务器必须能够访问网络,且在同一网段。 本人准备好三台: Linux001:192.168.149.140 模拟负载均衡服务器 Linux002:192.168.149.141 模拟Linux...
  • 服务器负载均衡原理及实现

    千次阅读 2017-12-13 11:47:50
    背景:当系统面临大量用户访问,负载过高的时候,通常会使用增加服务器数量来进行横向扩展,使用集群和负载均衡提高整个系统的处理能力。在此先感谢两位作者: 1.作者:知乎用户 链接:...
  • 服务器负载均衡解决方案

    千次阅读 2016-02-02 15:18:19
    服务器负载均衡解决方案 、需求分析 随着互联网的高速发展,作为Web、Email、SQL、FTP、ERP、DNS、集群等等常见服务器的请求数据量越来越大,同时对应用的高可用性提出了更高的要求,服务器主备冗余模式已经...
  • 用两服务器搭建负载均衡

    千次阅读 2018-12-11 08:51:45
    负载均衡种技术,从字面意义上理解,就是让负载(变得)均衡,负载是什么呢?可以理解为工作量、工作强度。用日常生活中的例子来打比方,一群建筑工人,盖幢楼房,有搬砖的,有和水泥的,有砌墙的,有刷油漆的,...
  • 负载均衡设备作为纵跨网络2-7层协议的设备,往往放置在网络设备和应用设备的连接处,对工程师在网络和应用基本知识方面的要求远高于...服务器负载均衡有三大基本Feature:负载均衡算法,健康检查和会话保持,这三个F...
  • 可以解决个域名多台服务器均衡负载的DNS解析器WinMyDNSWinMyDNS
  • 负载均衡的思路下,多台...通过负载分担技术,将外部发送来的请求按一定规则分配到对称结构中的某一台服务器上,而接收到请求的服务器都独立回应客户机的请求。本文对Web服务器和应用服务器的负载均衡进行说明。
  • 为了提高服务器的性能和工作负载能力,企业通常会使用DNS服务器、网络地址转换等技术来实现多服务器负载均衡,特别是目前企业对外的互联网Web网站,许多都是通过几台服务器来完成服务器访问的负载均衡。  目前...
  • 服务器负载均衡是什么意思?

    万次阅读 2017-08-14 20:23:48
    经过某种负载分管技术,将外部发送来的央求均匀分配到对称结构中的某一台服务器上,而接收到央求的服务器独登时回应客户的央求。均衡负载可以平均分配客户央求到服务器列阵,籍此供应快速获取重要数据,解决很多并发...
  • 服务器集群负载均衡原理

    千次阅读 2018-03-07 19:49:13
    当系统面临大量用户访问,负载过高的时候,通常会使用增加服务器数量来进行横向扩展,使用集群和负载均衡提高整个系统的处理能力。而我们讨论的负载均衡一般分为两种,种是基于DNS,另种基于IP报文。利用DNS实现...
  • 公司要上线一个新应用,需要部署在两台服务器上(都是物理机),并且需要使用nginx做负载均衡,分担压力,因为访问量可能会很多。可惜只有两台服务器,要是有三台的话,那我就其中2台装tomcat,用来部署应用,剩下...
  • 服务器集群负载均衡技术

    千次阅读 2013-10-22 20:58:20
    负载均衡 (Load Balancing) 负载均衡建立在现有网络结构之上,它提供了种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 CDN负载均衡(Load ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 201,691
精华内容 80,676
关键字:

一台服务器负载均衡