Dubbo 详解

Cruise | Blog 往事作序,来日为章 本文由博客端 http://cruisesun.top 主动推送

一、分布式基础

  分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统。

  老式系统(单一应用架构)就是把一个系统,统一放到一个服务器当中然后每一个服务器上放一个系统,如果说要更新代码的话,每一个服务器上的系统都要重新去部署十分的麻烦。而分布式系统就是将一个完整的系统拆分成多个不同的服务,然后再将每一个服务单独的放到一个服务器当中。

发展演变

QQ 截图 20201120201721.png

ORM

单一应用架构: 一个项目装到一个服务器当中,也可以运行多个服务器每一个服务器当中都装一个项目。

缺点:

MVC

垂直应用架构: 将应用切割成几个互不相干的小应用,在将每个小应用独立放到一个服务器上,如果哪一个应用的访问数量多就多加几台服务器。

RPC

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

QQ 截图 20201120202234.png

SOA

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

RPC 简介

RPC 工作原理

QQ 截图 20201120203105.png

  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 是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,服务自动注册和发现。

特性

QQ 截图 20201120203802.png

(1)服务注册中心

(2)负载均衡

(3)简化测试,允许直连提供者
  在开发阶段为了方便测试,通常系统客户端能指定调用某个服务提供者,那么可以在引用服务时加一个 url 参数去指定服务提供者。

(4)服务版本,服务分组
  在 Dubbo 配置文件中可以通过制定版本实现连接制定提供者,也就是通过服务版本可以控制服务的不兼容升级;当同一个服务有多种实现时,可以使用服务分组进行区分。

设计架构

QQ 截图 20201120203926.png

服务提供者(Provider): 暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
注册中心(Registry): 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
监控中心(Monitor): 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

配置原则

QQ 截图 20201120205544.png

  1. JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。
  2. XML 次之,如果在 XML 中有配置,则 dubbo.properties 中的相应配置项无效。
  3. Properties 最后,相当于缺省值,只有 XML 没有配置时,dubbo.properties 的相应配置项才会生效,通常用于共享公共配置,比如应用名。

dubbo 推荐在 Provider 上尽量多配置 Consumer 端属性

配置的覆盖原则

QQ 截图 20201120205841.png

高可用

  通过设计,减少系统不能提供服务的时间
zookeeper 宕机与 dubbo 直连
现象:zookeeper 注册中心宕机,还可以消费 dubbo 暴露的服务。
原因:

服务降级

  当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。
  可以通过服务降级功能临时屏蔽某个出错的非关键服务,并定义降级后的返回策略。

集群容错

  在集群调用失败时,Dubbo 提供了多种容错方案:

Failover Cluster

  失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries=“2” 来设置重试次数(不含第一次)。

Failfast Cluster

  快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。

Failsafe Cluster

  失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。

Failback Cluster

  失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

Forking Cluster

  并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=“2” 来设置最大并行数。

Broadcast Cluster

  广播调用所有提供者,逐个调用,任意一台报错则报错 [2]。通常用于通知所有提供者更新缓存或日志等本地资源信息。

  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    58 引用 • 82 回帖 • 565 关注

赞助商 我要投放

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...