Dubbo学习(一)——dubbo学习背景

前言

分布式基础理论

什么是分布式系统

分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统
分布式系统(distributed system)是建立在网络之上的软件系统。
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进——dubbo。

发展演变

在这里插入图片描述

ORM

单一应用架构:一个项目装到一个服务器当中,也可以运行多个服务器每一个服务器当中都装一个项目。
缺点:1.如果要添加某一个功能的话就要把一个项目重新打包,在分别部署到每一个服务器当中去。2.如果后期项目越来越大的话单台服务器跑一个项目压力会很大的。会不利于维护,开发和程序的性能。
在这里插入图片描述

MVC

垂直应用架构:将应用切割成几个互不相干的小应用,在将每个小应用独立放到一个服务器上,如果哪一个应用的访问数量多就多加几台服务器。
缺点:
1、不能做到界面+业务逻辑的实现分离
2、应用不可能完全独立,大量的应用之间需要交互
在这里插入图片描述

RPC

分布式应用架构(远程过程调用):当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。

SOA

流动计算架构:在分布式应用架构的基础上增加了一个调度、治理中心基于访问压力实时管理集群容量、提高集群的利用率,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键 (不浪费计算机资源)
在这里插入图片描述

RPC(远程调用)

什么是RPC

RPC [ Remote Procedure Call]是指远程过程调用,是一种进程问通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。
在这里插入图片描述
RPC是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

RPC工作原理

在这里插入图片描述

  1. Client像调用本地服务似的调用远程服务;
  2. Client stub接收到调用后,将方法、参数序列化
  3. 客户端通过sockets将消息发送到服务端
  4. Server stub 收到消息后进行解码(将消息对象反序列化)
  5. Server stub 根据解码结果调用本地的服务
  6. 本地服务执行(对于服务端来说是本地执行)并将结果返回给Server stub
  7. Server stub将返回结果打包成消息(将结果消息对象序列化)
  8. 服务端通过sockets将消息发送到客户端
  9. Client stub接收到结果消息,并进行解码(将结果消息发序列化)
  10. 客户端得到最终结果。

为什么RPC要用到Dubbo

Dubbo的优势

Dubbo作为一个成熟的RPC框架,具有以下一些优势:

高性能

Dubbo通过优化网络通信、序列化和反序列化等关键环节,实现了高性能的远程调用。它使用了NIO框架来提高网络通信的效率,使用了高效的序列化和反序列化算法来减少数据传输的开销。

可扩展性

Dubbo具有良好的可扩展性,它支持多种注册中心、负载均衡算法和协议扩展。我们可以根据具体的需求选择合适的组件来构建我们的分布式应用。

高可靠性

Dubbo提供了多种容错机制,包括重试、熔断、降级等。这些机制可以帮助我们应对网络故障、服务不可用等异常情况,提高系统的可靠性和稳定性。

监控和管理

Dubbo提供了丰富的监控和管理功能,包括服务治理、服务监控、流量控制等。这些功能可以帮助我们更好地管理和监控分布式应用,及时发现和解决问题。

使用示例

下面是一个简单的示例,展示了如何使用Dubbo进行远程调用:

// 定义接口
public interface HelloService {
    String sayHello(String name);
}

// 实现接口
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}

// 服务提供者配置
<dubbo:service interface="com.example.HelloService" ref="helloService" />

// 服务消费者配置
<dubbo:reference interface="com.example.HelloService" id="helloService" />

// 服务调用
HelloService helloService = (HelloService) applicationContext.getBean("helloService");
String result = helloService.sayHello("Dubbo");
System.out.println(result);

通过以上示例,我们可以看到,使用Dubbo进行远程调用非常简单和方便。我们只需要定义接口、实现接口、配置服务提供者和服务消费者,就可以实现分布式应用的开发。

总结

RPC是分布式系统中不可或缺的一部分,它可以帮助我们实现服务之间的通信和协作。而Dubbo作为一个成熟的RPC框架,提供了高性能、可扩展性、高可靠性和监控管理等优势,使得分布式应用的开发变得更加简单和高效。

通过使用Dubbo,我们可以轻松构建分布式应用,并且能够更好地管理和监控系统。因此,RPC要用到Dubbo是非常合理和必要的选择。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨思默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值