Dubbo 高性能 RPC 框架实践

​Dubbo 介绍

Dubbo 是架实践什么?

介绍:Apache Dubbo 是一款微服务框架,为大规模微服务实践提供高性能 RPC 通信、架实践流量治理、架实践可观测性等解决方案,架实践涵盖 Java、架实践Golang 等多种语言 SDK 实现。架实践 

特征:RPC 通讯框架,架实践服务注册中心,架实践支持原生云(Dubbo3.0) 

主流版本:2.7.x ,架实践 3.0 **SDK: **官方 SDK 支持开发语言:Java、Golang

使用厂家:阿里巴巴、架实践饿了么、架实践钉钉、架实践工商银行、架实践小米等 

注:本文后续主要基于 2.7.x 版本展开。架实践

Dubbo 和 Eureka 对比

对比

Dubbo

Eureka(Spring-Cloud-Netflix)

注册中心

ZK

Eureka

CAP

CP

AP

容错机制

支持

通过 Hytrix 支持

负载均衡

支持

通过 Ribbon 支持

服务注册和发现协议

封装 NettyClient 实现

使用 HttpClient

社区支持

Apache

不更新

总结:Dubbo 对比 Eureka 来说的架实践话,其实一个打包的站群服务器微服务中间件,并且定制化了 RPC 通讯 dubbo 协议对比 HTTP 协议来说性能上会有一定的提高。但是我们对于微服务本身来说应该是一个细粒度的,可以定制的组件对于 Eureka 来说这方面更强。

Dubbo 使用案例

下面是一个通过 dubbo 作为 RPC 通讯的一个例子,一般在生产中会使用 zk 或者 redis 等,作为服务注册中心来保存服务信息。一个大致的交互图如下:

三个角色

Zookeeper 作为一个服务注册中心,管理和维护服务列表;Provider 服务提供者,发布服务;Consumer 服务消费者,源码下载通过 API stub 可以像调用本地方法一样调用远程的方法;

服务提供者

服务接口定义

public interface OrderService {

String createOrder(String request);

}

服务提供者实现

public class OrderServiceImpl implements OrderService {

@Override

public String createOrder(String request) {

return "create order success, request : " + request;

}

}

服务启动类

public class RpcDubboProvidorApp {

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

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{ "classpath:dubbo.xml"});

context.start();

System.in.read(); // 按任意键退出

}

}

配置文件

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

</beans>服务消费者

服务配置

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-4.3.xsd

http://dubbo.apache.org/schema/dubbo

http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

</beans>

服务调用方代码

public class RpcDubboConsumerApp {

public static void main(String[] args) {

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{ "classpath:dubbo.xml"});

context.start();

// 获取远程服务代理

OrderService demoService = (OrderService) context.getBean("orderService");

// 执行远程方法

String hello = demoService.createOrder("iPhone 19");

// 显示调用结果

System.out.println(hello);

}

}

运行一下:

我们首先启动RpcDubboProvidorApp然后启动RpcDubboConsumerApp控制台输出如下:

你如果也能获得如下的输出表示实验成功。恭喜。

Dubbo 监控

Dubbo Admin 安装

下载代码:git clone https://github.com/apache/dubbo-admin.git在dubbo-admin-server/src/main/resources/application.properties中指定注册中心地址

构建

mvn clean package -Dmaven.test.skip=true

启动

mvn --projects dubbo-admin-server spring-boot:run 或者cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.4.0.jar

访问 http://localhost:8080

默认密码是 root/root

Dubbo Admin 使用

找到自己注册服务

模拟请求服务

点击上一个页面的 测试​ 按钮,进入如下页面,测试服务接口,如下图:

我传递参数,下面成功返回,可以在开发期间做一个简单的测试。

服务提供者和服务消费者查询如下图所示。

双击服务列表中的服务即可进入。

参考文档

https://dubbo.apache.org/zh/docsv2.7/user/quick-start/

https://github.com/apache/dubbo-admin/blob/develop/README_ZH.md

IT科技类资讯
上一篇:气候中和数据中心公约是什么,以及如何实施?
下一篇:2023年四大绿色数据中心技术趋势