继续上一篇写了dubbo深入学习(1),主要介绍了dubbo是什么、这一篇主要是写dubbo能干什么?
2.dubbo能干什么?
当在小规模的服务的时候,应用通过RMI(远程方法调用)和Hessian9(Hessian是一个轻量级的remoting onhttp工具,使用简单的方法
提供了RMI的功能。)等工具,将一些服务进行简单的暴露,然后配置一些相关的URL地址进行调用,通过F5等硬件进行负载均衡的调
配就能达到我们的业务需求,但是,当我们的服务器越来越多的时候,如果还是通过配置URL的话,那样数量就是一个大问题,而且
如果在代码中配置的话,一个出错了,整个程序都运行出错,同时F5硬件负载均衡器的单点压力也很大,那么在这个时候,dubbo就
出现了,dubbo提供一个服务注册中心,可以动态的注册和发现服务,让服务的位置透明了,消费者去获取了服务提供方的地址,实
现软负载均衡,这样就降低了F5硬件负载均衡器的以来,当然也减少了一些成本,而且dubbo的Monitor提供了对消费者和提供者之间
的一些数据记录,记录了调用的次数,调用的时间等等一些信息,管理者可以根据次数和时间等信息判断是否应该增加服务器台数,
增加了对风险的控制。此外Dubbo通过长连接(长连接:不发:rst包,不进行四次握手,等待在同域名下继续用这个通道传输数据)
减少握手,通过NIO及线程池在单连接上并发拼包处理消息,通过二进制流压缩数据,比常规HTTP等短连接协议更快。
其实简单来说就可以概括为:
1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
在这里呢,我在学习dubbo的时候我的导师给我说了几个dubbo的重点优点,大概为一下几个方面
优点:
- dubbo序列化:阿里尚未开发成熟的高效java序列化实现,阿里不建议在生产环境使用它
- hessian2序列化:hessian是一种跨语言的高效二进制序列化方式。但这里实际不是原生的hessian2序列化,而是 阿里修改过的hessian lite,它是dubbo RPC默认启用的序列化方式
- json序列化:目前有两种实现,一种是采用的阿里的fastjson库,另一种是采用dubbo中自己实现的简单json库, 但其实现都不是特别成熟,而且json这种文本序列化性能一般不如上面两种二进制序列化。
- java序列化:主要是采用JDK自带的Java序列化实现,性能很不理想。
基于NIO的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小
3. 一个支持异步调用的RPC框架
异步IO。当代码需要执行一个耗时的IO操作时,它只发出IO指令,并不等待IO结果,然后就去执行其他代码了。一段时间后,
当IO返回结果时,再通知CPU进行处理。