【Java从0到架构师】Dubbo 基础 - 设置启动时检查、直接提供者、线程模型、负载均衡、集群容错、服务降级
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、自己开发的框架
服务的发现方式:直接调用服务地址、引入注册中心
注册中心的作用:
- 服务端服务的注册和客户端服务的发现
- 提高系统的可用性
- 提高系统的可伸缩性
- 集中管理服务
常见的注册中心: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 基础 - 设置启动时检查、直接提供者、线程模型、负载均衡、集群容错、服务降级相关推荐
- 【Java从0到架构师】RocketMQ 基础 - 应用、核心组件、安装
RocketMQ 消息中间件 基础知识 消息中间件的应用 异步解耦 削峰填谷 消息分发 RocketMQ 核心组件 RocketMQ 安装 源码安装 修改配置参数 启动 管理控制台安装 测试项目 Ja ...
- 【Java从0到架构师】分布式框架通信核心基础 - 序列化(JDK、Protobuf)、远程过程调用 RMI
分布式框架通信核心基础 序列化 JDK 的序列化 JDK 序列化的一些细节 Protobuf 序列化 Protobuf 环境搭建与操作 Protobuf 原理分析 实际数据传输 序列化技术选型 远程过 ...
- 【Java从0到架构师】Redis 基础 - 数据类型
Redis 原理与实战 Redis 基础 为什么 Redis 这么快? Redis 安装.启动 Redis 常用配置 Redis 数据类型 通用命令 String - value 可以是字符串.数值. ...
- 【Java从0到架构师】Linux 基础知识、常用命令
Linux 基础知识.常用命令 Linux 基础知识 内核和发行版 常见的 Linux 发行版 Linux 的应用领域 Linux 与 Windows 的区别 Linux 常用命令 *系统目录结构 s ...
- 【Java从0到架构师】SpringMVC - 基础
SpringMVC - 基础 SpringMVC - 入门 web.xml 配置 DispatcherServlet appliactionContext.xml 新建 Controller Spri ...
- 【Java从0到架构师】MySQL 基础
MySQL MySQL MySQL 的使用步骤 数据库的内部存储细节 GUI 工具 SQL 语句 DDL 语句 DDL 语句 - 数据库 DDL 语句 - 表 常用数据类型 - 数字类型 常用数据类型 ...
- 【Java从0到架构师】SpringCloud - Eureka、Ribbon、Feign
SpringCloud 分布式.微服务相关概念 微服务框架构选型 SpringCloud 概述 服务注册与发现 - Eureka 案例项目 Eureka 自我保护机制 微服务调用方式 - Ribbon ...
- 【Java从0到架构师(1),Java中高级面试题总结(全面)
JSP 九大内置对象 MySQL 基础 + 多表查询 [Java从0到架构师]MySQL 基础 MySQL MySQL 的使用步骤 数据库的内部存储细节 GUI 工具 SQL 语句 DDL 语句 DD ...
- 【Java从0到架构师】SpringCloud - Hystrix、Zuul
SpringCloud 基本概念 熔断和降级 服务雪崩效应 服务熔断与降级 - Hystrix SpringBoot 集成 Hystrix 熔断降级服务异常报警通知 重点属性 - 熔断隔离策略.超时时 ...
最新文章
- 程序员难逃二八法则,如何晋升为头部20%玩家?
- JSON简介以及用法汇总
- extern C 在c 与 cxx间的使用
- 如何防止无线网络被破解
- 一代杰出科学家--钱学森去世了
- Spring Cloud Gateway 源码解析(2) —— 路由
- PyCharm安装和配置教程
- 关于map对key自定义排序
- 万能高品质PSD分层促销海报,电商美工必备
- 微软收缩nano服务器容器图像,微软将推出全新服务器操作系统:Nano Server
- PhpStorm Live Template加PHP短语法Short Open Tags打造原生模板
- 使用layui中的laypage遇到的各种问题总结
- 新手学习易语言必须掌握的命令
- python随机密码生成在26个字母中随机生成10个_习题6:二.3 随机密码生成
- ioppc技术_广东电网有限责任公司河源供电局基于IOPPC线路光纤网络智能态势感知技术研究技术服务等5个项目采购公告...
- python 连接mysql_Python 连接MySQL
- 《Python数据分析与挖掘实战》学习笔记——电力漏窃电用户自动识别
- C++ opencv计算图像的水平投影,并返回一幅图像
- SVM支持向量机+实例展示
- 减少 try catch ,可以这样干,现在也必须这么干!
热门文章
- 面试遇到职场PUA,只能说兄弟你还嫩了点
- 寻找创业方向的3个方法
- 计算机发展史和数字电路
- 大家对于晚上下班兼职滴滴司机有什么看法?
- 解决Error: VM Exception while processing transaction: revert
- 前缀,中缀,后缀表达式求值
- sql server高可用_SQL Server 2019常规可用性和安装概述
- 数据库逻辑删除的sql语句_SQL查询优化的数据库设计和逻辑断言
- sql server 复制_SQL Server复制配置:点对点和合并复制
- 数据结构:判断是否为同一棵二叉搜索树