面试题 zookeeper 都有哪些使用场景? 面试官心理分析 现在聊的 topic 是分布式系统,面试官跟你聊完了 dubbo 相关的一些问题之后,已经确认你对分布式服务框架/RPC框架基本都有一些认知了.那么他可能开始要跟你聊分布式相关的其它问题了. 分布式锁这个东西,很常用的,你做 Java 系统开发,分布式系统,可能会有一些场景会用到.最常用的分布式锁就是基于 zookeeper 来实现的. 其实说实话,问这个问题,一般就是看看你是否了解 zookeeper,因为 zookeeper 是…
1.zookeeper介绍 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等. ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效.功能稳定的系统提供给用户. ZooKeeper包含一个简单的原语集,提供Java和C的接口. ZooKeeper代码版本中,提供了分布式…
1.分布式会话是什么? 首先,我们知道浏览器有个cookie,在一段时间内这个cookie都存在,然后每次发请求过来都带上一个特殊的jsessionid cookie,就根据这个东西,在服务端可以维护一个对应的session域,里面可以放点儿数据. 其次,单系统的时候session是不存在问题的. 分布式系统出现session问题的场景: 比如系统部署了3台机器,用户登录的时候,负载均衡到了其中的一台机器上面,登录成功在这台机器上面创了session,保存了用户的登录信息,然后用户进行了两外一个…
1.什么是并发竞争 就是多客户端同时并发写一个key,可能本来应该先到的数据后到了,导致数据版本错了.或者是多客户端同时获取一个key,修改值之后再写回去,只要顺序错了,数据就错了. 2.怎么解决 采用分布式锁+数据修改的时间戳 方案来解决. ①想要向缓存中写入数据时,必须要获得分布式锁,只有获得锁了才可以去进行缓存数据的写入,写入结束释放锁.就可以保证同时只有一个客户端去写缓存. ②可是并不能保证每个客户端获取锁的顺序.但是我们要写入缓存的数据都是从数据库查询出来的,数据库都是有这种数据的创建…
1.服务治理 服务治理主要作用是改变运行时服务的行为和选址逻辑,达到限流,权重配置等目的. ①调用链路自动生成 一个大型的分布式系统,会由大量的服务组成,那么这些服务之间的依赖关系和调用链路会很复杂,这就需要dubbo对多个服务之间的调用自动记录下来,生成一张图,显示出来. ②服务反复问压力以及时长统计 需要自动统计各个接口和服务之间的调用次数以及访问延时,而且要分成两个级别.一个级别是接口粒度,就是每个服务的每个接口每天被调用多少次,TP50,TP90,TP99,三个档次的请求延时分别是多少:…
1.什么是SPI机制 SPI 全称为 Service Provider Interface,是一种服务发现机制. SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类.这样可以在运行时,动态为接口替换实现类. 正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能.SPI 机制在第三方框架中也有所应用,比如jdbc. java定义了一套jdbc的接口,但是java是没有提供jdbc的实现类. 但是实际上项目跑的时候,要使用jdbc接口的哪些实…
1.dubbo的通信协议 ①dubbo协议 Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况. 特点 : dubbo缺省协议,使用的是基于netty+hessian的tbremoting交互. 连接个数:单连接. 连接方式:长连接. 传输协议:TCP. 传输方式:NIO异步传输. 使用范围:传入传出数据包较小,消费者数据比提供者多,单一消费者无法压满提供者,尽量不要用来传输超大数据. 使用场景:常规远程服务方法调用…
1.dubbo的工作原理 ①整体设计 图例说明: 图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口. 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI. 图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类. 图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行…
1.dubbo负载均衡策略 ①random loadbalance 策略 默认情况下,dubbo是random loadbalance 随机调用实现负载均衡,可以对provider不同实例设置不同的权重,会按照权重来进行负载均衡,权重越大分配的流量越高,一般就用这个默认的就可以了. ②roundrobin loadbalance策略 这个策略默认会将请求均匀的分布到各个provider上面,但是如果各个机器的性能不一样,很容易到杭州性能差 的机器负载过高. ③leastactive loadba…
分布式协调 这个其实是zk很经典的一个用法,比如,A系统发送个请求到mq,然后B拿到消息消费之后处理了.那A系统如何知道B系统的处理结果? 用zk就可以实现分布式系统之间的协调工作.A系统发送请求之后可以在zk上对某个节点的值注册个监听器,一旦B系统处理完了就修改zk那个节点的值,A立马就可以收到通知. 分布式锁 对某一个数据连续发出两个修改操作,两台机器同时收到了请求,但是只能一台机器先执行另外一个机器再执行. 那么此时就可以使用zk分布式锁,一个机器接收到了请求之后先获取zk上的一把分布式锁…