目录
一. Dubbo:高性能RPC框架
1、什么是Dubbo?Dubbo的工作流程知道吗?
2、在Provider上可以配置的Consumer属性有哪些?
3、Dubbo启动时如果服务不可用怎么办?
4、Dubbo使用什么序列化框架和通信框架,都支持什么协议?
5、Dubbo的负载均衡方案?
6、Dubbo的容错方案?
二. Netty:高性能NIO框架
1. Netty是什么?
2. BIO、NIO和AIO的区别?
三. Nigix:高性能Web容器
四. Zookeeper:分布式协调服务
1、Zookeeper是什么?能做什么事情?
2、Zookeeper是怎么保证主从同步的?
3、Zookeeper是怎么选举的?
4、Zookeeper如果宕机了怎么办?
5、Zookeeper的Watcher机制是什么样的?
五. MQ:分布式消息中间件
1. 为什么使用MQ?MQ的优缺点是什么?
2. ActiveMQ、RabbitMQ、RocketMQ、Kafka的优缺点和适应场景?
3. MQ有哪些常见问题?如何解决?
4. 如何解决消息队列延时及过期问题?消息队列满了怎么处理?几百万消息队列积压了几小时怎么处理?
5. 如何保证MQ高可用?
6. 如果让你写一个消息队列,该如何进行架构设计?说说你的思路
六. Job:分布式定时任务
(一)XXL-Job
Dubbo是分布式系统中常用的RPC框架,可以帮我们做服务地址的管理、服务的注册与发现、服务监控等。
角色:Container-容器、Provider-服务提供方、Consumer-服务消费方、Register-注册中心、Monitor-监控器
超时时间、失败重试次数、负载均衡算法
Dubbo启动时会监测服务可用性,不可用的话会抛出异常,阻止Spring启动。
序列化框架:推荐Hessain,还有Dubbo,fastjson;通信框架:默认Netty;协议:Dubbo(推荐)、http、rest、redis等。
随机、权重随机、轮训等
默认的是失败自动切换,这台服务器请求失败自动请求其他服务器;
还有快速失败,失败了就结束了;还有失败自动重试,记录下失败,定时重新请求。
Netty是一个网络通信框架,一般用作基础通信组件。它封装了JDK的NIO,支持高并发,数据传输快,让我们使用起来更方便灵活。
BIO是同步阻塞IO,NIO是同步非阻塞IO,AIO是异步非阻塞IO。
Zookeeper是一个分布式协调框架,可以用来做服务注册中心、负载均衡、分布式协调、master选举、分布式锁等。
使用了原子广播机制,它的核心是ZAB协议,ZAB协议有两个模式,恢复模式和广播模式。
当leader不可用时,ZAB就进入了崩溃模式,新领导选取出来后,崩溃模式结束,进入广播模式;
广播模式,只有leader能够处理写请求,当leader在本机写完之后,用广播通知其他follower,如果超过半数的follower都返回ACK,则commit。
涉及到两个概念:
zxid:为了保证顺序性,每次更新请求都会有一个全局的时间戳,叫zxid
myid:每个集群的server都有一个唯一标识,server1,server2,12就是myid
PK规则:
每一轮投票,服务器都需要把自己的投票跟别人PK。PK规则是:先判断Zxid,谁的zxid大就投给谁,如果一样,则判断myid。
投票过程:假设有5台服务器
Zookeeper只要有超过半数的服务器可用,集群就可用。Zookeeper集群至少有3台服务器,如果是follower宕机还有其他follower可用,如果是leader宕机,就重新选取leader。
Zookeeper允许客户端向服务端注册一个watcher监听,如果服务端某个事件触发了watcher就通知客户端,客户端收到后回调服务端做相应的处理。
优点:
缺点:
参考文章:冒着期末挂科的风险也要给你看的消息队列和RocketMQ入门总结 - 掘金
Producer发送消息到Topic下的某一条Message Queue,Consumer订阅topic,消费的时候也会负载均衡的若干个Q,只拉去对应的Q消息
集群。
RabbitMQ一般使用镜像集群,也就是说创建的Queue存储在多台实例上,这样即使一台机器宕机了,其他机器仍然有这个Queue的信息。并且扩容也非常方便,只需增加机器,同步其他机器上的Queue即可。缺点是性能开销很大,消息要同步到所有机器上,导致网络带宽压力和消耗很重。
可以在后台配置job的执行策略,包括:执行时间、路由策略、失败策略、超时策略等