探索分布式服务框架Dubbo8:Dubbo高级特性实践

Dubbo分布式服务框架入门(附工程) 本文介绍了dubbo的一些概念,并对zookeeper、dubbo-admin、提供者、消费者的搭建进行了详细的讲解,且附有工程源码 阅读详情
  • Dubbo 是什么?
  • 如何使用?
  • 注册中心
  • 多协议支持
  • 多版本支持
  • 启动检查
  • 集群容错
  • 降级

Dubbo 是什么?

我要直接说《分布式服务治理框架》讲道理没了解过的小伙伴应该是直接一脸懵逼,那么就从其主要想解决什么问题开始吧,首先说说历史
从经典的单体架构说起,通常这样是没有什么问题的,直到现在都很常用,然而随着用户量的增加,扩展性能也很方便,加服务器可以了,但随着用户越来越多,增加服务器的成本也大大的提高了,而且很多地方也容易造成性能的浪费,随着越加越多,渐渐的带来的提升也不是那么的明显了,开发维护起来也非常臃肿,于是就想把它拆分,例如这里我将它水平拆分,将所有的系统都拆分成单个一体的服务,这样利于开发维护和做技术积累,在扩展性能的时候也可以有针对的扩展

在我们水平拆分后,例如调用下订单这个服务,服务之间的交互是这样的,如上图,那么在这个通信的过程会遇见什么问题?

  1. 地址的维护,随着机器越来越多,各个服务部署在不同的机器上,他们地址也不一样
  2. 负载均衡
  3. 容错
  4. 降级
  5. 服务之间存在不同协议的通信
  6. 服务之间调用的监控
  7. 服务之间依赖关系,如那些服务依赖于那些服务,比如那些服务必须要等待依赖的服务先启动自己才能够启动
  8. ….

所谓的治理我个人理解起来就是:解决与管理

在 Dubbo 的架构中有 4 中角色

该图借鉴至 Dubbo 官方文档

Provider

服务提供者,提供服务给予消费者消费

Registry

注册中心,提供者将服务注册至注册中心,消费者向注册中心订阅,一旦服务发生变动都会通知消费者,其实就是服务的发现与注册

Consumer

服务消费者,没什么好说的

Monitor

监视者,监控服务的调用次数与调用时间

如何使用?

首先我创建 2 个项目,一个分别叫做dubbo-server-demo一个叫做dubbo-client-demo,分别都使用Maven来构建

接着在server-api模块里创建一个对外提供服务的接口TestService


 
  1. package org.yuequan.dubbo.demo;

  2.  
  3. public interface TestService {

  4. String sayHello(String msg);

  5. }

接着在server-provider中对该接口实现,当然也要添加对server-api的依赖


 
  1. <dependency>

  2. <groupId>org.yuequan.dubbo.demo</groupId>

  3. <artifactId>server-api</artifactId>

  4. <version>1.0-SNAPSHOT</version>

  5. </dependency>

  6.  
  7. <dependency>

  8. <groupId>org.yuequan.dubbo.demo</groupId>

  9. <artifactId>server-api</artifactId>

  10. <version>1.0-SNAPSHOT</version>

  11. </dependency>

随后对该接口进行实现


 
  1. package org.yuequan.dubbo.demo;

  2.  
  3. public class TestServiceImpl implements TestService {

  4. @Override

  5. public String sayHello(String msg) {

  6. return "Hi,Customer:" + msg;

  7. }

  8. }

首先引入依赖


 
  1. <dependency>

  2. <groupId>com.alibaba</groupId>

  3. <artifactId>dubbo</artifactId>

  4. <version>2.5.10</version>

  5. </dependency>

接着在/META-INF/dubbo/dubbo-server.xml中做一下配置,首先我们来配置一个简单的


 
  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 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

  6. <dubbo:application name="dubbo-server" owner="yuequan" />

  7. <dubbo:registry address="N/A" />

  8. <dubbo:service interface="org.yuequan.dubbo.demo.TestService" ref="testService" />

  9. <bean class="org.yuequan.dubbo.demo.TestServiceImpl" name="testService" ></bean>

  10. </beans>

接着我们来写一个main函数用于启动它,有 2 种方式一种是使用Spring容器启动方式,还有一种是使用 Dubbo 的Main.main启动,这里我暂时先用Spring容器启动


 
  1. public class App

  2. {

  3. public static void main(String[] args) throws IOException {

  4. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/dubbo/dubbo-server.xml");

  5. context.start();

  6. System.in.read();

  7. }

  8. }

