* 架构模式:ORM(单一的)、MVC(垂直的)、RPC(分布式的)、SOA(面向服务的)
*
* ?阐述以下,Dubbo的工作原理?
* ☞ 它包含的角色有,Provider、Container、Registry、Consumer、Monitor、
* ‣ 服务容器负载启动,加载,运行服务的提供者;
* ‣ 服务提供者在启动时,向注册中心,注册自己提供的服务;
* ‣ 服务消费者在启动时,向注册中心订阅自己所需的服务;
* ‣ 注册中心返回服务提供者地址列表给消费者,如果有变更注册中心将基于长连接推送变更数据给消费者;
* ‣ 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选择另一台调用;
* ‣ 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心.
*
* ?Dubbo 支持哪些注册中心?
* 1、Multicast 注册中心:广播
* 2、Zookeeper 注册中心:<推荐使用>
* 3、Nacos 注册中心: 借助dubbo-registry-nacos实现
* 4、Redis注册中心: 发布订阅
* 5、Simple注册中心:Spring 注册中心本身就是一个普通的Dubbo服务,可以减少第三方依赖,使整体通讯方式一致。
*
* ?Dubbo的注册中心:
* Multicast 注册中心,不需要启动任何中心节点,只要广播地址一样,就可以相互发现.
* Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为
* --Dubbo 服务注册中心,工业强度较高,可用于生产环境,并推荐使用.
*
*
* --一Consumer 可以有多个Provider给它提供服务,Consumer 究竟选择那个服务,这样就涉及了它的负载均衡策略-
*
* ❖ Dubbo 支持的协议:
* ‣ 1、Dubbo协议,
* -Dubbo是缺省协议,使用基于 mina 1.1.7 和 Hessian 3.2.1 的 tbremoting 交互。
* ◆ 连接个数:单连接
* ◆ 连接方式:长连接
* ◆ 传输协议:TCP
* ◆ 传输方式:NIO异步传输
* ◆ 序列化:Hessian 二进制序列化
* ◆ 适用范围:传入传出参数数据包较小,消费化比提供者个数多,单一消费者无法压满提供者,
* -尽量不要用 dubbo 协议传输大文件或超大字符串.
* ◆ 适用场景:适合小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的常规远程服务方法调用。
*
* ‣ 2、RMI协议,
* -RMI协议采用JDK标准的java.rmi.* 实现,采用阻塞式短连接和JDK标准序列化方式。
* ◆ 连接个数:多连接
* ◆ 连接方式:短连接
* ◆ 传输协议:TCP
* ◆ 传输方式:同步传输
* ◆ 序列化:Java 标准二进制序列化
* ◆ 适用范围:传入传出参数数据包大小混合,消费者与提供个数差不多,可传文件。
* ◆ 适用场景:常规远程服务方法调用,与原生RMI服务互操作。
*
* ‣ 3、Hessian协议
* -Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务,
* Dubbo 缺省内嵌 Jetty 作为服务器实现,Dubbo的Hessian协议可以和原生Hessian服务互操作。
* ◆ 连接个数:多连接
* ◆ 连接方式:短连接
* ◆ 传输协议:HTTP
* ◆ 传输方式:同步传输
* ◆ 序列化:Hessian二进制序列化
* ◆ 适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。
* ◆ 适用场景:页面传输,文件传输,或与原生hessian服务互操作。
*
* ‣ 4、HTTP协议
* -基于HTTP表单的远程调用协议,采用Spring的HttpInvoker实现。
* ◆ 连接个数:多连接
* ◆ 连接方式:短连接
* ◆ 传输协议:Http
* ◆ 传输方式:同步传输
* ◆ 序列化:表单序列化
* ◆ 适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。
* ◆ 适用场景:需同时给应用程序和浏览器 JS 适用的服务。
*
* ‣ 5、WebService协议
* -基于WebService的远程调用协议,基于Apache CXF[1]的frontend-simple 和 transports-http实现。
* 可以与原生 WebService 服务互操作。
* ◆ 连接个数:多连接
* ◆ 连接方式:短连接
* ◆ 传输协议:HTTP
* ◆ 传输方式:同步传输
* ◆ 序列化:SOAP 文件序列化
* ◆ 适用场景:系统集成,跨语言调用
*
* ‣6、Thrift协议
* ‣7、MemCached协议
* ‣8、Redis协议
* ‣9、Grpc协议
*
* ?Dubbo支持的序列化方式
* ‣ dubbo序列化:阿里未开发成熟的高效Java序列化实现.阿里不建议在生产环境适用它。
* ‣ hessian2序列化:hessian是一种跨语言的高效二进制序列化方式。dubbo RPC默认启用的序列化方式,
* ‣ json序列化:目前有两种实现,一种是采用阿里的fastJson库,另一种是采用Dubbo中自己实现的简单JSON库,
* ‣ Java序列化:主要采用JDK自带的Java序列化实现,性能很不理想。
*
* ?Dubbo支持那些负载策略?
* ‣ Dubbo 需要对服务消费者的调用请求进行分配和,避免少数服务提供者负载过大。
* ‣ 服务提供者负载过大,会导致部分请求超时。
* ‣ Dubbo提供了4种负载均衡实现:
* ① RandomLoadBalance : 基于权重随机算法的。
* ② LeastActiveLoadBalance : 基于最少活跃调用数算法的。
* ③ ConsistentHashLoadBalance : 基于Hash一致性的。
* ④ RoundRobinLoadBalance : 以及基于加权轮询算法的。
*
* ?灰色发布
* ?Dubbo服务是如何上线的?
* ◆ 生产环境下,Dubbo上线需要遵循灰色发布的原则,Dubbo进行灰度发布是用服务分组或多版本实现的。
* ◆ 当一个接口实现,出现不兼容升级时,可以用版本号或者分组来过度,版本号不同的服务相互间不引用。
* ◆ 可以按照以下的步骤进行版本迁移
* -在低压力的时间段,先升级一半提供者为新版本,
* -再将所以消费者升级为新版本,
* -然后将剩下的一半提供者升级为新版本.
Dubbo的工作原理/Dubbo支持哪些注册中心/Dubbo的注册中心\Dubbo支持的协议Dubbo服务是如何上线的灰色发布
最新推荐文章于 2024-07-01 11:44:21 发布