1.体验下分布式

单机

分布式

2.为什么要进行系统拆分?如何进行系统拆分?拆分后不用dubbo可以吗?





(3)拆分后不用dubbo可以吗?

3.说一下dubbo工作原理?注册中心挂了可以继续通信吗?说说一次rpc请求的流程?




4.dubbo支持哪些通信协议?支持哪些序列化协议?

4.1 dubbo支持的协议
- dubbo协议:默认就是走dubbo协议的,单一长连接,NIO异步通信,基于hessian作为序列化;适用传输数据量很小(每秒请求在100kb以内),但是并发量很高的场景。为了要支持高并发场景,一般是服务提供者就几台机器,但是服务消费者有上百台机器,可能每天调用量达到上亿次!此时用长连接最合适的,就是跟每个服务消费者维持一个长连接就可以,可能总共就100个连接,然后后面直接基于长连接NIO异步通信,可以支撑高并发请求。否则如果上亿次请求每次都是短连接的话,服务提供者会扛不住的,而且因为走的单一长连接,所以传输数据量太大的话,会导致并发能力降低。所以一般建议是传输数据量很小,支撑高并发访问。
- rmi协议:走java二进制序列化,多个短连接,适用于提供者数量和费者数量差不多的情况,主要用于文件的传输。
- hessian协议:走hessian序列化协议,多个短连接,适用于提供者数量比消者数量还多的情况,主要用于文件的传输。
- http协议:走json序列化
- webservice协议:走SOAP文本序列化
4.2 dubbo支持的序列化协议
dubbo实际基于不同的通信协议,支持hessian,java二进制序列化,json,SOAP文本序列化等序列化协议。hessian是默认的。
5.dubbo支持哪些负载均衡,高可用以及动态代理的策略?

5.1 dubbo负载均衡策略:
- RandomLoadBalance:随机调用负载均衡,默认情况下,dubbo是随机嗲用实现负载均衡的,可以对provider不同实例设置不同权重,然后按照权重来负载均衡,权重越大分配流量越高,一般就用这个默认的策略。
- RoundRobinLoadBlance:轮询调用,均匀地将流量打到各个机器上去,但是如果各个机器的性能不一样,容易导致性能差的机器负载过高。
- LeastActiveLoadBlance:最少活跃数调用,这个就是自动感知下,如果某个机器性能越差,那么接受的请求越少,越不活跃,此时就会给不活跃的性能差的机器更少的请求。
- ConsistentHash LoadBalance:一致性Hash算法,相同参数的请求一定会分发到同一个provider上去,provide挂掉的话,会基于虚拟节点均匀分配剩余的流量,抖动不会太大。如果你需要的不是随机负载均衡,是一类请求都到一个特定的节点,那么可以选择这个策略。
5.2 集群容错策略
- Failover Cluster - 失败自动切换,自动重试其它机器,默认策略,常用于读操作。
- Failfast Cluster - 快速失败,一次调用失败就立即失败,常用于写操作。
- Failsafe Cluster - 失败安全,出现异常时忽略掉,常用于不重要的接口调用。比如记录日志。
- Failback Cluster - 失败自动恢复,失败了后台记录请求,然后定时重发,比较适合写消息队列。
- Forking Cluster - 并行调用多个服务提供者,只要一个成功就立即返回。
- Broadcast Cluster - 传播,逐个调用所用的服务提供者。
5.3 dubbo动态代理策略
默认使用javassist动态字节码生成,创建代理类。也可以通过spi扩展机制配置自己的动态代理策略。
6.SPI时啥思想?dubbo的SPI机制时怎么玩的?









一脸懵逼,知道大概思想意思,具体实现还是不太懂,后续还得深入理解下
官方定义:
SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。SPI 机制在第三方框架中也有所应用,比如 Dubbo 就是通过 SPI 机制加载所有的组件。

总结:
其核心就是根据配置找到接口对应的实现类
- 比如java中定义的jdbc接口,但是没有实现类的,使用的时候mysql和oracle相应jar引入实现。
- dubbo的不同网络协议 protocol接口,META-INF/dubbo/internal/com.alibaba.rpc.Protocol文件里面配置了不同协议实现类
- 自行覆盖,在META-INF/services 文件夹下创建一个接口全限定名一样的文件,文件里面配置自己的接口实现。

7.基于dubbo如何做服务治理,服务降级以及重试?






(3)失败重试

8.分布式系统中接口的幂等性该如何保证?比如不能重复扣款?




9.分布式系统中的接口调用如何保证顺序性?


10.如何设计一个类似dubbo的rpc框架?架构上如何考虑?



11.说说zookeeper一般都有哪些使用场景?









12.分布式锁时啥?对比下redis和zk两种分布式锁的优劣?

12.1 redis分布式锁
方案一: SETNX



方案二: RedLock


12.2 zookeeper分布式锁



12.3redis分布式锁和zk分布式锁的对比

13.说说你们的分布式session方案时啥?怎么做的?


13.1tomcat+redis


13.2 spring session + redis

依赖:

spring 配置:


web.xml



14.了解分布式事务方案吗?你们都咋做的?有什么坑?

单机事务:

分布式事务:

14.1 两阶段提交方案/XA方案


14.2 TCC方案



14.3 本地消息表


14.4 可靠消息最终一致性方案


14.5 最大努力通知方案





15.如何设计要给高并发的系统架构




申明:内容来自网络,仅供学习使用
参考:https://apppukyptrl1086.pc.xiaoe-tech.com/detail/p_5d3114935b4d7_CEcL8yMS/6
Dubbo微服务框架详解
197

被折叠的 条评论
为什么被折叠?



