![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分布式RPC系统框架Dubbo
诸般世界
这个作者很懒,什么都没留下…
展开
-
分布式RPC系统框架Dubbo-23Dubbo的内核解析-Wrapper机制
Wrapper机制,即扩展类的包装机制;就是对扩展类中的SPI接口方法进行增强,进行包装,是AOP思想的提现,是Wrapper(装饰者)设计模式的应用(是一种特例的装饰者设计模式),一个SPI可以包含多个Wrapper。注意,Wrapper类不属于“拓展类”;1.Wrapper类规范Wrapper机制不是通过注解实现的,而是通过Wrapper类实现,Wrapper类在定义时需要遵循如下规范: 类要实现SPI接口; 类中要有SPI接口的引用; 在接口实现方...原创 2020-10-08 11:39:45 · 709 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-21Dubbo的内核解析-SPI机制
所谓Dubbo的内核是指,Dubbo中所有功能都是基于内核完成的,都是由内核作为基础;dubbo的内核包含四部分,SPI、AOP、IOC与Compiler,后三部分的实现都基于SPI,所以说SPI是内核的内核;1.1 JDK的SPI机制 SPI,Service Provider Interface,服务提供者接口,是一种服务发现机制;1.2 JDK的SPI规范 接口名:可随意定义(符合命名约定) 实现类名:可随意定义(约定为serviceI...原创 2020-09-21 21:41:33 · 375 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-20Dubbo系统架构分析
1-Dubbo的系统架构分析 阿里系的RPC框架;hsf:淘宝正在使用的RPC框架; sofa:蚂蚁经正在使用的RPC框架; dubbo:阿里B2B开发的RPC框架;1.1 Dubbo的两大设计原则Dubbo框架在设计时遵循两大设计原则: Dubbo使用“微内核+组件”的设计模式;内核只负责组装插件(扩展点),Dubbo的功能都是由插件实现的,也就是Dubbo的所有功能点都可以被用户自定义扩展类所替代,只需要增加某功能接口的实现类即可实现业务功能; 采用URL...原创 2020-09-21 21:31:20 · 204 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-19Spring Boot中使用Dubbo
一、Spring Boot中使用Dubbo1 定义commons工程11-dubboCommons(1) 创建工程这里就创建一个普通的Maven的Java工程,并命名为dubboCommons。(2) 定义pom文件<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.原创 2020-09-18 14:19:27 · 166 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-18延迟服务暴露与异步消费
一、延迟服务暴露 如果服务启动过程需要warmup事件(预热事件),就可以使用delay进行服务延迟暴露。只需在服务提供者的dubbo:service/标签中添加delay属性。其值可以有三类: 正数:单位为毫秒,表示在提供者对象创建完毕后的指定时间后再发布服务; 0:默认值,表示当前提供者创建完毕后马上向注册中心暴露服务; -1:表示在Spring容器初始化完毕后再向注册中心暴露服务; 注意:0与-1的区别,spring容器中的bean分为两类,即singl...原创 2020-09-17 09:37:04 · 453 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-15多注册中心与单功能注册中心
一、多注册中心 根据项目业务的不同需求,会出现需要将不同的服务注册到不同服务中心,例,某些功能需要区域化差异,那么就可以将服务注册到特定区域的注册中心,比如北京用户查询与推荐数据以北京地区为限,那么其访问的就是北京数据仓库,对于其用户请求也就由北京注册中心提供服务;并且相同的服务注册到各个地域的注册中心有利于提高用户体验,那个区域请求对应当前区域的注册中心,响应高效,用户体验好; 常用的场景实现是不同的服务注册到不同的服务中心。1 创建提供者(1) 创建工程...原创 2020-09-16 17:26:33 · 544 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-14声明式缓存
为了进一步提高消费者对用户的响应速度,减轻提供者的压力,Dubbo提供了基于结果的声明式缓存。该缓存是基于消费者端的,所以使用很简单,只需修改消费者配置文件,与提供者无关。1 缓存设置(1) 创建工程 应用https://blog.csdn.net/zxylwj/article/details/108542567中的提供者与消费者工程,更名消费者工程为consumer-cache;(2) 修改消费者配置文件 仅需在dubbo:reference...原创 2020-09-15 16:56:17 · 324 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-13服务限流
为了防止某个消费者的QPS或是所有消费者的QPS总和突然飙升而导致的重要服务的失效,系统可以对访问流量进行控制,这种对集群的保护措施称为服务限流; Dubbo中能够实现服务限流的方式较多,可以划分为两类:直接限流与间接限流; 直接限流:通过对连接数量直接进行限制来达到限流的目的; 间接限流:通过一些非连接数量设置来达到限制流量的目的; 1 直接限流 创建一个简单的dubbo生产消费环境,可以通过https://blog.csdn.net/zxylwj/a...原创 2020-09-15 15:37:39 · 266 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-12服务调用超时
服务降级的发生,其实是由于消费者调用服务超时引起的,即从发出调用请求到获取到提供者的响应结果这个时间超出了设定的时限,默认服务调用超时时限为1秒,可以在消费者端与提供者端设置超时时限;1 创建提供者工程(1) 创建工程 创建provider-timeout,并导入依赖;<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding&g...原创 2020-09-15 13:18:25 · 283 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-11服务降级
服务降级 解决高并发的三把利器:降级、限流、缓存。1 什么是服务降级服务降级,当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务有策略的降低服务级别,以释放服务器资源,保证核心任务的正常运行。2 服务降级方式能够实现服务降级方式很多,常见的有如下几种情况: 部分服务暂停 系统可以访问,一部分业务权重相对低的服务暂时停止服务,例,某猫光棍节平台不通过修改收货地址、不可查看历史订单等; 全部服务暂停 系统不可访问,请求会被告知系统维护中,跳转至预...原创 2020-09-14 17:07:56 · 182 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-10集群容错
集群容错 集群容错指的是,当消费者调用提供者集群时发生异常的处理方案。1.Dubbo内置的容错策略 Dubbo内置了6种集群容错策略。(1) Failover 故障转移策略,默认容错策略,需根据业务配置重试策略;当消费者调用提供者集群中的某个服务器失败时,其会自动尝试着调用其它服务器;该策略通常用于读操作,例如,消费者要通过提供者从DB中读取某数据,但重试会带来服务延迟。(2) Failfast 快速失败策略,...原创 2020-09-14 10:48:23 · 334 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-09负载均衡
1 搭建负载均衡环境 例,负载均衡中同一服务会有三个提供者,提供的功能与服务一致,消费者只有一个。step1 创建提供者provider-loadbalance-xxx 创建三个提供者,工程尾名区分(one、two、three);A、创建工程添加依赖<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <...原创 2020-09-13 17:59:14 · 145 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-08多协议支持
除了Dubbo服务暴露Dubbo协议外,Dubbo框架还支持另外8种服务暴露协议:RMI协议、Hessian协议、HTTP协议、WebService协议、Thrift协议、Memcached协议、Redis协议、Rest协议,但在实际生产中,使用最多的就是Dubbo服务暴露协议。1 各个协议的特点 小数据大并发使用Dubbo,大数据小并发使用其它。1.1 dubbo协议 Dubbo默认传输协议 连接个数:单连接 连接方式:长连接 ...原创 2020-09-13 14:59:14 · 235 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-07服务分组
服务分组与多版本控制的使用方式几乎是相同的,只要将version替换为group即可,但使用目的不同,使用版本控制的目的是为了升级,将原有老版本替换掉,将来不再提供老版本的服务,所以不同版本间不能出现相互调用,而分组的目的则不同,其也是针对相同接口,给出了多种实现类,但不同的是,这些不同实现并没有谁替换掉谁的意思,是针对不同需求,或针对不同功能模块所给出的不同实现,这些实现所提供的服务是并存的,所以它们间可以出现相互调用关系,例如,对于支付服务的实现,可以有微信支付实现与支付宝支付实现等。...原创 2020-09-13 14:03:08 · 458 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-06版本控制实现灰度发布
多版本控制 当系统进行升级时,一般都是采用“灰度发布(又称为金丝雀发布)”过程,即在低压力时段,让部分消费者先调用新的提供者实现类,其余的仍然调用老的实现类,在新的实现类运行没有问题的情况下,逐步让所有消费者全部调用成新的实现类,多版本控制就可以实现灰度发布。 接口为同一个,说明注册到注册中心的服务名称是一致的,因此old与new的区分,是通过服务名即接口结合version版本号来确定。1.创建提供者provider-versionstep1 创建工程 ...原创 2020-09-13 10:32:30 · 556 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-05关闭duboo服务检查
关闭服务检查step1 修改工程02-consumer-zkA、修改ConsumerRun类将对消费者方法的调用语句注释掉,使消费者暂时不调用消费者方法。B、运行测试 运行后会报错,错误原因是检查SomeService的状态失败。Caused by: java.lang.IllegalStateException: Failed to check the status of the service com.zxy.service.SomeService. No p...原创 2020-09-12 16:49:38 · 182 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-04应用Zookeeper注册中心
应用Zookeeper注册中心 直连式存在单点问题,解决方法是提供多个provider,然后将providers注册到注册中心,consumer通过负载均衡策略来访问服务;在生产环境下使用最多的注册中心为Zookeeper,当然,Redis也可以做注册中心,此处应用Zookeeper作为注册中心。1 创建提供者02-provider-zkstep1 导入依赖 复制前面的提供者工程01-provider,并更名为02-provider-zk。修改pom文件,并在其中...原创 2020-09-11 22:16:06 · 117 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-03直连式Dubbo
直连式Dubbo程序1. 创建业务接口工程0-api业务接口名即服务名称,无论是服务提供者向服务注册中心注册服务,还是服务消费者从注册中心索取服务,都是通过接口名称进行注册与查找的。即,提供者与消费者都依赖于业务接口。所以,一般情况下,会将业务接口专门定义为一个工程,让提供者与消费者依赖。step1 创建Maven的Java工程step2 创建业务接口 public interface SomeService { String helloDubbo(String msg);}原创 2020-09-11 19:59:28 · 186 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-02Dubbo初识
Dubbo初识3.1 Dubbo官网 Dubbo官网为http://dubbo.apache.org,该官网是Dubbo正式进入Apache开源孵化器后更改为该网址,Dubbo原官网为:http://dubbo.io 。 Dubbo官网已做过了中英文国际化,用户可在中英文间任何切换。3.2 什么是PRC? RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需...原创 2020-09-11 16:29:21 · 159 阅读 · 0 评论 -
分布式RPC系统框架Dubbo-01Dubbo概述
Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。1.系统架构的发展 dubbo为分布式而生开源框架,比较流行的说法“如果没有分布式微服务应用,那么就不需要dubbo的存在”,印证了dubbo在分布式无服务环境中的重要性;因此首先要了解一下系统架构的发展历程。1.1 单体系统架构 当站点功能与流量都很小时,只需一个应用,将所有功能都...原创 2020-09-11 15:02:06 · 178 阅读 · 0 评论