dubbo介绍
1. dubbo是什么?
DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。
简单讲:其实就是一个分布式远程调用服务的框架,在分布式服务框架中,远程服务调用(RPC)只是基石,当应用全面服务化后,服务治理才是关键,这才是Dubbo的一个工作重心。因此Dubbo主要用于服务化,以及SOA治理
备注:什么是soa?SOA强调的是一种架构思想,组件化的灵活的开发方式,举例,盖房子,原来是用代码一行行的累积,就像盖房子一块砖头一块砖头的砌墙,一片一片的加瓦。SOA架构的思想就主张不要再一块砖一片瓦的干,一面墙一个屋顶一根梁等等都是人家做好的,拿过来自己搭起来就把房子盖好了,需要每家的房子要求不一样再自己改,墙上开个窗,屋顶搞个烟囱都随你自己搞,自己搞的这部分就是需要你自己做造型砌砖的地方。好处就是开发效率高,系统稳定,实施维护便捷,不管是开发还是维护成本都低廉
*为什么要采用SOA架构思想,目前企业系统软件存在什么问题?
2. dubbo能做什么?
透明化的远程方法调用
–就像调用本地方法一样调用远程方法
–只需简单配置,没有任何API侵入。
软负载均衡及容错机制
–可在内网替代F5等硬件负载均衡器
服务自动注册与发现
–不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者
简单讲: 高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。
备注:为什么说高性能的NIO? NIO的工作原理:是一个线程在不停的循环检测监听到的事件,然后分别作出相应的处理。可是这种方式只适合那种处理过程时间短的情况,如果某一个操作处理的事件太长的话,则会让其他的事件一直处于等待状态,比如发送或者接收一个很大的文件,这样显然是很不合适的。
Ø 多协议
dubbo、Hessian、HTTP、RMI、WebService、Thrift、Memcached、Redis
在通信过程中,不同的服务等级一般对应着不同的服务质量,框架默认就是dubbo协议,也是官方推荐使用的协议,官推荐原因如下
dubbo协议是单一长连接, 减少连接握手验证等,从而加快响应速度,官方提供如果每服务每提供者每消费者使用单一长连接,如果数据量较大,可以使用多个连接
使用dubbo协议,一般部署要求消费者要比提供者的个数多,这样才能发挥充分利用提供者的资源
Ø 服务动态寻址和路由
Ø 软负载均衡与容错
Ø 分析与降级
3. dubbo适用于哪些场景?
Ø 当网站变大后,不可避免的需要拆分应用进行服务化,以提高开发效率,调优性能,节省关键竞争资源等。
Ø 当服务越来越多时,服务的URL地址信息就会爆炸式增长,配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。
Ø 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。
Ø 接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?等等……
在遇到这些问题时,都可以用Dubbo来解决。
4. 为什么选用dubbo?
备注:HSF主要是不免费
Spring cloud也是分布式服务框架,而且功能比较完善且在不断更新维护,在国外这个框架也很火热,但是针对目前的情况,要想用SpringCloud就得去深入学习,完全的搞懂每个功能组件的作用,这就要求需要读大量的英文文档,学习成本比较高!
5. 如何使用Dubbo进行开发?
使用dubbo开发项目,分三个包,如上图所示
Ø Consumer: 应用程序包(war),包中仅含前端静态资源和MVC中的控制层,只负责指挥。
Ø Provider: 服务程序包(war),包中仅含业务逻辑层和数据层,只负责处理业务逻辑。
Ø PAI: 主要起到一个桥梁的作用,是将服务端的服务抽出一个公共的接口包,提供给消费者
代码包结构如下
6. 运行模式
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
7. Web工程
以独立的应用形式提供远程服务,不依赖web容器,这是比较标准的服务提供形式,有3个子工程:
l api
描述:业务域对外提供的服务接口,参数类型
输出:独立jar,例如user-api.jar
l core
描述:业务域的模型,包括数据和行为,只关心领域内的数据和模型,不关心外部服务
输出:独立jar,例如user-core.jar,外部业务不能依赖该jar
l impl
描述:业务域的远程服务实现,负责服务启动停止,内部业务组装,参数转换
输出:***-assembly.tar.gz,输出是一个压缩包
8. 实际应用模式架构图
=