接着启动应用,可以看到日志的输出
同时也看到服务发布成功了

接着来dubbo-client-demo,首先引入dubbo依赖


 
  1. <dependency>

  2. <groupId>com.alibaba</groupId>

  3. <artifactId>dubbo</artifactId>

  4. <version>2.5.10</version>

  5. </dependency>

接着写配置文件META-INF/dubbo/dubbo-client.xml


 
  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 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

  6. <dubbo:application name="dubbo-client" owner="yuequan" />

  7. <dubbo:registry address="N/A" />

  8. <dubbo:reference interface="org.yuequan.dubbo.demo.TestService" url="dubbo://192.168.10.102:20880/org.yuequan.dubbo.demo.TestService" />

  9. </beans>

还记得控制台日志输出的地址吗,这里就是了,现在暂时不用注册中心,先来一个最简单的点对点通信,接着我们来写客户端的启动类,通信协议默认是使用的dubbo其默认端口就是 20880


 
  1. public class App

  2. {

  3. public static void main( String[] args )

  4. {

  5. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/dubbo/dubbo-client.xml");

  6. TestService service = (TestService) context.getBean("testService");

  7. System.out.println(service.sayHello("YueQuan"));

  8. }

  9. }

接着启动它
至此,一个简单的使用例子就写好了,接着进入下一个小节

注册中心

上一个小节的例子,我们使用点对点通信的例子,接着我们来配置注册中心,dubbo默认支持能够用来做注册中心的有

  • Multicast
  • Zookeeper
  • Redis
  • Simple
    这里官方推荐使用 Zookeeper,不会 Zookeeper 可以看我之前写的文章,首先来修改dubbo-server.xml注册中心配置

 
  1. <!-- N/A 代表着没有,不使用的意思 -->

  2. <dubbo:registry address="N/A" />

  3. <!-- 修改成,当然你要启动ZooKeeper -->

  4. <dubbo:registry address="zookeeper://127.0.0.1:2181" />

接着引入 ZooKeeper 依赖


 
  1. <dependency>

  2. <groupId>org.apache.zookeeper</groupId>

  3. <artifactId>zookeeper</artifactId>

  4. <version>3.4.12</version>

  5. <type>pom</type>

  6. </dependency>

  7. <dependency>

  8. <groupId>com.101tec</groupId>

  9. <artifactId>zkclient</artifactId>

  10. <version>0.10</version>

  11. </dependency>

接着启动
发现日志什么都没有输出,接着配置下日志log4j.properties


 
  1. log4j.rootLogger=INFO, stdout

  2.  
  3. # Direct log messages to stdout

  4. log4j.appender.stdout=org.apache.log4j.ConsoleAppender

  5. log4j.appender.stdout.Target=System.out

  6. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

  7. log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

接着重启,可以看到控制台有日志输出了

接着看看来看看 Zookeeper 这边


 
  1. // 运行客户端

  2. ./zkCli.sh

输入ls /

可以看到下面多了一个 dubbo 节点,接着来看下 dubbo 节点下的内容:ls /dubbo

可以看到接口已经被注册上来了,接着我们看看这个接口下的内容:

ls /dubbo/org.yuequan.dubbo.demo.TestService

可以看到下面现在就 2 个节点,我们来看看现在有多少个 providers:

ls /dubbo/org.yuequan.dubbo.demo.TestService/providers

可以看到已经注册上来了

接着来配置下dubbo-client-demo,首先引入依赖


 
  1. <dependency>

  2. <groupId>org.apache.zookeeper</groupId>

  3. <artifactId>zookeeper</artifactId>

  4. <version>3.4.12</version>

  5. <type>pom</type>

  6. </dependency>

  7. <dependency>

  8. <groupId>com.101tec</groupId>

  9. <artifactId>zkclient</artifactId>

  10. <version>0.10</version>

  11. </dependency>

然后修改配置dubbo-client.xml


 
  1. <!-- 修改前 -->

  2. <dubbo:registry address="N/A" />

  3. <!-- 修改后 -->

  4. <dubbo:registry address="zookeeper://127.0.0.1:2181" />

  5.  
  6. <!-- 修改前 -->

  7. <dubbo:reference id="testService" interface="org.yuequan.dubbo.demo.TestService" url="dubbo://192.168.10.102:20880/org.yuequan.dubbo.demo.TestService" />

  8. <!-- 修改后 -->

  9. <dubbo:reference id="testService" interface="org.yuequan.dubbo.demo.TestService" />

接着启动,可以看到日志输出

