文章14 | 阅读 6821 | 点赞0
从本节开始,会开启一个新的系列博客:Dubbo,将会对Dubbo框架的基本用法、常用的配置属性、提供Rest形式的服务接口、监控中心、管理台、与springboot的整合等日常开发中常用的功能都会做出介绍,并且会用具体的代码案例进行演示。本节先会对Dubbo出现的背景做个介绍,然后引导出Dubbo框架的出现,接着会介绍下Dubbo的架构及各个组件的介绍。
笔者第一次接触Dubbo是在2015年的时候,当初只是照着别人的样例copy,定义一个接口,在xml文件配置一下,然后服务端就可以像调用本地方法一样调用了。当时也是刚毕业,开发经验比较少,对RPC是没有什么概念的,不知道为什么这样做,也不知道有什么好处。后来工作参与的一些开发项目中,也都或多或少的接触用到RPC框架,对于这种服务化的理念有了更多的认识。这两年java开发中最火的是什么——微服务,后端程序员不了解点儿微服务的东西都不好意思跟人聊天,哈哈!国内java开发圈中微服务使用最广泛的框架就是SpringCloud跟Dubbo,Dubbo比较专注于服务治理这块,而SpringCloud全家桶则提供了微服务的一整套解决方案,这里暂时先不对这两者的区别做探讨。
Dubbo早期在2014年10月更新到2.4.11之后停止更新了很长一段时间,中间当当网基于Dubbo做了一些扩展形成了DubboX,主要就是可以提供Rest的服务接口以及提供了Kryo序列化等功能。也许是受了SpringCloud这两年大火的刺激,Dubbo竟然在2017年9月开始了第一个重启更新的版本2.5.4,从这之后开始疯狂更新。。。。。。目前最新的版本已经来到了2.6.4,而且目前已经被捐献给了Apache(还是挺佩服阿里的,开源的不少项目都应用挺广泛的),现在仍在孵化当中。随着微服务的流行,Dubbo的使用也变得越来越广泛了,而且远程调用又是微服务的基础,所以感觉还是应该好好理解掌握的,笔者也就系统的重新学习了一下Duubo,写的不对的地方欢迎指正哈!
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。RPC(Remote Procedure Call)——远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。而Dubbo是RPC的一种实现,其他的还有java的RMI、Thrift、GRPC、Hessian等。
Dubbo官网地址也重新改版了,原来的官网已经不能访问了,新的地址为http://dubbo.apache.org/zh-cn/index.html,源代码地址为 https://github.com/apache/incubator-dubbo,有兴趣的小伙伴可以看看哦!
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。
单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
在大规模服务化之前,应用可能只是通过 RMI 或 Hessian 等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过 F5 等硬件进行负载均衡。
当服务越来越多时,服务 URL 配置管理变得非常困难,F5 硬件负载均衡器的单点压力也越来越大。 此时需要一个服务注册中心,动态的注册和发现服务,使服务的位置透明。并通过在消费方获取服务提供方地址列表,实现软负载均衡和 Failover,降低对 F5 硬件负载均衡器的依赖,也能减少部分成本。
当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。 这时,需要自动画出应用间的依赖关系图,以帮助架构师理清理关系。
接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器? 为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阈值,记录此时的访问量,再以此访问量乘以机器数反推总容量。
以上是 Dubbo 最基本的几个需求。
节点角色说明
节点 | 角色说明 |
---|---|
Provider | 暴露服务的服务提供方 |
Consumer | 调用远程服务的服务消费方 |
Registry | 服务注册与发现的注册中心 |
Monitor | 统计服务的调用次数和调用时间的监控中心 |
Container | 服务运行容器 |
调用关系说明
Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。
连通性
健壮性
伸缩性
升级性
当服务集群规模进一步扩大,带动IT治理结构进一步升级,需要实现动态部署,进行流动计算,现有分布式服务架构不会带来阻力。下图是未来可能的一种架构:
节点角色说明
节点 | 角色说明 |
---|---|
Deployer | 自动部署服务的本地代理 |
Repository | 仓库用于存储服务应用发布包 |
Scheduler | 调度中心基于访问压力自动增减服务提供者 |
Admin | 统一管理控制台 |
Registry | 服务注册与发现的注册中心 |
Monitor | 统计服务的调用次数和调用时间的监控中心 |
好了,关于Dubbo的基本介绍就先到这里,下一节开始进行Dubbo的实战使用。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/u012988901/article/details/84191814
内容来源于网络,如有侵权,请联系作者删除!