文章目录
- 前言
- 分布式基础理论
- 什么是分布式系统
- 发展演变
- ORM
- MVC
- RPC
- SOA
- RPC(远程调用)
- 什么是RPC
- RPC工作原理
- 为什么RPC要用到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工作原理
- Client像调用本地服务似的调用远程服务;
- Client stub接收到调用后,将方法、参数序列化
- 客户端通过sockets将消息发送到服务端
- Server stub 收到消息后进行解码(将消息对象反序列化)
- Server stub 根据解码结果调用本地的服务
- 本地服务执行(对于服务端来说是本地执行)并将结果返回给Server stub
- Server stub将返回结果打包成消息(将结果消息对象序列化)
- 服务端通过sockets将消息发送到客户端
- Client stub接收到结果消息,并进行解码(将结果消息发序列化)
- 客户端得到最终结果。
为什么RPC要用到Dubbo
Dubbo的优势
Dubbo作为一个成熟的RPC框架,具有以下一些优势:
高性能
Dubbo通过优化网络通信、序列化和反序列化等关键环节,实现了高性能的远程调用。它使用了NIO框架来提高网络通信的效率,使用了高效的序列化和反序列化算法来减少数据传输的开销。
可扩展性
Dubbo具有良好的可扩展性,它支持多种注册中心、负载均衡算法和协议扩展。我们可以根据具体的需求选择合适的组件来构建我们的分布式应用。
高可靠性
Dubbo提供了多种容错机制,包括重试、熔断、降级等。这些机制可以帮助我们应对网络故障、服务不可用等异常情况,提高系统的可靠性和稳定性。
监控和管理
Dubbo提供了丰富的监控和管理功能,包括服务治理、服务监控、流量控制等。这些功能可以帮助我们更好地管理和监控分布式应用,及时发现和解决问题。
使用示例
下面是一个简单的示例,展示了如何使用Dubbo进行远程调用:
// 定义接口
public interface HelloService {String sayHello(String name);
}// 实现接口
public class HelloServiceImpl implements HelloService {@Overridepublic 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是非常合理和必要的选择。