接着我们再来看下 Zookeeper:

ls /dubbo/org.yuequan.dubbo.demo.TestService

可以看见多了 2 个节点分别为routers和consumers这时候输入

ls /dubbo/org.yuequan.dubbo.demo.TestService/comsumers

会发现返回的是一个空数组,这是因为客户端的消费已经结束了,所以该下的节点也会被清除,这一特性可以很好的利用 Zookeeper 的临时节点来实现,实际上它也是这样做的,接着我们来修改下客户端的代码让他不那么快结束


 
  1. public class App

  2. {

  3. public static void main( String[] args ) throws InterruptedException {

  4. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/dubbo/dubbo-client.xml");

  5. TestService service = (TestService) context.getBean("testService");

  6. System.out.println(service.sayHello("YueQuan"));

  7. Thread.sleep(10000);

  8. }

  9. }

启动后,再来看看

ls /dubbo/org.yuequan.dubbo.demo.TestService/comsumers

可以看到消费者信息,这是单个配置注册中心,那如果有多个呢?配置多注册中心也非常简单,如下:


 
  1. <dubbo:registry protocol="zookeeper" address="192.168.1.1:2181,192.16.1.2:2181,192.168.1.3:2181" />

  2. <!-- OR -->

  3. <dubbo:registry address="zookeeper://192.168.1.1:2181?backup=192.16.1.2:2181,192.168.1.3:2181" />

  4. <!-- 更多可以看官方文档~~~ -->

多协议

我们一个服务可能之前是使用的dubbo协议但后面又改成了hessian协议,也有可能一个服务提供了dubbo协议也提供了hessian协议,但也有的客户端它只使用一种协议的通信方式,在多协议的情况下,Dubbo框架也做了很好的实现接着修改dubbo-server.xml文件,这里我将会使用hessian和dubbo2 个协议,所以需要先引入hessian的依赖,这里需要使用到容器所以还需要引入servlet-api和一个servlet容器,那这里我就使用jetty,添加的依赖如下


 
  1. <dependency>

  2. <groupId>javax.servlet</groupId>

  3. <artifactId>javax.servlet-api</artifactId>

  4. <version>4.0.1</version>

  5. <scope>provided</scope>

  6. </dependency>

  7. <dependency>

  8. <groupId>org.mortbay.jetty</groupId>

  9. <artifactId>jetty</artifactId>

  10. <version>6.1.26</version>

  11. </dependency>

  12. <dependency>

  13. <groupId>com.caucho</groupId>

  14. <artifactId>hessian</artifactId>

  15. <version>4.0.51</version>

  16. </dependency>

接着修改配置


 
  1. <dubbo:protocol name="dubbo" port="20880" />

  2. <dubbo:protocol name="hessian" port="8011" />

  3. <dubbo:service interface="org.yuequan.dubbo.demo.TestService" ref="testService" protocol="dubbo,hessian" />

接着启动,这样就配置好了,但是这样看不到明显的效果啊?我怎么知道我客户端再未指定协议的情况下消费的是hessian协议还是dubbo协议?于是为了演示可以这样做将TestServiceImpl在复制一份,修改下其中内容


 
  1. public class TestService2Impl implements TestService {

  2. @Override

  3. public String sayHello(String msg) {

  4. return "Hi,Customer:" + msg + ",through Hessian protocol";

  5. }

  6. }

然后再调整下配置


 
  1. <bean class="org.yuequan.dubbo.demo.TestServiceImpl" name="testService" ></bean>

  2. <bean class="org.yuequan.dubbo.demo.TestService2Impl" name="testService2"></bean>

  3. <dubbo:service interface="org.yuequan.dubbo.demo.TestService" ref="testService" protocol="dubbo" />

  4. <dubbo:service interface="org.yuequan.dubbo.demo.TestService" ref="testService2" protocol="hessian" />

接着启动,然后为了明显,再修改下客户端的调用代码并引入依赖,让它调用十次,可以看出这十次分别调用的那个


 
  1. <dependency>

  2. <groupId>javax.servlet</groupId>

  3. <artifactId>javax.servlet-api</artifactId>

  4. <version>4.0.1</version>

  5. <scope>provided</scope>

  6. </dependency>

  7. <dependency>

  8. <groupId>org.mortbay.jetty</groupId>

  9. <artifactId>jetty</artifactId>

  10. <version>6.1.26</version>

  11. </dependency>

  12. <dependency>

  13. <groupId>com.caucho</groupId>

  14. <artifactId>hessian</artifactId>

  15. <version>4.0.51</version>

  16. </dependency>

