• PRC:远程过程调用,是一个计算机的通信协议,需要运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外的为整个交互过程编程。面向对象就是远程方法调用;例如http,tcp、socket都是RPC协议;

    Dubbo框架学习

  • dubbo特性
    • 面向接口代理的高性能RPC调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。
    • 服务自动注册与发现:支持多种注册中心服务,服务实例上下线实时感知。
    • 运行期流量调度:内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。
    • 智能负载均衡:内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。
    • 高度可扩展能力:遵循微内核+插件的设计原则,所有核心能力如Protocol、Transport、Serialization被设计为扩展点,平等对待内置实现和第三方实现。
    • 可视化的服务治理与运维:提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数。
    • 注:
      • 传统负载均衡:当使用nginx做负载均衡时,当大量的服务器加入集群当中时,nginx需要修改配置,加入新加入集群的服务器的ip地址,人工成本较大;
      • zookeeper:当作注册中心,将所有的服务的服务器自动注册在注册中心,客户端进行负载均衡(随机,hash,轮询);
      • Service mesh:不需要修改业务代码,将一些调用的功能单独出来;
      • dubbo协议,基于netty实现,不同的协议适应不同的适用场景
      • 服务路由:不同地区节点的流量切换;
  • Dubbo框架学习

  • duobbo
    • Provider模块:提高API,实现API,暴露(启动tomcat,nettyServer),服务本地注册,服务远程注册中心注册
      • api 抽象接口
      • impl 具体实现
      • Provider

        Dubbo框架学习

        • 1、本地注册 {服务名:实现类}
          • LocalRegister类
            • 类的具体方法:

              Dubbo框架学习

            • 使用:
              • Dubbo框架学习

        • 2、远程注册 {服务名:List<URL>}---------------对应Registry模块
          • Dubbo框架学习

        • 3、启动tomcat
          • Dubbo框架学习

    • Consumer模块:通过接口名从注册中心获取服务地址和调用服务;
      • 使用动态代理增强,使用接口,直接调用其实现类的具体方法

        Dubbo框架学习

    • Registry模块:保存服务配置信息(服务名:List<URL>)
      • RemoteMapRegister类
        • Dubbo框架学习

    • RpcProtocol模块:基于Tomcat的HttpProtocol、基于Netty的DubboProtocol
      • http
        • HttpService:tomcat启动 +Servelet

          Dubbo框架学习

          Dubbo框架学习

          • 在Tomcat中加入Servlet
            • tomcat.addServlet(contextPath,"dispatcher",new DispatcherServlet())
            • context.addServletMappingDecoded("/*", "dispatcher") 所有的前端请求都以了被Servlet接收到,走DispatcherServlet中的service方法,然后被HttpServerHandler.handler进行处理
        • DispatcherServlet需要继承HttpServlet,重写service(HttpServletRequset req,HttpServiceletResponse resp)方法-----new HttpServerHandler().handler(req,resp)
        • HttpServerHandler------handler(HttpServletRequset req,HttpServiceletResponse resp)//处理请求和返回结果
          • Dubbo框架学习

        • HttpClient(通过http协议发送调用信息的客户端,并接受HttpServerHandler返回的数据)
          • Dubbo框架学习

    • FrameWork模块:框架整合
      • 代理工程类(对于接口,直接调用其实现的具体方法)
        • Dubbo框架学习

      • 定义URL类:(schema//hostname:port)
        • Dubbo框架学习

      • Invocation类(HttpClient需要发送的信息组合的对象)网络传输需要实现序列化接口
        • Dubbo框架学习

  • dubbo的协议扩展
    • 将所有协议的具体方法共同方法抽象出一个接口
    • 更改VM参数,使用工厂类进行自动选择创建相应的对象;
    • 若要加入新的协议类型,使用java spi机制:通过ServiceLoader 加载接口对应的实现类,需要在resources中建立文件夹META-INF,建立services文件,建立接口全路径名文件 (例如framework.Protocol)去指定具体实现类;

      Dubbo框架学习

    • dubbo spi------引入的实现类需要其他接口的具体实现类(依赖注入和切面)<更加高效>-----------注册中心和协议的调用选择

相关文章: