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

2023-09-21 10:13:36

前言

分布式基础理论

什么是分布式系统

分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统
分布式系统(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是非常合理和必要的选择。

更多推荐

基于STM32设计的温室大棚种植监测系统(onenet+GPRS通信)

一、设计简述基于STM32设计的温室大棚种植监测系统(OneNet+GPRS通信)1.1设计需求随着社会经济的快速发展和人们对食品质量安全的日益关注,温室大棚越来越受到人们的青睐。温室大棚可以提供良好的生长环境,使得蔬菜、水果等植物获得更好的生长条件,从而提高产量和质量。然而,在温室大棚内,温度、湿度、二氧化碳含量、光

肖sir___环境的讲解__001

环境的讲解一、搭建环境此测试环境主要用于功能测试、寻找bug、编写后台测试点、熟悉环境的架构,搭建流程二、搭建多有米前后台所需要的工具包1、虚拟机(centos6.5)2、数据库3、代码包4、服务器5、数据库脚本6、jdk三、搭建测试环境实战1、将本地的服务器上传到linux中,并解压tar-zxvf服务器包名2、上传

利用cms主题构造木马(CVE-2022-26965)

简介CVE-2022-26965是PluckCMS4.7.16版本存在一个远程shell上传执行漏洞。攻击者可利用此漏洞通过构造恶意的主题包进行上传并执行,未经授权访问服务器,造成潜在的安全隐患。过程1.打开环境,查看源码,发现login.php2.进入查看,登陆页面,弱口令admin进行登录,全英文界面,可以翻译的哈

Hyperopt:分布式异步超参数优化(Distributed Asynchronous Hyperparameter Optimization)

1、概述在深度学习的训练模型过程中,参数的优化是一个比较繁琐的过程,一般使用网格搜索Gridsearch与人工搜索Manualsearch,所以这个参数优化有时候看起来就像太上老君炼丹,是一个有点玄的东西。那有没有一种可以自动去调优的工具呢?恩,本节介绍的这个Hyperopt工具就是这个用途。Hyperopt是一个Py

下一代实时数据库:Apache Doris 【一】简介

文章目录第1章Doris简介1.1Doris概述1.2Doris架构后记第1章Doris简介1.1Doris概述ApacheDoris由百度大数据部研发(之前叫百度Palo,2018年贡献到Apache社区后,更名为Doris),在百度内部,有超过200个产品线在使用,部署机器超过1000台,单一业务最大可达到上百TB

下一代实时数据库:Apache Doris 【二】编译与安装

文章目录第2章编译与安装2.1安装Docker环境2.2使用Docker开发镜像编译后记第2章编译与安装安装Doris,需要先通过源码编译,主要有两种方式:使用Docker开发镜像编译(推荐)、直接编译。直接编译的方式,可以参考官网:https://doris.apache.org/zh-CN/installing/c

vuex的state,getters,mutations,actions,modules

目录Vuex核心概念:1、State1)全局state2)使用modules中的state2、Getters1)全局Getters2)使用modules中的getters3、Mutations1)全局Mutations2)使用modules中的mutations(namespaced:true)4、Actions1)全

Day69:283. 移动零、11. 盛最多水的容器、42. 接雨水

283.移动零leetcode链接:https://leetcode.cn/problems/move-zeroes/给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。请注意,必须在不复制数组的情况下原地对数组进行操作。示例1:输入:nums=[0,1,0,3,12]输出:[1,3

华为云云耀云服务器L实例评测|怎么搭建企业综合Web平台

前言记得2019年,公司搞混合云的时候,测试过多家公有云,其中就有华为云。因公司也在深圳,项目也比较急,我司业务上云经验又不足,华为官方获悉情况后,第二天就派了4人小团队到我司来交流,整个交流过程非常流畅,从华为云的优势,华为POP点到我司机房网络,我司金融Web业务的特点,金融行业的通用迁云经验,甚至到后台团队连线,

数据库的模糊查询

命中率越高–策略越好数据库的模糊查询work918在SQL中,模糊查询可以使用LIKE关键字来实现。LIKE关键字后面可以跟一个模式,其中%表示任意数量的字符,_表示一个字符。例如,如果你想在一个名为students的表中查找所有名字以Li开头的学生,你可以这样做:SELECT*FROMstudentsWHEREnam

uview组件库的安装

更多的请查看官方文档uView2.0-全面兼容nvue的uni-app生态框架-uni-appUI框架(uviewui.com)//如果您的根目录没有package.json文件的话,请先执行如下命令://npminit-y安装npminstalluview-ui@2.0.36//更新//npmupdateuview-

热文推荐