客户端代码修改如下


 
  1. public class App

  2. {

  3. public static void main( String[] args ) throws InterruptedException {

  4. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/dubbo/dubbo-client.xml");

  5. TestService service = (TestService) context.getBean("testService");

  6. for (int i = 0; i < 10; i++) {

  7. System./out/.println(service.sayHello("YueQuan"));

  8. }

  9.  
  10. }

  11. }

接着启动查看控制台输出

Dubbo 默认的负载均衡机制是随机的,具体的会在后续文章细写

多版本支持

服务提供对外的接口可能会采取某种策略逐步平滑升级,例如原先使用 1.0.0 的接口,又对外提供了 2.0.0 处于刚刚开放,存在某些不稳定因素,可能想逐步开发,某些客户端继续使用 1.0.0,让一部分客户端先使用 2.0.0

接着我们修改dubbo-server.xml


 
  1. <!-- 修改前 -->

  2. <dubbo:service interface="org.yuequan.dubbo.demo.TestService" ref="testService" protocol="dubbo" />

  3. <dubbo:service interface="org.yuequan.dubbo.demo.TestService" ref="testService2" protocol="hessian"/>

  4. <!-- 修改后 -->

  5. <dubbo:service interface="org.yuequan.dubbo.demo.TestService" ref="testService" protocol="dubbo" version="1.0.0" />

  6. <dubbo:service interface="org.yuequan.dubbo.demo.TestService" ref="testService2" protocol="hessian" version="2.0.0" />

对于 1.0.0 的接口访问使用dubbo协议,2.0.0 的接口访问使用hessian
然后修改客户端配置dubbo-client.xml

<dubbo:reference id="testService" interface="org.yuequan.dubbo.demo.TestService" version="1.0.0" />

然后运行,你会发现只会调用定义的1.0.0版本的服务,2.0.0同理

启动检查

在服务的启动过程中可能有依赖于其它服务,但其它服务并没有运行起来,这时候你先起起来了,必然会报错,更有意思的是如果是互相依赖,那互相都起不来怎么办呢?所以这里就要关闭启动检查,例如


 
  1. <!-- 修改前 -->

  2. <dubbo:reference id="testService" interface="org.yuequan.dubbo.demo.TestService" version="1.0.0" />

  3. <!-- 修改后 -->

  4. <dubbo:reference id="testService" interface="org.yuequan.dubbo.demo.TestService" version="1.0.0" check="false"/>

集群容错

在集群调用中出现调用失败时,比如所需要调用的服务它一直未返回数据阻塞住了,直到超时等情况,对于调用失败 Dubbo 提供了几种容错方案,分别是

  1. Failover
  2. Failfast
  3. Failsafe
  4. Failback
  5. Forking
  6. Broadcast

Failover

默认就是它,失败后自动切换,当出现失败后,自动切换其它服务器,当然可以设置重试次数

Failfast

快速失败,失败后就立马报错

Failfast

安全失败,发生异常,立马吞掉,也就是直接忽略

Failback

失败后自动恢复

Forking

同时并行调用几个相同的服务,只要一个成功即返回,但可以设置最大并行数

Broadcast

广播调用所有提供者,挨个调用,只要有一个报错就报错

通常可以通过配置可以对容错的手段进行更改,如下:


 
  1. <!-- 修改前 -->

  2. <dubbo:reference id="testService" interface="org.yuequan.dubbo.demo.TestService" check="false" version="1.0.0" />

  3. <!-- 修改后 -->

  4. <dubbo:reference cluster="failsafe" id="testService" interface="org.yuequan.dubbo.demo.TestService" check="false" version="1.0.0" />

这里我配置的failsafe所以消费者调用该服务的提供者就算出现异常也会被忽略掉,为了演示效果,我这里将超时时间修改为 50 毫秒

因为我这里是本机所以 50 毫秒也还是有执行成功的现象不过无所谓,看第一个null执行失败的异常并没有输出而是直接返回了 null

降级

