在java远程调用多年的沉淀

《1》首先是socket调用。在orderService中开放socket服务,在userService中进行远程调用。

  • 优点:解决了单机调用的问题。
  • 缺点:代码复杂,不易于扩展。

在java的对象是不可以直接通过socket进行传输的,需要有一个序列化的过程。而且java的默认的序列化,是无法被其他语言解析的。这样导致如果有其他语言提供的服务,是无法通过java调用。因此对于socket进行了升级,通过http+xml进行信息的传输。这就出现了webservice

《2》Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。

《3》内部调用协议

http协议是应用层的一种协议,对于开放给外部系统时,是一个很好的选择,它可以实现跨语言调用。如果是自己的java服务内部调用时,使用http协议,就有点浪费资源。

====》

http协议在交互之前需要进行tcp三次握手,握手成功之后进行数据传输。一个http交互下来,有请求头、请求体、响应头、响应体。这些数据,在内部调用时,很多无关紧要的数据。也许可以自定义协议,简化传输数据。这就出现了dubbo协议,一种内部调用的协议。

dubbo协议追求的是数据量小,小则快,协议的设计也符合dubbo框框架的理念,适用与内部服务之间的数据交互。安全性就没有https做的那么好,但是也不需要,毕竟dubbo协议设计的初衷就是内部使用的。

spring cloud的feign组件内部使用http协议,内部调用可能有一些资源的浪费,但是http协议可以实现跨语言调用。

RPC框架

为了实现动态的机器添加与移除。最终,添加了一个机器的协调者,所有开放服务的机器在这个协调者中添加自己的开放服务的信息,这个协调者中会有哪些机器开放了哪些服务。这样看来这个协调者类似一个"通讯录"。我们称这个"通讯录"为注册中心

  1. 服务提供者启动之后向注册中心,提交自己提供服务的信息。
  2. 服务消费者,在消费时,去注册中心查询是否有机器提供对应的服务
  3. 在有服务上线或者下线时,注册中心可以对修改的信息进行通知。

注册中心的选择

作为协调者的注册中心,占据着一个重要地位。这样来看,注册中心主要实现了临时数据存储的功能。可以有多种选择数据库、redis、zookeeper、eureka、nacos、或者自己实现

期初dubbo框架官方推荐使用zookeeper为注册中心,出现nacos之后,逐渐从zookeeper转为nacos。

结论为:zookeeper在大数据计算时做注册中心是一个好的选择,但是在服务调用时,也许数据不需要超强的一致性。nacos是目前来说很友好的一个注册中心,他提供了CP+AP。还有可视化界面,还有配置中心等功能。功能相当完善。

于springboot在大大开发了开发的速度,而且springcloud的各个组件都比较完善,feign、网关、配置中心、熔断等等。spring、springcloud和springboot明显是一家人。这让一个孤身的dubbo有点不好立足,一些公司从dubbo框架转为springcloud全家桶。

  • nacos:注册中心。
  • dubbo:一个基于Java的高性能开源RPC框架。
  • seata:一种高性能且易于使用的分布式事务解决方案,可用于微服务架构。

nacos是一个新推出的注册中心,其中最亮眼的功能是提供了可视化界面,而且还附带配置中心。瞬间dubbo就找到了家人。这些组件的出现让dubbo又崛起了起来。而且dubbo本来扩展性就很好。可以进行协议扩展、调用拦截扩展、引用监听扩展、集群扩展等等。

另外dubbo3.0主力使用Triple 协议。完整兼容 gRPC over HTTP/2。推荐使用 protobuf 作为默认序列化,在性能和跨语言上的效果都会更好。

