再用dubbo作为项目架构的时候,给consumer消费者用nginx提供了负载均衡策略和集群的实现,

但是想了下,consumer再多,但是提供者还是一个,最后还不都是落到了这一个provider上面?

举个列子:

  一个饭店有1个后厨在做饭,

  前台有100个点菜的服务员,

  100个顾客来点餐,每个服务员都来告诉后厨做饭的,那么后厨...


Dubbo实现负载均衡,一般是对服务的提供者来实现我们的集群管理,也就是负载均衡,然后服务的消费者在请求消费的时候,通过一定的算法进行寻址(权重),可以参考下Nginx

Dubbo提供了四种负载均衡策略

  随机 Random LoadBalance  按照权重设置的大小,随机

  轮询 RoundRobin LoadBalance 例如:a b c  a执行完b执行然后c,然后在到a...

  最少活跃调用数(权重)LeastActive LoadBalance
    活跃数指调用前后计数差,优先调用高的,相同活跃数的随机。使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

  一致性Hash ConsistentHash LoadBalance
    相同参数总是发送到同一个提供者,如果这个提供者挂掉了,它会根据它的虚拟节点,平摊到其它服务者,不会引起巨大的变动

注意*:缺省为random 随机 (也就是说,不配置负载均衡策略的时候,默认为random)

配置负载均衡级别的方法:

可以给服务配置级别也可精确到每个方法的级别

服务端服务级别配置:

  1. <dubbo:service interface="接口名" loadbalance="roundrobin"/>

服务端方法级别配置:

  1. <dubbo:service interface="接口名">
      <dubbo:method name="方法名" loadbalance="均衡策略名"/>
    </dubbo:service>

客户端服务级别配置:

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

客户端方法级别配置:

  1. <dubbo:reference interface="" loadbalance="roundrobin">
  2. <dubbo:method name="方法名" loadbalance="均衡策略明"/>
  3. </dubbo:reference>

我们也可以通过可视化界面管理平台来操作

 

配置完负载均衡下面,就要来配置我们的dubbo集群了


Dubbo 集群配合

具体的做法是对服务提供者的配置文件进行修改 ,配置文件里面的application name相同,dubbo则会认为是同一集群。

部署多个集群只需要步骤:

  application name相同

  1. <dubbo:application name="服务名"/>

  协议端口需要修改不同

  1. <dubbo:protocol name="dubbo" port="端口需要修改,不能重复"/>

下面是我配置服务的案例:

需求:配置一个集群环境,两个服务提供者

provider01

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://code.alibabatech.com/schema/dubbo
  8. http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  9.  
  10. <!-- 配置应用名
  11. 注意:配置集群的情况下需要同一集群的name值相同
  12. -->
  13. <dubbo:application name="dubbo-provider"/>
  14.  
  15. <!-- 配置注册中心:
  16. address:注册中心的ip:port
  17. 注意:如果注册中心为ZooKeeper且为集群,那就要讲集群中所有的IP:PORT添加到该属性当中-
  18. protocol:注册中心类型
  19. -->
  20. <dubbo:registry address="169.254.18.25:2181,169.254.18.25:2182,169.254.18.25:2183" protocol="zookeeper"/>
  21. <!-- 配置协议与端口 -->
  22. <dubbo:protocol name="dubbo" port=""/>
  23. <dubbo:protocol name="hessian" port=""/>
  24.  
  25. <!-- 配置注册接口
  26. ref:引用实现类,因为我们在实现类里面加了@Service扫描注解
  27. -->
  28. <dubbo:service protocol="dubbo" interface="cn.arebirth.dubbo.service.UserDubboService" ref="userDubboServiceImpl" loadbalance="roundrobin"/>
  29. <dubbo:service protocol="hessian" interface="cn.arebirth.dubbo.service.CarDubboService" ref="carDubboServiceImpl" loadbalance="roundrobin"/>
  30. </beans>

这个服务配置完后,打包发布到服务器运行,我们会在dubbo-admin的控制台上发现这样的内容

provider02

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://code.alibabatech.com/schema/dubbo
  8. http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  9.  
  10. <!-- 配置应用名
  11. 注意:配置集群的情况下需要同一集群的name值相同
  12. -->
  13. <dubbo:application name="dubbo-provider"/>
  14.  
  15. <!-- 配置注册中心:
  16. address:注册中心的ip:port
  17. 注意:如果注册中心为ZooKeeper且为集群,那就要讲集群中所有的IP:PORT添加到该属性当中-
  18. protocol:注册中心类型
  19. -->
  20. <dubbo:registry address="169.254.18.25:2181,169.254.18.25:2182,169.254.18.25:2183" protocol="zookeeper"/>
  21. <!-- 配置协议与端口 -->
  22. <dubbo:protocol name="dubbo" port=""/>
  23. <dubbo:protocol name="hessian" port=""/>
  24.  
  25. <!-- 配置注册接口
  26. ref:引用实现类,因为我们在实现类里面加了@Service扫描注解
  27. -->
  28. <dubbo:service protocol="dubbo" interface="cn.arebirth.dubbo.service.UserDubboService" ref="userDubboServiceImpl" loadbalance="roundrobin"/>
  29. <dubbo:service protocol="hessian" interface="cn.arebirth.dubbo.service.CarDubboService" ref="carDubboServiceImpl" loadbalance="roundrobin"/>
  30. </beans>

