Dubbo 分布式 RPC

  • 分布式核心基础
    • 分布式概述
    • RPC
  • Dubbo
    • Dubbo 入门程序 - XML、注解
    • 部署管理控制台 Dubbo Admin
    • 修改绑定的注册 IP 地址
    • 设置启动时检查
    • 直接提供者
    • 线程模型
    • 负载均衡
    • 集群容错
    • 服务降级
    • (了解)元数据中心、灰度发布 ...

Java 从 0 到架构师目录:【Java从0到架构师】学习记录

分布式核心基础

分布式概述

集中式应用:

分布式应用:

为什么要使用分布式?

  • 性能拓展:系统负载高,单台机器无法承载,使用多台机器来提高系统的负载能力(比如商品查询服务,相对于支付服务更需要负载)
  • 增强可靠性:软件、网络、机器本身随时可能会出错,为了避免故障,需要将业务分散开保留一定的冗余度,即时一个服务暂时不用,不影响其他服务正常使用(比如支付服务暂时不可用,不影响账单流水查询服务)

RPC

RPC (Remote Procedure Call Protocol) —— 远程过程调用协议,一种通过网络从远程计算机程序上请求服务

RPC 协议的底层原理,就是对象的序列化、反序列化以及序列化后数据的传输

RPC 协议的核心组成部分:

  • 序列化和反序列化:可以使用 Java 原生的序列化和反序列化,也可以使用高性能序列化/反序列化工具,例 Hessian、FST 等,还可以使用表单序列化等
  • 网络传输协议HTTP、TCP(推荐使用 HTTP)

常见的 RPC 框架:Dubbo、SpringCloud、Thrift、Motan、gRPC,RMI、自己开发的框架


服务的发现方式:直接调用服务地址、引入注册中心

注册中心的作用:

  1. 服务端服务的注册和客户端服务的发现
  2. 提高系统的可用性
  3. 提高系统的可伸缩性
  4. 集中管理服务

常见的注册中心:Zookeeper、Redis、Nacos、Etcd、Consul

Dubbo

Dubbo 是一个阿里巴巴开发的开源分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案。

  • 2015年停止维护,2017年7月成为 Apache 基金会的顶级项目
  • 当当网 (dubboX):在 Dubbo 的基础上面增加了 RESTful 功能和 FST 序列化支持
  • 京东 (jd-hydra):在 Dubbo 的基础上的一个分布式跟踪系统

Dubbo 的优势:

  • 阿里内部的大量的实施经验(2017年7月份重启开源)
  • 完善的文档
  • 完善的服务治理,管理平台

Dubbo 入门程序 - XML、注解

项目结构:

  • demo-api:存放接口、实体
  • demo-client:客户端

XML 参考:Dubbo - XML 配置

注解参考:Dubbo - 注解

部署管理控制台 Dubbo Admin

下载地址:https://github.com/apache/dubbo-admin.git

解决从 Github 上下载源码比较慢的问题,通过码云的从 Github 导入仓库进行操作:

修改对应的源码配置:

# 修改dubbo-admin-server项目的application.properties:# 指定zk的地址
admin.registry.address=zookeeper://127.0.0.1:2181
admin.config-center=zookeeper://127.0.0.1:2181
admin.metadata-report.address=zookeeper://127.0.0.1:2181# 指定登录的用户名和密码
admin.root.user.name=root
admin.root.user.password=root

打包编译:进入到 pom.xml 文件所在的目录,进行打包编译

mvn clean package

启动运行:java -jar dubbo-admin-server-0.2.0-SNAPSHOT.jar

修改绑定的注册 IP 地址

可以通过自定参数进行配置 -DDUBBO_IP_TO_REGISTRY=192.168.48.1

但是需要注意,不能指定本地地址 127.0.0.1 和 localhost

设置启动时检查

参考:Dubbo - 启动时检查

# 配置整个消费者的启动
dubbo.consumer.check=false# 注册中心关闭也不会报错
dubbo.registry.check=false

直接提供者

参考:Dubbo - 直连提供者

在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者

通过 XML 配置:

<dubbo:reference id="xxxService" interface="com.alibaba.xxx.XxxService" url="dubbo://localhost:20890" />

通过 -D 参数指定:

java -Dcom.alibaba.xxx.XxxService=dubbo://localhost:20890

为了避免复杂化线上环境,不要在线上使用这个功能,只应在测试阶段使用

线程模型

参考:Dubbo - 线程模型

如果事件处理的逻辑能迅速完成,并且不会发起新的 IO 请求,比如只是在内存中记个标识,则直接在 IO 线程上处理更快,因为减少了线程池调度。

但如果事件处理逻辑较慢,或者需要发起新的 IO 请求,比如需要查询数据库,则必须派发到线程池,否则 IO 线程阻塞,将导致不能接收其它请求。

负载均衡

参考:Dubbo - 负载均衡

@Service(loadbalance = "roundrobin")
public class ProductServiceImpl implements IProductService {// ...
}

集群容错

参考:Dubbo - 集群容错

集群调用失败时,Dubbo 提供了一系列的容错方案

服务降级

参考:Dubbo - 服务降级

可以通过服务降级功能临时屏蔽某个出错的非关键服务,并定义降级后的返回策略

