Dubbo

  • 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及”请求-响应”模式的信息交换方式。
  • 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
  • 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

  • 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。

  • 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
  • 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

常见的远程调用方式有以下几种:

  • RPC:Remote Produce Call远程过程调用,类似的还有RMI(Remote Methods Invoke 远程方法调用,是JAVA中的概念,是JAVA十三大技术之一)。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型
    • RPC的框架:webservie(cxf)、dubbo
    • RMI的框架:hessian
  • Http:http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议。也可以用来进行远程服务调用。缺点是消息封装臃肿。 现在热门的Rest风格,就可以通过http协议来实现。
    • http的实现技术:HttpClient
  • 相同点:底层通讯都是基于socket,都可以实现远程调用,都可以实现服务调用服务
  • 不同点:
    RPC:框架有:dubbo、cxf、(RMI远程方法调用)Hessian
    当使用RPC框架实现服务间调用的时候,要求服务提供方和服务消费方 都必须使用统一的RPC框架,要么都dubbo,要么都cxf 跨操作系统在同一编程语言内使用
    优势:调用快、处理快 http:框架有:httpClient
    当使用http进行服务间调用的时候,无需关注服务提供方使用的编程语言,也无需关注服务消费方使用的编程语言,服务提供方只需要提供restful风格的接口,服务消费方,按照restful的原则,请求服务,即可 跨系统跨编程语言的远程调用框架
    优势:通用性强 总结:对比RPC和http的区别
    1 RPC要求服务提供方和服务调用方都需要使用相同的技术,要么都hessian,要么都dubbo
    而http无需关注语言的实现,只需要遵循rest规范
    2 RPC的开发要求较多,像Hessian框架还需要服务器提供完整的接口代码(包名.类名.方法名必须完全一致),否则客户端无法运行
    3 Hessian只支持POST请求
    4 Hessian只支持JAVA语言

ACP三要素:

分别是一致性Hash均衡算法、随机调用法、轮询法、最少活动调用法

下面看下Dubbo提供的集群容错模式:

Failover Cluster:失败重试

当服务消费方调用服务提供者失败后自动切换到其他服务提供者服务器进行重试。这通常用于读操作或者具有幂等的写操作,需要注意的是重试会带来更长延迟。可通过 retries=”2″ 来设置重试次数(不含第一次)。

接口级别配置重试次数方法

Failfast Cluster:快速失败

当服务消费方调用服务提供者失败后,立即报错,也就是只调用一次。通常这种模式用于非幂等性的写操作。

Failsafe Cluster:失败安全

当服务消费者调用服务出现异常时,直接忽略异常。这种模式通常用于写入审计日志等操作。

Failback Cluster:失败自动恢复

当服务消费端用服务出现异常后,在后台记录失败的请求,并按照一定的策略后期再进行重试。这种模式通常用于消息通知操作。

Forking Cluster:并行调用

当消费方调用一个接口方法后,Dubbo Client会并行调用多个服务提供者的服务,只要一个成功即返回。这种模式通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=”2″ 来设置最大并行数。

Broadcast Cluster:广播调用

当消费者调用一个接口方法后,Dubbo Client会逐个调用所有服务提供者,任意一台调用异常则这次调用就标志失败。这种模式通常用于通知所有提供者更新缓存或日志等本地资源信息。

如上,Dubbo本身提供了丰富的集群容错模式,但是如果您有定制化需求,可以根据Dubbo提供的扩展接口Cluster进行定制。在后面的消费方启动流程章节会讲解何时/如何使用的集群容错。

4。dubbo支持的序列化协议

dubbo实际基于不同的通信协议,支持hessian、java二进制序列化、json、SOAP文本序列化多种序列化协议。

但是hessian是其默认的序列化协议。

