Dubbo工做原理缓存
工做流程:安全
1)第一步,provider向注册中心去注册
2)第二步,consumer从注册中心订阅服务,注册中心会通知consumer注册好的服务
3)第三步,consumer调用provider
4)第四步,consumer和provider都异步的通知监控中心网络
能够,由于刚开始初始化的时候,消费者会将提供者的地址等信息拉取到本地缓存,因此注册中心挂了能够继续通讯。并发
项目一启动,加载配置文件的时候,就会初始化,服务的提供方ServiceProvider就会向注册中心注册本身提供的服务,当消费者在启动时,就会向注册中心订阅本身所须要的服务,若是服务提供方有数据变动等,注册中心将基于长链接的形式推送变动数据给消费者。
默认使用Dubbo协议:负载均衡
链接个数:单链接 链接方式:长链接 传输协议:TCP 传输方式:NIO异步传输 序列化:Hessian二进制序列化 适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者没法压满提供者,尽可能不要使用dubbo协议传输大文件或超大字符串 使用场景:常规远程服务方法调用 从上面的适用范围总结,dubbo适合小数据量大并发的服务调用,以及消费者机器远大于生产者机器数的状况,不适合传输大数据量的服务好比文件、视频等,除非请求量很低。
Dubbo的安全性如何获得保障:异步
a.在有注册中心的状况下,能够经过dubbbo admin中的路由规则,来指定固定ip的消费方来访问 b.在直连的状况下,经过在服务的提供方中设置密码(令牌)token,消费方须要在消费时也输入这 个密码,才可以正确使用。 Dubbo添加服务ip白名单,防止不法调用
Duubo中如何保证分布式事务?socket
通常状况下,咱们尽可能将须要事务的方法放在一个service中,从而避开分步式事务。 Dubbo底层是基于socket: Socket通讯是一个全双工的方式,若是有多个线程同时进行远程方法调用,这时创建在client server之间的socket链接上会有不少双方发送的消息传递,先后顺序也多是乱七八糟的,server处理完结果后,将结果消息发送给client,client收到不少消息,怎么知道哪一个消息结果是原先哪一个线程调用的? 答:使用一个ID,让其惟一,而后传递给服务端,再服务端又回传回来,这样就知道结果是原先哪一个线程的了。
Dubbo的zookeeper作注册中心,若是注册中心所有挂掉,发布者和订阅者还能通讯吗?
能够通讯的,启动dubbo时,消费者会从zk拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用;
注册中心对等集群,任意一台宕机后,将会切换到另外一台;注册中心所有宕机后,服务的提供者和消费者仍能经过本地缓存通信。服务提供者无状态,任一台 宕机后,不影响使用;服务提供者所有宕机,服务消费者会没法使用,并没有限次重连等待服务者恢复;
挂掉是没关系的,但前提是你没有增长新的服务,若是你要调用新的服务,则是不能办到的。分布式
随便写点什么,而后就发布了!