栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【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、自己开发的框架


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

注册中心的作用

  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 配置:


通过 -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 - 元数据中心

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/333293.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号