专栏首页mySoul​dubbo 负载均衡
原创

​dubbo 负载均衡

这一节开始负载均衡

首先是思维导图

image.png

前置知识

学习负载均衡需要一些前置知识,这里进行前置知识的学习

一些概念

负载均衡

负载均衡是一种计算机的技术,用来在多个计算机集群、网络连接、CPU、磁碟驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。 使用带有负载平衡的多个伺服器组件,取代单一的组件,可以通过冗余提高可靠性。负载平衡服务通常是由专用软件和硬件来完成。 主要作用是将大量作业合理地分摊到多个操作单元上进行执行,用于解决互联网架构中的高并发高可用的问题。

通俗的解释就是将一台服务器,变成多台服务器,进行流量的分发。

集群容错

对于分布式系统而言,当一台服务器出现故障,其他服务器可以得到通知,并对这台服务器进行容错处理,防着整个集群的塌陷。

服务路由

因特网在传送信息过程中,需要一台信息传送到目的地,中间经历的过程称为路由,对服务的客户端和服务端进行路由化处理,为以后的负载均衡做准备,这里称为服务路由。

健康检查

通过每隔一段时间,对后方的服务器发起访问请求,此称为健康检查。如出现挂掉的问题,直接抛出。

计算机知识体系

这里对应于计算机的知识体系,首先对应于网络的基础知识。

七层模型

OSI七层模型分为,物理层,数据链路层,网络层,传输层,会话层,表达层,应用层。

这里传输数据的时候,传输的顺序为应用层,表达层,会话层,传输层,网络层,数据链路层,物理层,物理层,数据链路层,网络层,传输层,会话层,表达层,应用层。

网络中的负载均衡

这里体现在路由上,通过配置路由器,实现一台路由接入多个WLAN。即利用多个网络设备通道均衡分担流量

image.png

上图为通过路由器实现负载均衡。

F5,Nginx 等负载均衡

Nginx,分为四层负载均衡,通过,四层负载均衡,即Nginx Proxy 实现负载均衡的处理。

image.png

通过F5硬件设备,实现VIP,通过VIP实现动态的负载均衡。

image.png

流程如下:

1.客户发出服务请求到VIP 

2.BIGIP接收到请求,将数据包中目的IP地址改为选中的后台服务器IP地址,然后将数据包发出到后台选定的服务器 

3.后台服务器收到后,将应答包按照其路由发回到BIGIP 

4.BIGIP收到应答包后将其中的源地址改回成VIP的地址,发回客户端,由此就完成了一个标准的服务器负载平衡的流程。

详解负载均衡

负载均衡为高可用架构的核心组件,用来提高性能,和高可用性,通过负载均衡流量分发到多台服务器,多台服务器消除单点故障。

对于单体网站架构如图所示

image.png

在这个例子里面,用户直接通过XXXXX.com连接Web Server,如果这一个Web Server挂了那么整个系统都无法使用,也就是我们常说的系统中的单点故障,同样如果大量的用户同时访问这一台服务器,那么这些用户很可能会遇到加载时间缓慢或者根本无法连接的问题。

这部分的单点故障可以通过引入负载均衡器和至少另一个Web Server来缓解。一般来说所有后端服务器会提供相同的内容,以便用户无论访问哪个服务器都会收到一致的内容。同时由于有多台服务器同时提供服务,也加大了系统的负载能力提高了性能。

负债均衡算法

负载均衡算法用于确定流量应该被分发到哪一个健康的服务器上,常见的几个算法如下:

Round Robin — 轮转(Round Robin)意味着服务器会被按顺序地选择,比如负载均衡器会将第一个请求分配给第一个服务器,然后下一个请求分配给第二个服务器,这样分配下去分配完一轮之后回到开头分配给第一个服务器(操作系统调度算法复习一下)。这种方式比较适合各服务器处理能力相同而且每个业务处理量差不多的时候。

