1.注册中心
1.1 Zookeeper注册中心
可以用于生产的注册中心服务级别,zk本身支持cp服务级别,保重服务的一致性,建立长连接机制,进行实时推送服务状态情况。本身带有选举算法和同步一致性,故此功能稳定,可配合集群功能,failover机制进行故障切换,保证服务一致性。建议使用dubbo-2.23版本以上。服务的稳定性有赖于注册中心的稳定性。
1.2 Redis注册中心
Redis自身高强度的读写速度以及集群模式的构建,数据安全和稳定性的保障,内存以及持久化的机制保证数据的完整性等。采用客户端双写的集群方式进行构建注册中心,性能高。可以用于生产级别。但是必须要求服务器时间同步,保证心跳检测去除过期数据。
1.3 Multicast注册中心
去中心化,内置服务机制,无需外置注册中心即可实现调用,依赖于网络拓扑和路由,跨机房或者跨网断,会出现无法注册情况。一般用于开发测试级别
1.4 Simple注册中心
DogFooding服务,自身作为注册中心,其实本身也是一个标准的RPC服务,暂时只是作为测试,不支持集群同时也无法解决单点问题。
2.健康中心
2.1 Simple健康中心
不支持集群,采用Jfreechart报表,宕机不会影响RPC服务。
3.Rpc服务协议
3.1 Dubbo服务协议
Dubbo服务协议也是最常用的服务协议,采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用)。在大文件传输的时候,单一长连接会成为瓶颈问题。可用于生产级别。
3.2 Rmi服务协议
基于原生java rmi服务功能,建立远程方法调用,基于Tcp协议,建立操作可能会因为3+4问题造成性能问题。偶尔连接失败,需要重建stub服务。可以作为生产级别
3.3 Hessian服务协议
与原生Hessian框架进行兼容操作,基于Http服务协议,频繁创建连接和释放链接是其瓶颈问题,需要hessian框架的支持,可用用于生产级别。
3.4 Rest服务协议
4.传输协议
4.1 Netty Transporter
JBoss服务的NIO框架,性能较好,一次请求进行两次服务事件处理,需要屏蔽无用事件。可用用于生产
4.2 Mina Transporter
老牌NIO,稳定,消息队列为进行及时派送的时候,会出现FullGC服务问题。可以用于生产
4.3 Grizzly Transporter
sun的NIO框架,应用于Glashfish服务器,无法扩展线程池,以及filter无法拦截下一个filter。测试
5.序列化服务
5.1 Java原生服务
性能较差,java原生支持,可用于生产
5.2 Hessian 序列化
性能较好,多语言支持,Hessian版本兼容不好,各个版本都不容易见人,dubbo内置3.2.1hessian源码。容易起冲突。生产
5.3 Dubbo 序列化
内置POJO传送服务类元信息不进行传送,故此在采用大量pojo对象传输时候,性能较好。试用
5.4 JSON序列化
纯文本序列化,默认为fastjson,多语言支持,但是性能较差。可用于生产。
6 代理对象生成
6.1 Javassist-ProxyFactory
通过字节码生成代替反射,性能较好,依赖于永久性存储区大小,支持生产。
6.2 Java-ProxyFactory
jdk原生支持,性能较差,支持生产。
7 失败执行策略
7.1 FailOver
基本用于在失败故障之后,进行切换其他服务,通常用于读取数据操作,推荐使用。重试机制会导致出现延长时间调用。
7.2 FailFast
基本上会在失败故障之后,立刻失败,返回错误,通常用于写数据操作,对于那些非幂等的数据操作。
7.3 FailSafe
基本上会在失败故障之后,忽略执行的错误或者异常,会出现调用信息失败!
7.3 FailBack
基本上会在失败故障之后,会进行相关的操作保存失败后的请求信息,等待故障恢复后,进行定时重发,一般用于消息队列或者服务调用重试、事务关系的相关重试保证最终一致性的。
8.负载均衡策略
8.1 Random loadbalance
随机性质的调用服务,按照权重设置随机概念进行分配,
8.2 RoundRobin loadbalance
轮询方式进行,按照公约后的权重分配设置轮询比率。
8.3 LeastActive loadbalance
最少活跃调用次数,进行调用前后的计数差,根绝调用计数差,分配服务调用,使得调用满的服务分配给更少的服务调用。
8.4 ConsistentHash loadbalance
一致性Hash算法,是根据不同的参数分摊到不同的服务,根绝hash算法分配到不同的服务。
网友评论