网站地图对seo,中江门户网站,人才网站建站,WordPress页面开发INDEX 1 Dubbo 与 web 容器的关系2 注册发现流程3 服务配置3.1 注册方式 订阅方式3.2 服务导出3.3 配置参数 4 底层技术4.1 Dubbo 的 spi 机制4.2 Dubbo 的线程池4.3 Dubbo 的负载均衡策略4.3 Dubbo 的协议 1 Dubbo 与 web 容器的关系
dubbo 本质上是一个 RPC 框架… INDEX §1 Dubbo 与 web 容器的关系§2 注册发现流程§3 服务配置§3.1 注册方式 订阅方式§3.2 服务导出§3.3 配置参数 §4 底层技术§4.1 Dubbo 的 spi 机制§4.2 Dubbo 的线程池§4.3 Dubbo 的负载均衡策略§4.3 Dubbo 的协议 §1 Dubbo 与 web 容器的关系
dubbo 本质上是一个 RPC 框架常用于服务间调用web 容器是服务的容器主要用来响应 http 请求dubbo 和 web 没有直接联系dubbo 也不依赖于 web 容器
§2 注册发现流程 无论 provider 还是 consumer
都被容器代理都通过协议与注册中心交互
工作流程
provider 向注册中心注册自己consumer 向注册中心订阅服务 Dubbo 默认在启动时开启服务可用性检查 若 provider 无可用节点会启动失败报 No provider available for the service ... 也可以通过配置 DubboReference(checkfalse) 关闭这个特性 注册中心定时通知 consumer 服务变更comsumer 通过订阅到的信息调用服务 Dubbo 启动后若注册中心宕机不影响 consumer 调用 provider 因为调用是依赖 consumer 订阅的服务信息consumer 会有本地缓存 privider/comsumer 统计自己的调用次数、调用时间每分钟通知 monitor
§3 服务配置
§3.1 注册方式 订阅方式
版本注册中心配置方式 2.7zk接口注册 2.7zk / nacos接口注册 2.7.6zk / nacos接口注册/应用注册 3zk / nacos2.0接口注册/应用注册
Dubbo 2.7.6 开始支持 3 种注册方式
interface经典配置方式接口级注册instance新配置方式应用级注册可以有效减少注册信息all即 interface instance默认便于服务迁移
与之相对的Dubbo 的订阅方式也有 3 种
FORCE_INTERFACE只按接口级注册消费FORCE_INSTANCE只按应用级注册消费APPLICATION_FIRST默认优先按应用级注册消费
§3.2 服务导出
Dubbo 的服务导出机制其实就是从服务启动到注册到注册中心的过程在官网有详细解释放心看中文的
Dubbo 3.0 Spring 启动后发送的 ContextRefreshEvent 事件 Dubbo 会通过 DubboDeployApplicationListener 监听这个事件 并通过 DefaultModuleDeploy.startSync() 开始同步
Dubbo 2.7 入口在 ServiceBean.onApplicationEvent(ContextRefreshEvent event)分为如下几步
前置准备 配置检查 检查 dubbo:service interface 属性ProviderConfig、ApplicationConfig 等配置对象检查泛化服务与普通服务检查本地存根配置ApplicationConfig、RegistryConfig 等配置对象 多协议多配置中心导出支持URL 装配主要是找到、适配各种参数 导出服务 创建 Invoker这是 Dubbo 的核心模块所有组件都是以此为核心的根据配置 scope 参数决定是导出到本地还是远端 导出到本地时仅通过 InjvmProtocol.export 创建 InjvmExporter导出到远端时 调用 doLocalExport 导出服务向注册中心注册向注册中心订阅 override 数据创建并返回 DestroyableExporter 服务注册 根据 url 从缓存获取注册器如果没有就创建并加入缓存连接注册中心服务创建注册中心客户端对象通过注册中心客户端对象向注册中心创建节点写入节点数据
§3.3 配置参数
DubboReference(checkfalse) 关闭 consumer 启动时检查 provider 是否可用 当不配置时若 provider 无可用节点会报 No provider available for the service ... 启动失败
DubboServide(groupxx) DubboReference(groupxx) 同接口多实现配置消费者只会调用同组提供者
DubboServide(versionxx) DubboReference(versionxx) 同接口有多个版本需要兼容消费者只会调用同组提供者
§4 底层技术
§4.1 Dubbo 的 spi 机制
spi 是 JDK 已经实现了的规范Dubbo 独立实现了一套 其目的在于在多实现接口中仅实例化需要的实现
§4.2 Dubbo 的线程池
线程池位置
线程池类型
fixed固定大小线程池启动时建立线程不关闭一直持有默认cached缓存线程池空闲一分钟自动删除需要时重建。 任务数量超过 maximumPoolSize 时直接抛出异常而不是将任务放入阻塞队列limited可伸缩线程池但池中的线程数只会增长不会收缩。 只增长不收缩的目的是为了避免收缩时突然来了大流量引起的性能问题。eager优先创建Worker线程池。 在任务数量大于 corePoolSize 但是小于 maximumPoolSize 时优先创建Worker来处理任务。 当任务数量大于 maximumPoolSize 时将任务放入阻塞队列中。阻塞队列充满时抛出 RejectedExecutionException
线程池满载 dubbo 的线程池是在服务节点上全服务共享的默认最大线程数 200超出后会拒绝请求并提示类似如下信息 Server side(ip,port) thread pool is exhausted, detail msg: Thread pool is EXHAUSTED! Thread name: xx-ip:port, Pool Size: 200(active: 200,core: 200, max: 200,largest:200), Task 207(completed: 7), Executor status: (isShutdown: false, isTerminated:false, isTerminating:false), in dubbo:ip:port
解决方式
优化逻辑链路降低处理时间增加服务节点服务拆分剥离专享节点给流量极大服务服务限流配合链路限流模式
§4.3 Dubbo 的负载均衡策略
官网原文在此中文的随便看
random加权随机默认round-robin加权轮询按服务节点新能进行加权least-active最小活跃数活跃调用数越小表明该服务提供者效率越高单位时间内可处理更多的请求consistent-hash一致性 hash直接确定了 provider 和 consumer 的对应关系shortest-response加权最短响应P2C随机挑选两个节点然后选择连接数小的adaptive随机挑选两个节点然后选择负载小的
§4.3 Dubbo 的协议
基于 http 的
dubbohessianhttp
基于缓存的
redismemcached
基于二进制序列化的快
thriftgRPC
基于 java 规范的
restrmiwebservice