Dubbo基础

    技术2022-07-21  67

    分布式RPC框架Apache Dubbo

    框架的演变

    单体框架 ——> 垂直框架 ——> SOA架构 ——>微服务架构

    1.1单体框架

    说明:全部功能集中在一个项目中。 优点:架构简单,前期开发成低,开发周期短,适合小型项目。 缺点:不利于开发,扩展和维护;技术栈受限,只能用一种语言;系统性能扩展只能通过扩展集群节点,成本高。???(为什么扩展集群节点成本高)

    1.2垂直框架

    说明:按照业务进行切割,形成单体的小项目。 优点:技术栈可扩展。 缺点:功能中集中在一个项目中,不利于开发,扩展和维护;扩张只能通过集群的方式;项目之间耦合性强,数据冗余,功能冗余。

    1.3SOA架构

    说明:SOA全称为Service-Oriented Architecture,及面向服务的架构,可以根据需求通过网络对松散耦合的粗细度应用组件进行分布式部署,组合和使用。一个服务通常以独立的形式存在于操作系统中。在项目与服务之间使用ESB(企业服务总线)的形式作为通信的桥梁。 优点:可复用性高,可维护性强。 缺点:难以确认模块或者功能或模块是否重复;抽取服务的粒度大;系统和服务之间耦合度高。

    1.4微服务架构

    说明:将系统服务层完全独立出来,抽取为一个个微服务。抽取的粒度更细,遵循单一原则,采用轻量级框架传输协议。 优点:服务拆分的粒度更细,有利于提高开发效率;针对不同的服务指定相应的优化方案;产品的迭代周期更短。 缺点:粒度太细导致服务太多,维护成本更高。

    什么是RPC

    RPC全称为remote procedure call,即远程过程调用。比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务器上的应用想调用B服务器上的应用提供的方法,由于两个应用不在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。

    需要注意的是RPC并不是一个具体的技术,而是指整个网络远程调用过程。

    RPC是一个泛化的概念,严格来说一切远程过程调用手段都属于RPC范畴。各种开发语言都有自己的RPC框架。Java中的RPC框架比较多,广泛使用的有RMI、Hessian、Dubbo等。

    Apache Dubbo基础

    1.1简介

    Apache Dubbo是一款高性能的Java RPC框架。可以和Spring框架无缝集成。

    1.2架构图

    0.服务容器负责启动,加载,运行服务提供者。 1服务提供者在启动时,向注册中心注册自己提供的服务。 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。 简单来说:服务启动 ——> 服务容器启动 ——> 服务提供者启动 在注册中心注册服务——> 消费者启动 订阅服务——> 随后基于负载均衡算法调用服务提供者——> moitor负责记录

    服务注册中心Zookeeper

    Dubbo官方推荐使用Zookeeper作为服务注册中心。

    Dubbo快速入门

    代码

    Dubbo管理控制台

    Dubbo相关配置

    包扫描
    <dubbo:annotation package="com.xxx.service" />
    协议

    一般在服务提供者一方配置,可以指定使用的协议名称和端口号。

    <dubbo:protocol name="dubbo" port="20880"/>

    其中Dubbo支持的协议有:dubbo、rmi、hessian、http、webservice、rest、redis等。

    启动时检查
    <dubbo:consumer check="false"/>

    上面这个配置需要配置在服务消费者一方,如果不配置默认check值为true。Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题。可以通过将check值改为false来关闭检查。

    建议在开发阶段将check值设置为false,在生产环境下改为true。

    负载均衡

    负载均衡(Load Balance):其实就是将请求分摊到多个操作单元上进行执行,从而共同完成工作任务。

    在集群负载均衡时,Dubbo 提供了多种均衡策略(包括随机、轮询、最少活跃调用数、一致性Hash),缺省为random随机调用。

    RandomLoadBalance : 随机RoundRobinLoadBalance : 轮询LeastActiveLoadBalance : 最少活跃调用数ConsistentHashLoadBalance : 一致性Hash //在服务消费者一方配置负载均衡策略 @Reference(check = false,loadbalance = "roundrobin") private HelloService helloService; //在服务提供者一方配置负载均衡 @Service(loadbalance = "roundrobin") public class HelloServiceImpl implements HelloService { public String sayHello(String name) { return "hello " + name; } }
    包扫描
    Processed: 0.008, SQL: 9