降级我用一个比较笼统的说法来简单的阐述一下,降级实际上就是关闭或者减少其它服务所占用的资源来保证核心服务可用,就比如小米的饥饿营销或者在双 11 下单的时候经常会出现服务器繁忙,请稍后再试,再比如说在双 11 下单高峰的时候,为了集中资源,将平时首页给推荐的数据分析并推送给我的相关服务全部关掉,仅保留基本核心服务,等高峰期一过在把这些附加服务开放,实际上降级有很多种,比如:页面降级、读降级、写降级、超时降级、开关降级等等等,反正这里 get 到点就可以了,以后应该是有机会来单独说降级这个概念的。
对于服务降级 Dubbo 也是提供了相应的机制来让我们处理的。
就比如说一个接口超过了 50 毫秒的响应时间我们就对它进行降级,来保证它基本可用,来写个 demo 修改配置文件dubbo-client.xml


 
  1. <!-- 修改前 -->

  2. <dubbo:reference cluster="failsafe" id="testService" interface="org.yuequan.dubbo.demo.TestService" check="false" version="1.0.0" />

  3. <!-- 修改后 -->

  4. <dubbo:reference id="testService" interface="org.yuequan.dubbo.demo.TestService" check="false" version="1.0.0" mock="org.yuequan.dubbo.demo.TimeoutMock" timeout="50"/>

这里值得一提的是,可以发现我将cluster因为这里如果是使用的failsafe的话是不会降级的,而是直接走failsafe的机制的,接着运行,我们来看下控制台

可以看到调用超过了 50 毫秒的会直接降级,本节就先到这里。

Dubbo剖析-管理控制台的搭建与使用

原创: 加多 技术原始积累 3月15日

一、前言

开源的Dubbo的服务管理控制台是阿里巴巴内部裁剪版本,开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。

二、管理控制台的搭建

  • 下载源码
    在 https://github.com/alibaba/dubbo/tree/2.5.x 下载dubbo的源码

  • 解压源码,进入dubbo-2.5.x 目录,内容如下:

 

进入/Users/zhuizhumengxiang/Downloads/dubbo-2.5.x/dubbo-admin/target目录,会发现生成了dubbo-admin-2.5.10.war:

  • 拷贝dubbo-admin-2.5.10.war到servlet容器
    本文使用tomcat容器,可以在 https://tomcat.apache.org/ 这里下载二进制包
    然后拷贝dubbo-admin-2.5.10.war到apache-tomcat-7.0.10/webapps目录下并解压:

然后进入dubbo-admin-2.5.10/WEB-INF目录修改dubbo.properties文件:

这里只需要修改注册中心的地址即可,这里设置为zk的地址。

  • 启动tomcat
    在apache-tomcat-7.0.10/bin 下执行sh catalina.sh run启动tomcat.
    启动后访问 http://127.0.0.1:8080/dubbo-admin-2.5.10/ 会出现下面界面:
    用户名和密码输入root,进入下面界面:
    说明管理控制台搭建完毕了。

三、管理控制台运维

3.1 搜索页面

当你需要管理 Dubbo 的服务时,首先要搜索到这个服务,然后打开它的管理页面,比如搜索:dubbo/com.test.UserServiceBo:1.0.0

单击右侧搜索按钮进入下面界面:

3.2 服务提供者页面

3.3 服务消费者页面

3.4 服务应用页面

四、总结

管理控制台不是使用dubbo搭建分布式系统必须的,但是有了他我们可以对服务进行很好的治理和监控。

Dubbo剖析-监控平台的搭建与使用

原创: 加多 技术原始积累 3月16日

一、前言

dubbo-monitor主要用来统计服务的调用次调和调用时间的监控中心,服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心,监控中心则使用数据绘制图表来显示。

二、dubbo-monitor-simple的搭建

  • 在服务提供方和消费方需要配置如下:
    <dubbo:monitor protocol="registry"/>
    protocol为"registry",表示服务提供方和消费方从注册中心发现监控中心(monitor)地址。

  • 下载源码
    在 https://github.com/alibaba/dubbo/tree/2.5.x 下载dubbo的源码

  • 解压源码,进入dubbo-2.5.x 目录,内容如下:

image.png

 

进入/Users/zhuizhumengxiang/Downloads/dubbo-2.5.x/dubbo-simple/dubbo-monitor-simple/target
目录,会发现生成了dubbo-monitor-simple-2.5.10-assembly.tar.gz:

 

image.png

  • 解压dubbo-monitor-simple-2.5.10-assembly.tar.gz,修改进入dubbo-monitor-simple-2.5.10/conf/dubbo.properties:

     

其中dubbo.registry.address=zookeeper://127.0.0.1:2181设置注册中心地址,这里设置为zk的地址

其中dubbo.protocol.port=7070,为monitor提供的远程服务监听端口,服务提供者和消费者会调用这个端口提供的服务,发送统计信息到monitor

dubbo.charts.directory和dubbo.statistics.directory为monitor本地存放的监控数据文件的位置

