Dubbo
Dubbo
- 为什么出现Dubbo
- 随着现在互联网行业的发展,越来越多的框架、中间件、容器等开源技术不断地涌现,更好地来服务于业务,解决实现业务的问题。
- 随着业务的发展、用户量的增长,系统数量增多,调用依赖关系也变得复杂,为了确保系统高可用、高并发的要求,系统的架构也从单体时代慢慢迁移至服务SOA时代,根据不同服务对系统资源的要求不同,我们可以更合理的配置系统资源,使系统资源利用率最大化。
- 系统服务的演变过程
- 单一应用框架(ORM)
- 将所有功能部署在一起,减少部署节点和成本。
- 垂直应用架构(MVC)
- 应用拆成互不相干的几个应用,以提升效率
- 分布式应用架构
- 核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求
- 流动计算架构
- 用于提高机器利用率的资源调度和治理中心(SOA) 是关键
- 单一应用框架(ORM)
- 电商系统的演变可以看出应用系统架构演变的过程:
- Dubbo是什么
- 一款分布式服务框架
- 高性能和透明化的RPC远程服务调用方案
- SOA服务治理方案
- Dubbo的架构
- 上图的流程:
- 0.服务容器负责启动,加载,运行服务提供者。
- 1.服务提供者在启动时,向注册中心注册自己提供的服务。
- 2.服务消费者在启动时,向注册中心订阅自己所需的服务。
- 3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
- Dubbo注册中心
- 注册服务:
- 对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀;
- 消息订阅
- 对于服务消费方,它最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。
- 两个身份都有:
- 对于服务提供方和服务消费方来说,他们还有可能兼具这两种角色,即既需要提供服务,又需要消费服务。
- 注册服务:
- 注册中心的目的:
- 通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。
- Dubbo提供的注册中心有几种类型:
- Multicast注册中心
- Zookeeper注册中心
- Redis注册中心
- Simple注册中心
- Dubbo优点:
- 透明化的远程方法调用
- 像调用本地方法一样调用远程方法;只需简单配置,没有任何API侵入
- 软负载均衡及容错机制
- 可在内网替代nginx lvs等硬件负载均衡器
- 服务注册中心自动注册 & 配置管理
- 不需要写死服务提供者地址,注册中心基于接口名自动查询提供者ip
- 使用类似zookeeper等分布式协调服务作为服务注册中心,可以将绝大部分项目配置移入zookeeper集群
- 服务接口监控与治理
- Dubbo-admin与Dubbo-monitor提供了完善的服务接口管理与监控功能,针对不同应用的不同接口,可以进行 多版本,多协议,多注册中心管理
- 透明化的远程方法调用
- Dubooq缺点
- 只支持Java语言
- 使用Dubbo步骤
- 安装Zookeeper启动;
- 创建Maven项目,构建:Dubbo+Zookeeper+Spring
- 安装Dubbo-admin,监控
- Dubbo注册中心为什么采用Zookeeper?
- Zookeeper是一个分布式的服务框架,是树型的目录服务的数据存储,能做到集群管理数据 ,这里能很好的作为Dubbo服务的注册中心。
- Dubbo能与Zookeeper做到集群部署,当提供者出现断电等异常停机时,Zookeeper注册中心能自动删除提供者信息,当提供者重启时,能自动恢复注册数据,以及订阅请求。
- 安装Zookeeper
- 在Zookeeper官网中下载Zookeeper发行包并解压:
- 复制Zookeeper配置文件
- 将Zookeeper安装目录的conf子文件夹中的zoo_sample.cfg复制一份并重命名为zoo.cfg
- 运行Zookeeper
- 执行Zookeeper安装(解压)目录中bin子文件夹的zkServer.cmd启动Zookeeper
- 利用Maven创建Dubbo项目,主要分为以下组成部分:
- 项目Dubbo-consumer : 调用远程服务;
- 项目Dubbo-provider : 提供远程服务。
- Provider和Consumer需要提供相同的业务服务接口
- 为项目编辑pom文档
- 服务的提供者和消费者需要依赖的库相同,主要有Netty依赖、Zookeeper依赖、ZookeeperClient依赖、Dubbo依赖、Spring依赖等
-
Provider中需要提供业务接口的实现:
-
- Provider在Spring容器中声明Dubbo的服务:
-
Provider启动远程服务
-
-
Consumer在Spring容器中声明需要调用的服务:
-
- Consumer调用远程服务:
- Dubbo管理控制台功能:
- 路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡。
- Dubbo控制台的使用
- 下载dubbo-admin,将dubbo-admin的war包发布到tomcat中,再运行tomcat即可,缺省用户名和密码均为root:
- 总结Dubbo
- Dubbo是一款分布式服务框架,一个高性能和透明化的RPC远程服务调用方案,一个SOA服务治理方案。
- Dubbo每天为2千多个服务提供大于30亿次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点以及别的公司的业务中。