主要功能

六大能力.png

基础功能RPC

  • 多协议(序列化、传输、RPC)
  • 服务注册和发现
  • 配置、元数据管理
  • 框架分层设计,可任意组装和扩展

基础RPC.png

扩展功能

  • 集群,负载均衡
  • 高可用,治理和路由
  • 管控,监控和控制台

    技术原理

    10X2整体架构

    整体架构.png

    框架设计

    框架设计.png

    泛化引用

  • 效率低

  • 不安全
  • 破坏了OOP

泛化引用.png

隐式传参

  • 对http协议是通过增加header实现
  • 对其他协议要侵入修改报文

隐式传参数.png

mock

mock.png

应用场景

分布式服务化改造

  • 业务系统规模复杂,垂直拆分改造
  • 数据相关改造
  • 服务设计
  • 团队配合
  • 开发、测试、运维

    开放平台

  • 将公司的业务能力开放出来,形成开放平台,对外输出业务或技术能力

    BFF

  • 作为前端使用的后端

  • 一般不太建议使用Dubbo

    服务化中台

  • 业务能力包装成API

  • 业务线调用中台服务,组织自己的业务

    最佳实践

    开发分包

  • 将服务接口、服务数据模型、服务异常均放到API包中,符合分包原则

    • 重用发布等价原则(REP)
    • 共同重用原则(CRP)
  • 服务接口尽可能大粒度,每个服务方法代表一个功能,而不是一个功能的一个步骤,否则面临分布式事务问题
  • 不建议使用过于抽象的通用接口,如Map query(Map),语义不明确不便于维护
  • 服务接口建议以业务场景为单位划分,对相近业务做抽象,防止接口数量爆炸

    环境隔离与分组

  • 环境隔离方式

    • 部署多套
    • 多注册中心机制
    • group机制
    • 版本机制
  • 接口增加方法,模型增加字段可向后兼容
  • 如果不兼容的修改要通过版本号进行隔离

    参数配置

  • 通用参数以consumer端为准,如果consumer没有配置,使用provider的配置

  • 建议provider端配置的consumer端参数有
    • timeout
    • retries
    • loadbalance
    • actives:consumer端最大并发调用限制,当consumer对一个服务的并发调用达到上限后,新调用会阻塞直到超时,可以配置在方法或服务上
  • 建议provider端配置的provider参数有

    • threads:线程池大小
    • executes:一个服务提供者并行执行请求上限,可配置在方法或服务上

      容器化部署

  • 注册的IP的问题有两个解决方法

    • 使用宿主机网络 docker -net
    • 参数指定IP和端口的环境变量 -e
      1. - DUBBO_IP_TO_REGISTRY 注册到注册中心的IP
      2. - DUBBO_PORT_TO_REGISTRY 注册到注册中心的端口

      运维和监控

  • DubboAdmin功能比较简单

  • 公司需要定制,对接自己的监控系统
  • 可观测性

    • tracing(apm的 skywalking,pinpoint,cat…)
    • metrics( prometheus,grafana…)
    • logging( ELK )

      分布式事务

  • 柔性事务(TCC,AT)

    • seata
    • hmily
  • 不支持XA

    重试与幂等

  • 服务调用失败默认重试2次,如果接口不是幂等的,会造成业务重复处理

  • 如何设计幂等接口
    • 去重(bitmap)
    • 类似乐观锁机制