@Service
public class OrderServiceImpl implements IOrderService {// mock是调用本地的实现@Reference(mock = "com.hesj.demo.service.impl.ProductServiceImpl")private IProductService productService;// code...}

(了解)元数据中心、灰度发布 …

Dubbo - 元数据中心

【Java从0到架构师】Dubbo 基础 - 设置启动时检查、直接提供者、线程模型、负载均衡、集群容错、服务降级相关推荐

  1. 【Java从0到架构师】RocketMQ 基础 - 应用、核心组件、安装

    RocketMQ 消息中间件 基础知识 消息中间件的应用 异步解耦 削峰填谷 消息分发 RocketMQ 核心组件 RocketMQ 安装 源码安装 修改配置参数 启动 管理控制台安装 测试项目 Ja ...

  2. 【Java从0到架构师】分布式框架通信核心基础 - 序列化(JDK、Protobuf)、远程过程调用 RMI

    分布式框架通信核心基础 序列化 JDK 的序列化 JDK 序列化的一些细节 Protobuf 序列化 Protobuf 环境搭建与操作 Protobuf 原理分析 实际数据传输 序列化技术选型 远程过 ...

  3. 【Java从0到架构师】Redis 基础 - 数据类型

    Redis 原理与实战 Redis 基础 为什么 Redis 这么快? Redis 安装.启动 Redis 常用配置 Redis 数据类型 通用命令 String - value 可以是字符串.数值. ...

  4. 【Java从0到架构师】Linux 基础知识、常用命令

    Linux 基础知识.常用命令 Linux 基础知识 内核和发行版 常见的 Linux 发行版 Linux 的应用领域 Linux 与 Windows 的区别 Linux 常用命令 *系统目录结构 s ...

  5. 【Java从0到架构师】SpringMVC - 基础

    SpringMVC - 基础 SpringMVC - 入门 web.xml 配置 DispatcherServlet appliactionContext.xml 新建 Controller Spri ...

  6. 【Java从0到架构师】MySQL 基础

    MySQL MySQL MySQL 的使用步骤 数据库的内部存储细节 GUI 工具 SQL 语句 DDL 语句 DDL 语句 - 数据库 DDL 语句 - 表 常用数据类型 - 数字类型 常用数据类型 ...

  7. 【Java从0到架构师】SpringCloud - Eureka、Ribbon、Feign

    SpringCloud 分布式.微服务相关概念 微服务框架构选型 SpringCloud 概述 服务注册与发现 - Eureka 案例项目 Eureka 自我保护机制 微服务调用方式 - Ribbon ...

  8. 【Java从0到架构师(1),Java中高级面试题总结(全面)

    JSP 九大内置对象 MySQL 基础 + 多表查询 [Java从0到架构师]MySQL 基础 MySQL MySQL 的使用步骤 数据库的内部存储细节 GUI 工具 SQL 语句 DDL 语句 DD ...

  9. 【Java从0到架构师】SpringCloud - Hystrix、Zuul

    SpringCloud 基本概念 熔断和降级 服务雪崩效应 服务熔断与降级 - Hystrix SpringBoot 集成 Hystrix 熔断降级服务异常报警通知 重点属性 - 熔断隔离策略.超时时 ...

最新文章

  1. 程序员难逃二八法则,如何晋升为头部20%玩家?
  2. JSON简介以及用法汇总
  3. extern C 在c 与 cxx间的使用
  4. 如何防止无线网络被破解
  5. 一代杰出科学家--钱学森去世了
  6. Spring Cloud Gateway 源码解析(2) —— 路由
  7. PyCharm安装和配置教程
  8. 关于map对key自定义排序
  9. 万能高品质PSD分层促销海报,电商美工必备
  10. 微软收缩nano服务器容器图像,微软将推出全新服务器操作系统:Nano Server
  11. PhpStorm Live Template加PHP短语法Short Open Tags打造原生模板
  12. 使用layui中的laypage遇到的各种问题总结
  13. 新手学习易语言必须掌握的命令
  14. python随机密码生成在26个字母中随机生成10个_习题6:二.3 随机密码生成
  15. ioppc技术_广东电网有限责任公司河源供电局基于IOPPC线路光纤网络智能态势感知技术研究技术服务等5个项目采购公告...
  16. python 连接mysql_Python 连接MySQL
  17. 《Python数据分析与挖掘实战》学习笔记——电力漏窃电用户自动识别
  18. C++ opencv计算图像的水平投影,并返回一幅图像
  19. SVM支持向量机+实例展示
  20. 减少 try catch ,可以这样干,现在也必须这么干!

热门文章

  1. 面试遇到职场PUA,只能说兄弟你还嫩了点
  2. 寻找创业方向的3个方法
  3. 计算机发展史和数字电路
  4. 大家对于晚上下班兼职滴滴司机有什么看法?
  5. 解决Error: VM Exception while processing transaction: revert
  6. 前缀,中缀,后缀表达式求值
  7. sql server高可用_SQL Server 2019常规可用性和安装概述
  8. 数据库逻辑删除的sql语句_SQL查询优化的数据库设计和逻辑断言
  9. sql server 复制_SQL Server复制配置:点对点和合并复制
  10. 数据结构:判断是否为同一棵二叉搜索树