高可用
1.zooKeeper宕机与dubbo直连
zooKeeper相当于记录提供者地址,而dubbo连接过一次后生成本地缓冲
2.负载均衡(修改配置文件)
a.随机权重(默认)
b.基于权重轮训请求
c.最少活跃数(来访问请求时间段的服务器)
d.一致性hash(按照hash算法分布)
3.服务降级(在消费者层面)
当服务器压力剧增,根据业务服务,一些页面不处理,从而释放服务器资源。
a.强制返回null,不发起远程调用
b.超时返回null,网络超时,不可达
4.集群容错
当一个服务调用另一个服务失败后,做一些策略操作。
原理
1.BIO
非阻塞IO
2.NIO
selector选择器监听多个channel通道,某一个通道准备好就可以开线程执行,多路复用模型。
3.Netty基于多路复用–RPC框架原理
选择器生成任务队列,任务准备好就启动
4.dubbo原理
a.框架设计
b.启动解析、加载配置信息
--调用流程
1.服务容器负责启动,加载,运行服务提供者。
2.服务提供者在启动时,向注册中心注册自己提供的服务。
3.服务消费者在启动时,向注册中心订阅自己所需的服务。
4.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
--标签解析
1.容器启动,标签解析器(RootBeanDefintion)解析标签保存到指定的xxxConfig.class中
service--ServiceBean.class,reference---ReferenceBean.class
--服务暴露流程
afterPropertiesSet():
getMonitor()==null /Protocol
setMonitor(monitorConfig)
onApplicationEvent():事件回调
export() 服务暴露
doExportUrls()
loadRegistries(true)加载注册中心
doExportUrlsForProtocal()暴露dubbo端口
openServer():开启服务器
ProviderConsumerRegTable:set储存url和对应服务
c.