Least Connections — 最少连接(Least Connections)这个算法意味着负载均衡器会选择当前连接最少的服务器。

IP hash — 在这个算法下,负载均衡器根据请求源的IP来决定分发给哪个服务器。这个方法保证了一个特定的用户会一直访问相同的服务器。

其他还有一些不算太常见的算法,比如Url hash、Random等。

双机热备

负债均衡器本身就是一个隐患,使用双机热备的方式进行解决。提高其冗余性。

image.png

例如上图中的Gif,采用VIP + 双机热备的方式实现负载均衡器。

实践操作

这里讲解XML配置方式,YML配置,注解配置以及dubbo-admin配置。

上一篇,HelloWorld已经创建一个服务端,和客户端。使用的是yml配置。这里三种都说明一下。

这里配置统统以轮询为例。

服务端

XML配置

<dubbo:service interface="..." loadbalance="roundrobin" />

yml 配置

dubbo:
  provider:
    loadbalance: roundrobin

基于注解

@Service(version = "${product.service.version}",loadbalance="roundrobin")
public class ProductServiceImpl implements ProductService {
    @Override
    public String helloDubbo() {
        return "hello,spring-boot dubbo";
    }
}

客户端

这里进行客户端的配置

XML配置

<dubbo:reference interface="..." loadbalance="roundrobin" />

yml配置

dubbo:
  consumer:
    loadbalance: roundrobin

基于注解

@RestController
public class ProductController {
 
    @Reference(version = "${product.service.version}",loadbalance="roundrobin")
    private ProductService productService;
 
    @RequestMapping(value = "test")
    public String test() {
        return productService.helloDubbo();
    }
}

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 测试用例概念 原则

    测试用例为一组条件或变量,根据其来确定应用软件是否能够正常的工作。其条件和变量为测试用例。

    mySoul
  • Node 连接mysql数据库

    github地址 https://github.com/jxcore/jxcore

    mySoul
  • 微信小程序网络通信(一)

    先调用 wx.login(Object object) 获取临时登录凭证,及code,然后wx.request()方法将登录凭证发送到开发者服务器,开发者服务器...

    mySoul
  • 什么是负载均衡?

    负载均衡是高可用性基础架构的关键组件,通常用在多个服务器之间分配工作负载来提高网站、应用程序、数据库和其他服务的性能和可靠性。

    司徒永哥
  • 大型网站架构系列:负载均衡详解

    硬件负载均衡性能优越,功能全面,但是价格昂贵,一般适合初期或者土豪级公司长期使用。因此软件负载均衡在互联网领域大量使用。常用的软件负载均衡软件有Nginx,Lv...

    技术zhai
  • 负载均衡详解

    面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器,采用高效率的编程语言比如(Go,Scala)等,当单机...

    用户1263954
  • 刨根问底---一次 OOM 试验造成的电脑雪崩引发的思考

    在写「垃圾回收-实战篇」时,按书中的一个例子做了一次实验,我觉得涉及的知识点挺多的,所以单独拎出来与大家共享一下,相信大家看完肯定有收获。

    kunge
  • 【Java】一次 OOM 试验造成的电脑雪崩引发的思考

    在写「垃圾回收-实战篇」时,按书中的一个例子做了一次实验,我觉得涉及的知识点挺多的,所以单独拎出来与大家共享一下,相信大家看完肯定有收获。

    Rude3Knife的公众号
  • [Linux] LVS虚拟服务器四层负载均衡

    随着互联网的爆炸性增长及其在我们生活中日益重要的作用,互联网上的流量急剧增加,并且每年以超过100%的速度增长。服务器上的工作负载正在迅速增加,因此服务器很容易...

    陶士涵
  • OpenBSD SMTP漏洞分析报告

    安全人员在OpenBSD SMTP中发现了一个存在长达4年的漏洞,攻击者可利用该漏洞远程执行代码,多个linux发行版本受到影响。

    FB客服

扫码关注云+社区

领取腾讯云代金券