Dubbo是一个常用的分布式服务框架,
- 它致力于提供高性能、透明化的RPC远程服务方案。
- 学习Dubbo有助于提高企业级应用的开发效率,以及可通过简单的配置就可以实现负载均衡,提高服务的效率。
单一应用阶段(ORM为主):
- 对于访问流量小的网站或系统,只需要单一的应用架构即可,也就是只需要一个应用就能将所有的功能都聚集到一起,
- 减少部署的成本,这个时候,用于简化增删改查工作量的数据库访问框架(ORM对象关系映射框架,如Hibernate、MyBatis),会提高开发的效率。
垂直应用架构(MVC为主):
- 当访问量稍微增大以后,单一的应用架构就不能满足系统的日常需求,
- 我们需要将系统之间耦合度较低的模块拆分出来,来减少代码的冗余,提高效率。
- 此时,用于提升前端页面访问效率的Web框架应运而生(如Struts、SpringMVC),
- 与之前的ORM框架结合起来,共同形成了MVC架构的Web应用体系。
分布式服务架构(RPC为主):
- 当应用越来越多,应用和应用之间不断的交互,
- 此时就需要将核心的业务抽取出来,提供独立的服务,形成稳定的服务中心,使前端可以适应多变的市场需求。
- 此时,使用分布式服务框架是一个关键,而我们的Dubbo就是一个分布式服务框架。
流动计算架构(SOA为主):
- 当提供的服务越来越多,我们就需要一个中心,来对不同服务的负载进行评估,实时的调配资源,提高集群的应用率。
- 此时,资源的调度和治理中心就是关键。而Duboo支持了完整的RPC调用的支持,以及服务治理中心相关的功能。
Dubbo介绍:
- Dubbo是一个分布式服务框架,致力于提高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
- 与Dubbo同类型的框架还有Apache的Thrift、Hessian,Java原生的RMI,WebService,以及淘宝的HSF,京东的JSF。
- Apache的Thrift对多语言的支持比较好,但是负载均衡和SOA的治理这一块比较缺乏。
- 而Hessian和WebService都是传统的HTTP调用框架,由于HTTP调用时使用的多是短连接形式,大部分资源都被浪费在服务器的IO上。
- Java的RMI只支持Java语言,而且性能比较一般。
- 淘宝的HSF和京东的JSF都没有开源,
- 那么在开源框架中,Dubbo是一个比较优秀的分布式服务框架。
- Dubbo的线上版本比较稳定,社区文档多,运维方案比较成熟(admin控制台和monte监控平台)。
- Duboo支持拓展,目前,国内有许多家大型生产型应用互联网公司使用了Dubbo框架
Dubbo涉及的知识
- 远程调用:RMI、hassion、webService、thrift
- Dubbo都会在底层真正调用的时候,使用这些框架来做远程调用。
- 通信交互:HTTP、mina、netty
- mina与netty都是NIO的框架。
- 序列化:hessian2、java、json
- Dubbo默认使用hessian2
- 容器:jetty、spring
- Dubbo在容器方面支持像jetty这样的轻量级容器,或者spring这样的IOC容器。
- 多线程:异步,线程池
- Dubbo涉及了异步的调用和线程池的管理。
- 负载均衡:zookeeper、redis
- Dubbo大部分使用zookeeper来实现负载均衡。
使用Dubbo可以做什么
- 作为对内提供服务应用的容器
- 开发很多业务处理的应用,然后使用Duboo这种容器来提供服务。
- 拆分复杂Web应用到服务器容器
- 把大量的逻辑放置在服务提供的应用之中,使Web应用调用服务容器。
- 应用负载均衡协调
- 使用Duboo来实现软件的负载均衡和协调,这样不仅简化了配置,还大大简化了服务器的利用率。
- 应用服务治理
- 除了负载均衡,还可以做服务的降级、调用统计以及依赖关系的计算等等。
- 使用这些功能我们可以很清晰了解一个应用的依赖关系,以及不同应用调用的负载情况,
- 我们根据这些负载,来分配和计算,以增加对应的机器。
Dubbo架构
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次数和调用时间的监控中心。
调用流程
0.服务容器负责启动,加载,运行服务提供者。
1.服务提供者在启动时,向注册中心注册自己提供的服务。
2.服务消费者在启动时,向注册中心订阅自己所需的服务。
3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
Dubbo注册中心
- 对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀;
- 对于服务消费方,它最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。
- 而且,对于服务提供方和服务消费方来说,他们还有可能兼具这两种角色,即既需要提供服务,有需要消费服务。
- 通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。
- 服务注册中心可以通过特定协议来完成服务对外的统一。
Dubbo提供的注册中心有如下几种类型可供选择:
- Multicast注册中心
- Zookeeper注册中心
- Redis注册中心
- Simple注册中心
Dubbo优缺点
优点:
- 透明化的远程方法调用
- 像调用本地方法一样调用远程方法;
- 只需简单配置,没有任何API侵入。
- 软负载均衡及容错机制
- 可在内网替代nginx lvs等硬件负载均衡器。
- 服务注册中心自动注册 & 配置管理
- 不需要写死服务提供者地址,注册中心基于接口名自动查询提供者ip。
- 使用类似zookeeper等分布式协调服务作为服务注册中心,可以将绝大部分项目配置移入zookeeper集群。
- 服务接口监控与治理
- Dubbo-admin与Dubbo-monitor提供了完善的服务接口管理与监控功能,
- 针对不同应用的不同接口,可以进行 多版本,多协议,多注册中心管理。
缺点:
- 只支持JAVA语言