我们在把provider02打包发布到服务器上运行,我们会看到我们的服务均已注册成功完毕,

此时也意味着集群搭建完毕了

仔细观察我们上边的配置文件不难发现,其实就是一个端口不同,其余都是相同的,

ps:

  搭建集群环境注意:

    同一集群环境中应用名必须一致

    端口必须不同

dubbo配置负载均衡、集群环境的更多相关文章

  1. 简单的 Nginx+Tomcat 配置负载均衡集群

    简单 Nginx+Tomcat 配置负载均衡集群 前期准备 解压两个tomcat,修改端口号 server1:8081 server:8082 同时启动 nginx官网下载解压版nginx 创建一个简 ...

  2. nginx集群:nginx配置负载均衡集群(nginx1.18.0)

    一,nginx的负载均衡集群的特点: 1,nginx集群和lvs的不同? lvs集群:工作在第4层(传输层) nginx集群:工作在第7层(应用层) lvs集群:性能更强 nginx集群:功能更强:可 ...

  3. nginx+php负载均衡集群环境中的session共享方案梳理

    在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...

  4. nginx+tomcat 配置负载均衡集群 (转载)

    一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章<一台机器同时启动多个tomcat>. nginx官网下载解压版n ...

  5. Nginx+PHP负载均衡集群环境中Session共享方案 - 运维笔记

    在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...

  6. Nginx+Tomcat 配置负载均衡集群

    一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章<一台机器同时启动多个tomcat>. nginx官网下载解压版n ...

  7. Nginx + Tomcat 配置负载均衡集群简单实例

    一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章<一台机器同时启动多个tomcat>. nginx官网下载解压版n ...

  8. Nginx+tomcat配置负载均衡集群

    操作系统版本:Centos 6.4 Nginx版本:nginx-1.3.15.tar.gz wget http://nginx.org/download/nginx-1.5.9.tar.gz JDK版 ...

  9. LVS-DR实现mysql负载均衡集群

    lvs-dr实现mysql负载均衡集群 环境说明: 服务器的操作系统均为centos7,vip和rip在同一网段,使用lvs-dr模型来实现mysql集群服务 所有服务器均已配置好处VIP外的静态IP ...

  10. LVS-NAT:搭建HTTP及HTTPS负载均衡集群

    目录 LVS-NAT:搭建HTTP及HTTPS负载均衡集群 环境说明: 搭建NAT模式的HTTP负载集群 1. 配置好IP地址信息 2. DR上开启IP转发 3.DR上配置lvs-nat的转发机制 4 ...

随机推荐

  1. CSU 1804: 有向无环图 拓扑排序 图论

    1804: 有向无环图 Submit Page   Summary   Time Limit: 5 Sec     Memory Limit: 128 Mb     Submitted: 716    ...

  2. 题解 UVA11000 【Bee】

    传送门 [题目描述] 在非洲有一种非常特殊的蜜蜂.每年,这种蜜蜂的一只雌蜂生育一只 雄蜂,而一只雄蜂生育一只雌蜂和一只雄蜂,生育后它们都会死去!现在科学家们意外地发现了这一特殊物种的一只神奇的雌蜂,她 ...

  3. C#开发BIMFACE系列21 服务端API之获取模型数据6:获取单模型的楼层信息

    系列目录     [已更新最新开发文章,点击查看详细] 一个文件/模型中可能包含多个楼层信息,获取楼层信息对于前端页面的动态展示非常有帮助.本篇介绍获取一个文件/模型中可能包含多个楼层信息的详细方法. ...

  4. 深入浅出理解EdgeBoard中NHWC数据格式

    摘要: 在深度学习中,为了提升数据传输带宽和计算性能,经常会使用NCHW.NHWC和CHWN数据格式,它们代表Image或Feature Map等的逻辑数据格式(可以简单理解为数据在内存中的存放顺序) ...

  5. 微服务SpringCloud之服务网关zuul一

    前面学习了Eureka.Feign.Hystrix.Config,本篇来学习下API网关zuul.在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服 ...

  6. 本地代码上传至github

    一. 环境及工具 1.下载并安装git版本管理工具 到 http://git-scm.com/downloads 下载并安装git版本管理工具 2.Windows客户端 3.配置github账号密码及 ...

  7. JAVA集合框架包含的内容

    Java集合框架提供了一套性能优良.使用方便的接口和类,他们位于java.util包中. Collection接口 主要有List.Set等实现类,Map接口主要有HashMap.TreeMap等实现 ...

  8. VS中一些提高编码效率的快捷键

    场景 新手入门,看见大神们在VS中只用键盘就可以完成一系列操作. 整理一些常用的能提高效率的快捷键. 关注公众号霸道的程序猿获取编程相关电子书.教程推送与免费下载. 大量编程视频教程:https:// ...

  9. java 简单框架的运用

    Struts Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的. Struts框架可分为以下四个主要部分,其中三个就和MVC模式紧密相关:  1.模 ...

  10. LINUX下搭建简单临时的WWW服务器

    首先确定是否安装有python: python -V 如果有: cd 到你要开放的文件夹中,然后使用下面的命令可以把 当前文件夹内的所有文件 发布到 8000 端口. python -m Simple ...