dubbo总结
dubbo官网配置
https://dubbo.apache.org/docs/v2.7/user/references/protocol/rest/
底层使用netty框架,解决了jdk nio中空轮询问题。简化jdk nio 复杂操作。屏蔽selector channel buffer 难于理解的API操作。
Dubbo内置了4种负载均衡策略:
RandomLoadBalance:随机负载均衡。随机的选择一个。是Dubbo的默认负载均衡策略。
RoundRobinLoadBalance:轮询负载均衡。轮询选择一个。
LeastActiveLoadBalance:最少活跃调用数,相同活跃数的随机。活跃数指调用前后计数差。使慢的 Provider 收到更少请求,因为越慢的 Provider 的调用前后计数差会越大。
ConsistentHashLoadBalance:一致性哈希负载均衡。相同参数的请求总是落在同一台机器上。
Dubbo3.0和2.0的主要区别包括以下几个方面:
注册模型的改变:在Dubbo2.X版本中,服务是以接口的方式注册到注册中心,每个接口都需要单独注册,这会给注册中心带来很大的压力。Dubbo3.0引入了服务级别的注册,只需将应用名和对应的IP、端口注册到注册中心,无需对每个接口进行单独注册。为了解决消费端如何找到具体服务的问题,Dubbo3.0引入了元数据服务的概念,消费端通过注册中心获取服务列表,然后通过元数据服务映射具体某个接口进行调用。
Triple协议:Dubbo3.0默认使用Triple协议,该协议基于HTTP2.0,支持gRPC的远程调用,具有更高的兼容性和性能。Triple协议的引入使得Dubbo能够更好地与其他微服务框架如Spring Cloud、Kubernetes Service、gRPC等进行互通。
服务柔性:Dubbo3.0增强了服务的柔性,采用面向失败设计的理念,提供了精准容量评估、自适应限流和负载均衡等功能。这使得服务在单一视角下更加稳定,分布式视角下性能更优。
云原生支持:Dubbo3.0规划了两种形态的Service Mesh方案:基于Sidecar的和无Sidecar的Proxyless Mesh,这使得Dubbo能够更好地适应云原生环境。
扩展点分离:Dubbo3.0的Maven依赖发生了变化,不再包含所有资源的all-in-one包,一些可选依赖如registry-etcd、rpc-hessian等作为独立组件发布,用户需要根据实际需求在pom.xml中添加相应的依赖。
参照:https://mp.weixin.qq.com/s/gJ4L2o8fAXnTTxBdyxMJWA
Dubbo的核心功能主要包含:
1.远程通讯:dubbo-remoting模块, 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
2.集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
3.自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
调用过程图:
•1.Proxy持有一个Invoker对象,使用Invoker调用
•2.之后通过Cluster进行负载容错,失败重试
•3.调用Directory获取远程服务的Invoker列表
•4.负载均衡
◾用户配置了路由规则,则根据路由规则过滤获取到的Invoker列表
◾用户没有配置路由规则或配置路由后还有很多节点,则使用LoadBalance方法做负载均衡,选用一个可以调用的Invoker
•5.经过一个一个过滤器链,通常是处理上下文、限流、计数等。
•6.会使用Client做数据传输
•7.私有化协议的构造(Codec)
•8.进行序列化
•9.服务端收到这个Request请求,将其分配到ThreadPool中进行处理
•10.Server来处理这些Request
•11.根据请求查找对应的Exporter
•12.之后经过一个服务提供者端的过滤器链
•13.然后找到接口实现并真正的调用,将请求结果返回