Dubbo 的设计思想的更多相关文章

  1. 源码解读Dubbo分层设计思想

    一.Dubbo分层整体设计概述 我们先从下图开始简单介绍Dubbo分层设计概念: (引用自Duboo开发指南-框架设计文档) 如图描述Dubbo实现的RPC整体分10层:service.config. ...

  2. 透彻理解Spring事务设计思想之手写实现(山东数漫江湖)

    前言 事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败.事务具有4个特性:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),D ...

  3. 使用Unity3D的设计思想实现一个简单的C#赛车游戏场景

    最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现.原本在C#中很方便地就可以完成的一个小场景,使用Unity3 ...

  4. spring事务管理器设计思想(二)

    上文见<spring事务管理器设计思想(一)> 对于第二个问题,涉及到事务的传播级别,定义如下: PROPAGATION_REQUIRED-- 如果当前没有事务,就新建一个事务.这是最常见 ...

  5. 掌握 Cinder 的设计思想 - 每天5分钟玩转 OpenStack(46)

    上一节介绍了 Cinder 的架构,这节讨论 Cinder 个组件如何协同工作及其设计思想. 从 volume 创建流程看 cinder-* 子服务如何协同工作 对于 Cinder 学习来说,Volu ...

  6. javascript继承机制的设计思想(ryf)

    我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...

  7. 09A-独立按键消抖实验01——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的: 1.复习状态机的设计思想并以此为基础实现按键消抖 2.单bit异步信号同步化以及边沿检测 3.在激励文件中学会使用随机数发生函数$random 4.仿真模 ...

  8. 08-FPGA状态机设计实例——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的:1.学习状态机的相关概念 2.理解一段式.两段式以及三段式状态机的区别以及优缺点 实验平台:芯航线FPGA核心板 实验原理: 状态机全称是有限状态机(fin ...

  9. FPGA重要设计思想

    FPGA重要设计思想   1.速度和面积互换原则.以面积换速度可以实现很高的数据吞吐率,其实串/并转换.就是一种以面积换速度的思想 2.乒乓操作. 3.串/并转换的思想. 高速数据处理的重要技巧之一. ...

随机推荐

  1. 点击下拉选择触发事件【c#】

    <asp:DropDownList ID="ddlRegionList" runat="server" AutoPostBack="true&q ...

  2. 巩固javaweb的第二十三天

    巩固内容: 调用验证方法 验证通常在表单提交之前进行,可以通过按钮的 onClick 事件,也可以通过 form 表单 的 onSubmit 事件来完成. 本章实例是通过 form 表单的 onSub ...

  3. day06 视图层

    day06 视图层 今日内容 视图层 小白必会三板斧 JsonResponse form表单发送文件 FBV与CBV FBV基于函数的视图 CBV基于类的视图 模板层 模板语法的传值 模板语法之过滤器 ...

  4. day22面向对象编程思想

    day22面向对象编程思想 1.面向过程 面向过程: 核心是"过程"二字 过程的终极奥义就是将程序流程化 过程是"流水线",用来分步骤解决问题的 面向对象: 核 ...

  5. ASP.NET Core中使用固定窗口限流

    算法原理 固定窗口算法又称计数器算法,是一种简单的限流算法.在单位时间内设定一个阈值和一个计数值,每收到一个请求则计数值加一,如果计数值超过阈值则触发限流,如果达不到则请求正常处理,进入下一个单位时间 ...

  6. STM32 CAN用队列缓冲接收的例子

    [1]CAN接收用队列缓冲的例子: 发单帧没有问题,多帧或者连续发两帧就有问题.

  7. Bootstrap-table动态表格

    在开发中遇到一个需要动态生成table的需求,包括表头和数据.在调试的过程中遇到很多问题,包括数据分页,解决之后记录一下. 如下代码的数据加载流程: ①表头是动态的,在初始化table之前需要调一次后 ...

  8. request获取请求参数通用方式

    package com.hopetesting.web.request;import javax.servlet.ServletException;import javax.servlet.annot ...

  9. Jsp/servlet分页五要素

    分页5要素: * 1)pageIndex 当前页 * 2)startIndex 从第几条数据开始 * 3)countAll 总条目数 * 4)pageSize 每页大小 * 5)pageCount 总 ...

  10. h5文件下载

    // type1 await getFile(fileUrl).then((res) => { console.log('download',res); let bFile = window.U ...