Thrift
Dubbo的Thrift协议基于原生Thrift扩展,添加了service name、magic number等头信息,需使用Thrift IDL编译生成Java代码。依赖libthrift 0.8.0,配置统一端口,支持RPC调用,但不传递null值,与原生Thrift不兼容。详见示例。
4.Cluster
本文深入解析Dubbo集群容错机制,围绕Cluster核心概念,结合Directory、Router、LoadBalance,详解其如何将多个Invoker伪装为单一入口并实现容错。重点剖析9种Cluster实现类:如Failover(失败重试)、Failfast(快速失败)、Forking(并行调用)、Broadcast(广播调用)等,分别适用于读写场景、通知更新、日志记录等不同业务需求。通过源码逻辑与流程图结合,揭示各策略内部实现机制及适用场景,帮助开发者合理配置容错策略,提升系统稳定性与性能。
3.Hessian
Hessian 1协议基于HTTP通信,采用Servlet暴露服务,Dubbo内置Jetty支持。支持与原生Hessian服务互操作,多连接短连接,同步传输,Hessian二进制序列化,适用于参数较大、提供者较多场景,如页面及文件传输。需实现Serializable,限制自定义集合类。配置简单,支持多端口与直连。
2.RMI
RMI协议基于JDK的java.rmi.*实现,采用短连接、TCP传输和Java标准序列化,支持多连接同步调用,适用于常规远程方法调用及与原生RMI互操作。需注意:传参需实现Serializable接口,超时需通过JVM参数设置。若依赖老旧common-collections包,存在反序列化安全风险,建议升级至安全版本。支持Spring兼容模式。
2.Directory
本文解析Dubbo中Directory接口的两大实现类:StaticDirectory与RegistryDirectory。前者Invoker由构造传入,不支持动态变化,多用于多注册中心引用;后者通过NotifyListener回调机制,实现注册中心变更时自动更新methodInvokerMap,支持动态服务发现,是集群容错的核心组件之一。
负载均衡算法
本文介绍负载均衡常用算法:随机、轮询及其加权版本,最小活跃数动态分配请求,源地址哈希确保IP固定路由,一致性哈希提升节点变动时的稳定性。各算法适用于不同场景,如性能均等、权重差异、实时负载或请求粘性需求,助力系统高效稳定运行。(238字)
Http
基于HTTP表单的远程调用协议,采用Spring HttpInvoker实现,支持多短连接、同步传输,序列化为表单格式。适用于参数大小混合、提供者多于消费者的服务场景,可被应用程序和浏览器JS共用,支持URL或表单调用,不支持文件传输。要求参数符合Bean规范,推荐使用Servlet Bridge模式部署,需与Servlet容器端口及上下文路径一致。
Day01
Day01:微服务并非绝对优于单体,需结合业务场景。简单应用单体更优,复杂系统适合微服务。常用中间件如Nacos、OpenFeign、Gateway等。Nacos支持心跳机制与主动检测,临时实例异常剔除,非临时则保留。对比Eureka,Nacos在服务发现、健康检测、集群模式上更具优势。负载均衡常用轮询算法。