vlambda博客
学习文章列表

第一章 Dubbo-高性能RPC通信框架

本章主要内容:

  • 应用架构演进过程

  • Dubbo简介

  • Dubbo总体大图

单体应用

JEE时期:优点:分工;;缺点:多数应用同在一个JVM中,耦合严重

MVC

MVC框架时期

分布式应用

  1. 早期SOA


    • 明确的协议

    • 明确的接口

    • 合作方式的改变。后端团队可以进一步拆分服务

    • 通信方式。xml,json

实现方式:

Web Service(SOAP协议,HTTP,HTTPS 传输xml)

ESB        

  1. 微服务化。新问题:容量动态规划,服务框架的臃肿

  2. 云原生。

Dubbo简介

核心设计原则:微内核+插件体系,平等对待第三方

Dubbo的特性总结

  1. 面向接口代理的高性能RPC调用

  2. 服务自动注册与发现

  3. 运行期流量调度:内置条件,脚本等路由策略

  4. 智能负载均衡

  5. 高度可扩展能力

  6. 可视化的服务治理与运维

Dubbo总体大图

Dubbo总体分层:业务层,RPC层,Remote层。细分也可以分为10层  

第一章 Dubbo-高性能RPC通信框架

Dubbo核心组件

Dubbo总体调用过程

服务暴露过程:

  1. 服务端在框架启动时,会初始化服务实例

  2. 通常Proxy组件调用具体协议(Protocol),把服务端要暴露的接口封装成Invoker,然后转换成Exporter

  3. 这个时候框架会打开服务端口等并记录服务实例到内存中

  4. 最后通过Registry把服务元数据注册到注册中心

  1. 代理持有了一个Invoker对象,触发invoke调用

  2. 集群,从Directory获取所有可以调用的远程服务Invoker列表(一个接口可能有多个节点提供服务)

  3. 负载均衡,选出可用的Invoker

  4. 过虑器链,通常处理上下文,限流,计数等

  5. Client数据传输

  6. Codec接口私有协议构造

  7. 序列化

  8. 服务端收到数据包,使用Codec处理协议头及一些半包,粘包等

  9. 反序列化

  10. Requset会被分配到线程池中进行处理

  11. server处理请求

  12. 根据请求查找对应的Exporter(它内部持有Invoker),过虑器

  13. 具体接口,原路返回