dubbo.jetty.port=8081 设置jetty容器的监听地址,类似于tomcat的8080端口,这里设置为8081

  • 进入dubbo-monitor-simple-2.5.10/bin,执行sh start.sh启动monitor

     

    image.png

至此monitor启动了访问http://127.0.0.1:8081/ 会出现下面界面:

 

image.png

三、dubbo-monitor-simple的使用

3.1 应用程序查看

3.2 服务查看

image.png

3.3 注册中心查看

image.png

3.4 调用数据统计

image.png

image.png

四、总结

dubbo-monitor也不是使用dubbo搭建分布式系统必须的组件,但是它用来统计服务的调用次调和调用时间的监控中心,这些数据有助于系统运维和调优。

Dubbo:高性能分布式服务框架 服务治理:提供完善的服务治理能力,包括服务注册与发现、负载均衡、容错机制等。高性能:基于 Netty 实现高效的网络通信,支持高并发调用。扩展性:通过 SPI 机制,支持灵活的扩展和定制。动态配置:支持动态调整服务配置,适应业务需求变化。Dubbo 是高性能分布式服务框架的典范,通过其强大的服务治理能力、高性能和扩展性,为微服务架构、分布式系统和高并发场景提供了强大的支持。通过深入了解其核心概念、架构设计、使用场景和最佳实践,开发团队可以充分发挥 Dubbo 的优势,构建高效、可靠的分布式服务系统。 阅读详情

相关推荐

Dubbo分布式服务框架:原理深度解析与实战应用探索(二)

Dubbo是一个高性能的分布式服务框架,用于构建可伸缩的企业级应用软件系统。它由阿里巴巴集团开源,并在国内外广泛应用。 本文将跟随《Dubbo分布式服务框架:原理深度解析与实战应用探索(一)》的进度,继续介绍Thrift。希望通过本系列文章的学习,您将能够更好地理解Dubbo的内部工作原理,掌握Dubbo的使用技巧,以及通过合理的配置完成最佳实践,充分发挥Dubbo的潜力,为系统的高效运行提供有力保障。

凛鼕将至的博客 1145

Dubbo分布式服务框架:原理深度解析与实战应用探索(一)

Dubbo是一个高性能的分布式服务框架,用于构建可伸缩的企业级应用软件系统。它由阿里巴巴集团开源,并在国内外广泛应用。Dubbo的主要特点包括:服务治理:Dubbo提供了丰富的服务治理功能,包括服务注册与发现、负载均衡、容错机制等。通过这些功能,Dubbo可以实现服务的自动化管理和监控。通信协议:Dubbo支持多种通信协议,包括RPC、HTTP和消息队列等。这使得Dubbo可以灵活适应不同的应用场景。服务调用方式:Dubbo支持多种服务调用方式,包括同步调用、异步调用和单向调用。

凛鼕将至的博客 1681

Dubbo分布式服务框架:原理深度解析与实战应用探索(三)

​ Dubbo是一个高性能的分布式服务框架,用于构建可伸缩的企业级应用软件系统。它由阿里巴巴集团开源,并在国内外广泛应用。 本文将跟随《Dubbo分布式服务框架:原理深度解析与实战应用探索(二)》的进度,继续介绍Dubbo。希望通过本系列文章的学习,您将能够更好地理解Dubbo的内部工作原理,掌握Dubbo的使用技巧,以及通过合理的配置完成最佳实践,充分发挥Dubbo的潜力,为系统的高效运行提供有力保障。 ​

凛鼕将至的博客 1488

Dubbo:深入解析分布式服务框架

Dubbo最初是由阿里巴巴开发并开源的一个高性能、轻量级的 Java RPC 框架,致力于解决分布式系统中服务调用的复杂性。透明的远程方法调用:开发者可以像调用本地方法一样调用远程服务,Dubbo 通过代理类自动处理网络通信细节。这样的设计大大降低了开发者学习和使用分布式服务的门槛。服务注册与发现:通过注册中心(如 ZooKeeper、Nacos 等),Dubbo 实现了服务的动态注册和发现机制。当一个服务提供者启动时,它会自动注册到注册中心,服务消费者则从注册中心获取服务提供者的列表,实现服务的动态感知。

lssffy的博客 1742

华大HC32F460从零到200MHz:手把手教你配置时钟系统(附避坑指南)

本文详细解析了华大HC32F460 MCU的时钟系统配置,从启动过程、时钟树分析到实战配置200MHz系统时钟。文章手把手指导开发者如何正确配置外部晶振、MPLL锁相环及总线分频,并提供了硬件检查、代码解读及常见问题排查的避坑指南,帮助用户从零构建稳定可靠的高性能时钟环境。