Original: https://www.cnblogs.com/lei-z/p/15840040.html
Author: 风光小磊
Title: Dubbo

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/587181/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 一冲子程序启程!

    你好!一冲! 这里敲起了一个问号?什么是”你好!一冲!”呢?那就从”你好!世界!”是一个程序员的开端作为它的由来。我接触的第一个程序…

    Java 2023年6月5日
    090
  • Java面向对象(七)

    (1)静态变量随着类的加载而加载。可以通过”类.静态变量”的方式进行调用 (2)静态变量的加载要早于对象的创建。 (3)由于类只会加载一次,则静态变量在内存…

    Java 2023年6月9日
    075
  • 企业级微服务API网关Fizz-常用插件介绍

    前言 社区贡献的插件在 https://github.com/orgs/wehotel/repositories?type=all 下,一般以 fizz-plugin- 或 fiz…

    Java 2023年6月9日
    080
  • 使用SLF4J和LOGBACK (一 : 基本使用)

    上边两行代码中的Logger和LoggerFactory对象均来自SLF4J包中。 具体的日志实现框架,我们可以选择LOG4J,LOGBACK等作为日志的具体实现,但是日志的打印输…

    Java 2023年6月16日
    099
  • Spring 源码(9)Spring Bean的创建过程的前期准备

    回顾总结 到目前为止, Spring源码中 AbstractApplicationContext#refresh方法的已经解读到第11个方法 finishBeanFactoryIn…

    Java 2023年6月14日
    084
  • Spring Security OAuth2 完全解析 (流程/原理/实战定制) —— Client / ResourceServer 篇

    一、前言 假设对 Spring Security 本身原理有一定程度的了解,对 OAuth2 规范流程、Jwt 有基础了解,以此来对 SpringSecurity 整合 OAuth…

    Java 2023年6月6日
    0110
  • Spring 拦截器

    拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行 作用: 在指定的方法调用前后执行预先设定的代码 阻止原始方法的执行 总…

    Java 2023年6月7日
    072
  • README

    博客的 commit comment 约定: 类型 说明 new 新增文章 del 删除文章 feat 文章增加内容、使文章内容更加容易阅读 fix 修订文章中错误的部分 refa…

    Java 2023年6月7日
    070
  • Spring学习笔记1

    前言:看了B站黑马程序员,狂神说JAVA,个人觉得还是狂神讲的更加细致,现记录自己的学习过程 一、Spring是一个框架,是为了让现有的技术更加容易使用,本身就是一个大杂烩,整合了…

    Java 2023年6月7日
    075
  • java selenium (九) 常见web UI 元素操作 及API使用

    本篇介绍我们如何利用selenium 来操作各种页面元素 链接的操作 输入框的操作 找到按钮元素 下拉选择框的操作 单选项元素的操作 多选框的操作和单选框一模一样的, 这里就不再讲…

    Java 2023年5月29日
    091
  • Flutter 发布 pub 命令

    1.发布之前,不规范检测,类似lint. 2.发布 如果发布失败,遇见code 1,用下面命令: 注意:FQ,否则超时失败 Original: https://www.cnblog…

    Java 2023年5月29日
    084
  • java网络编程

    网络编程是指编写运行在计算机的程序,这些设备都通过网络连接起来。要实现网络通信,我们要考虑几个问题: 1.如何建立两个节点(电脑)之间的网络连接? 2.如何向另外一个节点(电脑)发…

    Java 2023年6月8日
    079
  • Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十七):登录验证码实现(Captcha)

    登录验证码 登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等。 我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点…

    Java 2023年5月30日
    091
  • 解决latex数学公式渲染不正确及行内公式中文渲染乱码问题

    问题 之前数学OCR渲染数学公式用的 katex 来渲染,前端解决方案,我们的进行公式编写的时候是需要输入中文的,如: Fe_{2}O_{3} + 3 C O \stackrel{…

    Java 2023年6月7日
    0115
  • springCloud中增加gateway(超详细)

    地址:https://blog.csdn.net/qq_42815754/article/details/94622244 此博客只是为了记忆相关知识点,大部分为网络上的文章,在此…

    Java 2023年5月30日
    083
  • C语言-字符串函数的实现(四)之strcmp

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strnc…

    Java 2023年6月10日
    0117
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球