概述
- 服务治理 服务发现与分发
- 服务通信 组件调用 协议、序列化 通信模型
术语定义
名词 | 解释 |
DNS | 阿里内部的微服务解决方案 D(dubbo) N(nacos) S(sentinel) |
RPC | 远程过程调用 把方法入参通过网络传输过去把结果传递回来 |
云原生 | 本地开发的程序不经任何修改就可以同步到云环境下 |
ddd | 领域驱动设计架构 与传统MVC区别 |
dubbo | 轻量级 高性能rpc框架 类似产品有grpc、feign |
rpc | 微服务的核心组件 本地调用的方法变为远程调用 |
zookeeper | 注册中心 rpc事件必须需要把公共的部分注册到注册中心中才可以进行调用 类似产品有 nacos、eureka |
微服务 | 按照模块进行拆分 原来的单体架构升级为多个服务的结构 |
设计一个rpc 需要考虑什么
- 通信模型 阻塞式还是非阻塞式
- 协议 选用什么网络协议
- 序列化 你的数据格式是怎么样的
Springboot整合Dubbo2.7
核心思路分析
深度封装 把公用配置放置在application.yml中 把个性配置以注解的方式
另外非注解的方式 可参考这里:dubbo整合springboot XML配置
快速上手
- 注意需要提前启动注册中心!!!! 可以选择zk并启动
- 新建一个maven项目并删除根节点 xml
- 新建maven项目模块common-api 作为公共的接口 不需要引入任何依赖
- 新建provider模块
- 新建comsumer模块
依赖同上
高级特性
序列化
java类需要实现序列化接口
地址缓存
注册中心挂了 服务是否可以正常访问?
- 可以 dubbo服务消费者在第一次调用时 会将服务提供方地址缓存到本地 以后再调用则不会访问注册中心
- 当服务提供者地址发生变化时 注册中心会通知消费者
超时
- 服务消费者在调用服务提供者的时候发生了阻塞、等待的情形 这个时候服务消费者会一直等待下去
- 在某个峰值时刻 大量的请求同时请求服务消费者 会造成线程的大量堆积被消耗完 势必造成雪崩
- dubbo利用超时机制来解决这个问题 设置一个超时时间 在这个时间段内 无法完成服务访问 则自动断开连接
- 使用timeout属性配置超时时间 默认值是1000 单位毫秒
重试
- 如果出现网络抖动 则这一次请求失败
- retries=2 默认重试2次 一共三次
灰度发布
- 多版本 通过version版本号控制 具体调用的方法
负载均衡
- Random 按权重随机 默认值是100