net55的博客 295

手把手教你用Kali+字典爆破WiFi密码:从抓包到破解的完整流程

本文提供了一份详尽的无线网络渗透测试实战指南,重点讲解如何使用Kali Linux和Aircrack-ng套件进行WiFi安全评估。内容涵盖从硬件选型(如RTL8812AU网卡)、驱动配置、监听模式设置,到使用airodump-ng扫描抓包、捕获WPA握手包,以及利用字典进行离线破解的完整流程。同时强调了在授权环境下进行安全测试的重要性,并给出了相应的网络加固建议。

weixin_28568819的博客 1674

Dubbo 技术学习指南:深度探索分布式服务框架的精髓

Dubbo技术栈深度广博,学习过程中应理论与实践相结合,通过动手搭建示例项目、参与真实项目开发,逐步将所学知识转化为实际生产力。随着对Dubbo理解的加深,您将能更好地驾驭这一强大的分布式服务框架,为构建高效、稳定、易维护的微服务体系打下坚实基础。

聚焦于深度解析最新的编程语言特性、框架升级、架构设计、开发工具和最佳实践,涵盖Web前端(如Vue3, React, Angular等)、后端开发(如Node.js, Java, Python等)、移动端开发(iOS, Android原生及跨平台开发) 4万+

Unity 编辑器篇|(一)MenuItem菜单栏

"一级菜单/二级菜单上/三级菜单""一级菜单/二级菜单中 %#_B""一级菜单/二级菜单下 %&_C""一级菜单/二级菜单中 %#_B""一级菜单/二级菜单下 %&_C""GameObject/二级菜单""CONTEXT/组件名/菜单名""一级菜单/二级菜单上 #_A""Assets/二级菜单""一级菜单/二级菜单下""一级菜单/二级菜单上""一级菜单/二级菜单中""一级菜单/二级菜单下""一级菜单/二级菜单下""一级菜单/二级菜单上""一级菜单/二级菜单中""一级菜单/二级菜单下""自定义/Test"

游戏开发小Y的博客 13万+

Apache Dubbo 分布式服务框架

核心定位:高性能 Java RPC(远程过程调用)框架,专注于分布式服务治理核心能力:服务注册发现、负载均衡、容错机制、动态配置管理生态地位:阿里巴巴开源,Apache 顶级项目,微服务核心基础设施。

slovess的博客 1056

【嵌入式DIY实例-ESP32篇】-热成像仪

在本文中,我们将使用 MLX90640 热像仪和 1.8 英寸 ST7735 TFT 显示屏,构建一款基于 ESP32 的高性能紧凑型热像仪。本项目旨在打造一款便携、响应迅速的热像仪,具有增强的图像质量、优化的帧率和精准的温度读数。

视觉与物联智能 877

具身智能(40):主流 VLA 模型π₀

摘要: π₀是首款专为机器人设计的VLA(视觉-语言-动作)端到端基础模型,通过双阶段训练实现“感知-决策-执行”闭环。其创新点包括:1)FlowMatching技术实现连续平滑动作控制(精度0.3°);2)结合VLM预训练与多机器人实操数据,零样本任务完成率达76.4%,远超同类模型;3)支持模糊指令理解与动态场景适应(如遮挡识别)。开源版本涵盖不同规模模型,适用于工业装配、服务机器人等场景,在延迟(213ms)和稳定性(92%自主恢复率)上显著领先OpenVLA等竞品。

码农17年的博客 510

Dubbo分布式服务框架全解析

摘要:Dubbo是一款高性能分布式服务框架,提供透明化的RPC远程调用和SOA服务治理方案。其核心功能包括远程通讯、集群容错和自动服务发现,通过注册中心实现服务动态管理。架构包含Provider、Consumer、Registry等角色,支持负载均衡和失败容错。使用方式基于Spring配置,通过Zookeeper作为注册中心,服务提供者暴露接口,消费者订阅调用。典型应用场景包括替代硬件负载均衡器,实现服务自动注册与发现。测试时可通过管理页面监控各节点状态,确保服务正常运行。

YF云飞的博客 914

Qt之自定义带游标的QSlider

