Dubbo是由阿里巴巴开源的透明的高性能分布式RPC框架,基于dubbo协议实现,底层通信方式是基于TCP长连接,传输方式是NIO实现,提高服务的性能。主要有三个核心特性:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
首先,项目启动时,会加载配置文件进行初始化,服务提供方会向注册中心注册自己提供的服务;当消费者启动时,会向注册中心订阅自己所需要的服务,如果服务提供方有数据变更,注册中心会基于长连接形式推送变更数据至消费方(异步)。
推荐:
默认采用dubbo协议:
连接个数:单连接;连接方式:长连接;传输方式:NIO异步传输;传输协议:TCP;序列化:默认采用Hessian二进制。
适用范围:传入传出参数数据包较小(100K以内),消费者个数大于提供者个数,尽量不要用dubbo协议去传输大文件、视频以及大的字符串数据。
dubbo特性:适用于数据量少大并发的场景。
1、有注册中心的情况下,可通过dubbo提供的dubbo admin控制台去设置路由规则,来指定固定ip消费方访问。
2、在直连的情况下,可在服务提供方设置令牌(token),此时服务消费方需要提供对应的令牌进行访问。
3、Dubbo添加服务ip白名单,防止非法调用。
我们尽量把需要事务的方法加在一个service层中,避免分步式事务。Dubbo底层是基于socket连接,如果多个线程同时远程调用提供者方法,这时会建立client server之间的socket连接上会有很多双方发的数据包传递,并不难保证前后顺序,容易造成乱七八糟,服务提供方处理完后,会将处理结果发送到client,client收到很多数据包,怎么保证哪个响应数据包对应的原先哪个线程调用的吗?
这时就要使用到分布式唯一RequestID,去保证其唯一性,消费端调用时,会将唯一ID传给服务提供者;然后,服务提供者处理完,会将该ID一起响应给client(这样就能保证其前后消费顺序)。
目的:维持provider和customer之间的通信
实现:dubbo默认心跳时间为1s,超过心跳时间没有收到消息,就发送心跳消息,如果超过3次心跳没有收到心跳消息,provider会关闭channel,而customer会进行重连;不管是provider还是customer的心跳机制检测都是通过启动定时任务方式实现的。
推荐:
可以的,因为服务消费方启动时会订阅注册中心里面所需要的服务,此时会把服务订阅的相关信息写入到本地缓存(也就是磁盘),下次与服务提供方远程调用时,会直接从本地缓存获取提供方信息进行通信。若此时服务提供方有数据变动或有新的服务,消费方是无法获取的,对其他新的服务是不能够进行正常通信的。
RandomLoadBalance
(默认随机):可按权重配置,随机分配策略;
RoundRobinLoadBalance
(轮询):按照顺序去访问每个节点,容易造成请求堆积过多,请求分布不均匀;
LeastActiveLoadBalance
(最少活跃调用数):是指各服务请求前后调用计数差,相同活跃数,随机分配;由于各服务里面都维护活跃数计数器,用来记录当前同时处理的并发请求数,若该值越小,说明该服务处理请求很快或者当前机器负载比较低,会优先选择分配到该服务。如果一个服务处理速度很慢,会堆积起来,同时处理请求数比较多,此时活跃调用数越大,该服务会接收到的请求比较少,因为请求数与活跃数成反比。
ConsistentHashLoadBalance
(一致性hash):相同参数总是发送到同一个提供者,如果这个提供者挂掉了,它会根据它的虚拟节点,平摊到其它服务者,不会引起巨大的变动
服务端:
<-! 服务端服务级别配置></-!>
<dubbo:service interface="接口名" loadbalance="roundrobin"/>
<-! 服务端方法级别配置></-!>
<dubbo:service interface="接口名">
<dubbo:method name="方法名" loadbalance="均衡策略名"/>
</dubbo:service>
客户端:
<-! 客户端服务级别配置></-!>
<dubbo:reference interface="接口名" loadbalance="roundrobin"/>
<-! 客户端方法级别配置></-!>
<dubbo:reference interface="接口名">
<dubbo:method name="方法名" loadbalance="均衡策略明"/>
</dubbo:reference>
搭建集群注意点(2点):1、同一集群环境中应用名必须保持一致
2、端口必须要不同
官方说明:
Dubbo官方文档指明,dubbo是一个基于java的高性能、轻量级的rpc框架。他只是对rpc进行了封装,使其更高效而已,再牛皮也只是一个通信协议。
SpringCloud官方文档是这样写的:SpringCloud专注于为典型的用例和扩展机制提供良好的开箱即用体验,以涵盖其他情况。重点在提供良好的开箱即用体验。
所以不同于dubbo只是对通信协议的封装,springcloud的目标是快速搭建一个框架,并提供很多易用的组件,使服务能快速的运行起来,以使用户有一个很好的服务体验。所以Spring Cloud的定位是微服务架构下的一站式解决方案。
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
Linux内核是广被使用的操作系统,从嵌入式家用设备,航空航天设备到超级计算机,到处都有Linux内核的身影,这归功于Linux内核丰富的配置带来的巨大灵活性。网络虚拟化和软件定义网络的发展,也从另外一个方面证实了在网络设备如此专用的领域,Linux内核也能发挥巨大作用,并且对网络设备领域带来可编程性的巨大便利,极大促进了网络设备领域的发展,5G网络堆栈建立在这个范式之上。随着无人驾驶和物联网等实
从一则用户案例说起某金融用户问,数据库用服务器本地盘性能好还是外置存储好?直觉上,本地盘路径短性能应该更好。然而测试结果却出乎意料:同等中等并发压力,混合随机读写模型,服务器本地SSD盘合计4万IOPS水平,时延竟然高达6ms,回退到机械磁盘时代的水平,而外置存储同样并发压力下30万IOPS,稳定时延在0.2ms。I/O模型TDSQL+本地SSD盘时延TDSQL+外置全闪存存储时延8KB顺序读0.
添加我为好友,拉您入交流群!
请使用微信扫一扫!