最近翻看6年前写了一篇关于QSlider的博客:Qt自定义带游标的slider,在滑块正上方显示当前值 发现存在很多问题,比如游标的坐标不准确;如果游标宽度稍大,滑到Slider最左或最右的时候会显示不全;游标不够美观。 PS:这里有个漂亮的Slider样式表https://blog.youkuaiyun.com/caoshangpa/article/details/53389517于是今天再实现了一遍,依然是子类化QSlider,效果如下,支持设置游标的尺寸:这一次的实现比之前简洁很多,只需要重新paintEvent

草上爬的博客 6279

初识分布式服务管理框架-Dubbo

欢迎加入DUBBO交流群:259566260 Dubbo是阿里下面的一个开源分布式服务管理框架。它的产生是因为分布式的产生而产生的。下面将几点分享一下我对Dubbo的初步认识。通过dubbo的官方文档可以了解一下怎么使用以及基本的设计思想。http://alibaba.github.io/dubbo-doc-static/User+Guide-zh.htm下面分享一下我对Dubbo的理解,可能其中

JDream314的专栏 9858

[Dify实战] 项目复盘助手:自动拉数据、生成复盘报告

本文介绍如何利用Dify平台构建自动化项目复盘助手,解决传统人工复盘效率低、易遗漏等问题。系统通过自动拉取Git/Jira等数据源,计算关键指标后,由LLM生成结构化复盘报告。文章详细讲解了数据采集、指标计算、Prompt设计等核心模块的实现,并分享了完整Workflow搭建步骤。实践表明,该系统能将复盘耗时从4小时缩短至10分钟,显著提升数据准确率和执行频率。最后总结了数据一致性、输出质量等常见问题的解决方案,强调Dify+LLM组合可实现复盘流程的自动化流水线。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 118

YOLOv8改进系列:RepVGG重参数化结构——训练多分支,推理单路,极致提速

本文将详细介绍如何将RepVGG的重参数化思想融入到YOLOv8的骨干网络中,实现一种训练时多分支、推理时单路的改进版YOLOv8。我们将提供完整的代码实现、详细的原理讲解,并在COCO数据集和自定义数据集上进行充分的实验验证。

YOLO 200

Dubbo分布式服务框架

本文从多个方面详细阐述了Dubbo分布式服务框架的优势和应用场景,重申了引言中的目的和重要性。Dubbo作为一款优秀的分布式服务框架,具备高度的可扩展性、出色的性能以及完善的服务治理功能,为企业构建高可用、高性能、可扩展的分布式系统提供了有力支持。在未来的发展中,Dubbo有望在更多领域发挥重要作用。优化性能:针对特定场景,如高并发、大数据量等,对Dubbo的性能进行优化。扩展功能:继续丰富Dubbo的功能,如支持更多协议、提供更完善的监控等。社区建设。

2501_92489105的博客 990

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Apache Dubbo:分布式服务框架的深度解析

同时,Dubbo 提供了丰富的服务治理功能,如负载均衡、集群容错、服务注册与发现等,为构建稳定、可靠、可扩展的分布式系统提供了有力支持。Dubbo 对注册中心的依赖,虽然简化了服务发现的复杂度,但也增加了系统的外部依赖和维护成本。但总的来说,随着微服务架构的日益普及,Dubbo 凭借其强大的功能和良好的性能,在分布式系统构建中仍然具有广泛的应用前景。服务提供者负责发布服务到注册中心,服务消费者从注册中心订阅服务,注册中心负责服务的注册与发现,监控中心则负责统计服务的调用次数和调用时间等。

Aaron_945的博客 1278

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Dubbo 一款分布式服务框架

一款分布式服务框架高性能和透明化的RPC远程服务调用方案服务治理方案。

weixin_62282158的博客 663

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Dubbo分布式服务框架入门实战(附源码)

Dubbo分布式服务框架入门实战首先,有必要清楚Dubbo是什么。官方文档的定义如下: DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。 其实,总结起来就是: Dubbo是一个解决大规模服务治理的高性能分布式

rhwayfun专栏 9633

Dubbo与Zookeeper实现分布式服务框架

1 Dubbo与Zookeeper实现分布式服务框架 1.1远程通信的实现方案  WebService:基于SOAP协议的通信方式,主要是使用XML作为中间交互,效率偏低。项目中使用量较小。  RestFul:使用HTTP协议和JSON完成交互对接。若系统中服务较多,服务之间的调用关系过于混乱,需要进行服务治理。  Dubbo:应用RPC协议完成远程调用。由于应用的Socket通信协议方式,...

LI_AINY的博客 973
上一篇: 走进JavaWeb技术世界16:极简配置的SpringBoot
下一篇: 探索分布式服务框架Dubbo9:Dubbo整体架构与实现原理
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值