阿里P8架构师谈:Dubbo的详细介绍、设计思路、以及4大适用场景

Dubbo是什么?

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)。

阿里P8架构师谈:Dubbo的详细介绍、设计思路、以及4大适用场景

其核心部分包含:

1. 远程通讯:

提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

2. 集群容错:

提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

3. 自动发现

基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

Dubbo能做什么?

1.透明化的远程方法调用

就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。

2.软负载均衡及容错机制

可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

3. 服务自动注册与发现

不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

Dubbo采用全spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

Dubbo的架构和设计思路

Dubbo框架具有极高的扩展性,主要采用微核+插件体系,并且文档齐全,很方便二次开发,适应性极强。

Dubbo的总体架构,如图所示:

Dubbo框架设计一共划分了10个层,而最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层。图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口, 位于中轴线上的为双方都用到的接口。

Dubbo框架设计一共划分了10个层:

  1. 服务接口层(Service):该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。
  2. 配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类。
  3. 服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory。
  4. 服务注册层(Registry):封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory、Registry和RegistryService。可能没有服务注册中心,此时服务提供方直接暴露服务。
  5. 集群层(Cluster):封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router和LoadBalance。将多个服务提供方组合为一个服务提供方,实现对服务消费方来透明,只需要与一个服务提供方进行交互。
  6. 监控层(Monitor):RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Monitor和MonitorService。
  7. 远程调用层(Protocol):封将RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。
  8. 信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。
  9. 网络传输层(Transport):抽象mina和netty为统一接口,以Message为中心,扩展接口为Channel、Transporter、Client、Server和Codec。
  10. 数据序列化层(Serialize):可复用的一些工具,扩展接口为Serialization、 ObjectInput、ObjectOutput和ThreadPool。

和淘宝HSF相比,Dubbo的特点是什么?

1. Dubbo比HSF的部署方式更轻量

HSF要求使用指定的JBoss等容器,还需要在JBoss等容器中加入sar包扩展,对用户运行环境的侵入性大,如果你要运行在Weblogic或Websphere等其它容器上,需要自行扩展容器以兼容HSF的ClassLoader加载,而Dubbo没有任何要求,可运行在任何Java环境中。

2. Dubbo比HSF的扩展性更好,很方便二次开发

一个框架不可能覆盖所有需求,Dubbo始终保持平等对待第三方理念,即所有功能,都可以在不修改Dubbo原生代码的情况下,在外围扩展,包括Dubbo自己内置的功能,也和第三方一样,是通过扩展的方式实现的,而HSF如果你要加功能或替换某部分实现是很困难的,比如支付宝和淘宝用的就是不同的HSF分支,因为加功能时改了核心代码,不得不拷一个分支单独发展,HSF现阶段就算开源出来,也很难复用,除非对架构重写。

3. HSF依赖比较多内部系统

比如配置中心,通知中心,监控中心,单点登录等等,如果要开源还需要做很多剥离工作,而Dubbo为每个系统的集成都留出了扩展点,并已梳理干清所有依赖,同时为开源社区提供了替代方案,用户可以直接使用。

4. Dubbo比HSF的功能更多

除了ClassLoader隔离,Dubbo基本上是HSF的超集,Dubbo也支持更多协议,更多注册中心的集成,以适应更多的网站架构。

Dubbo适用于哪些场景?

阿里P8架构师谈:Dubbo的详细介绍、设计思路、以及4大适用场景

1.RPC分布式服务

当网站变大后,不可避免的需要拆分应用进行服务化,以提高开发效率,调优性能,节省关键竞争资源等。

比如:为了适用不断变化的市场需求,以及多个垂直应用之间数据交互方便,我们把公共的业务抽取出来作为独立的模块,为其他的应用提供服务,系统逐渐依赖于抽象和rpc远程服务调用。

2.配置管理

当服务越来越多时,服务的URL地址信息就会爆炸式增长,配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。

3.服务依赖

当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。

4.服务扩容

接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?等等……

在遇到这些问题时,都可以用Dubbo来解决。


money.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

巨省显存的重计算技巧在TF、Keras中的正确打开方式

一只小狐狸带你解锁 炼丹术&NLP 秘籍作者:苏剑林(来自追一科技,人称“苏神”)前言在前不久的文章《BERT重计算:用22.5%的训练时间节省5倍的显存开销(附代码)》中介绍了一个叫做“重计算”的…

论文浅尝 | 用可微的逻辑规则学习完成知识库推理

Citation:Fan Yang,Zhilin Yang, William W. Cohen. Differentiable Learning of Logical Rules for Knowledge Base Reasoning. ICLR 2017.动机本文提出了一个可微的基于知识库的逻辑规则学习模型。现在有很多人工智能和机器学习的工作在研究如何学习一阶逻辑规则&…

一点关于cloze-style问题的简谈

一个小任务:给出一个问题和诺干个候选句子,从候选句子中选出答案,有没有好的实现方案? 一个小任务:类似于:“中国最大的内陆湖是哪个?”给出候选句子1.”中国最大的内陆湖,就是青海湖…

中文词语概念上下位图谱项目

HyponymyExtraction 项目地址:https://github.com/liuhuanyong/HyponymyExtraction HyponymyExtraction and Graph based on KB Schema, Baike-kb and online text extract, 基于知识概念体系,百科知识库,以及在线搜索结构化方式的词语上下位…

POJ 1007 DNA排序解题

题目链接 http://poj.org/problem?id1007 C代码实现 #include<string> #include<iostream> using namespace std; struct DNAdata //定义结构体 {char name[51];double sum;DNAdata(){sum 0;} }; void swapDNA(DNAdata *a, DNAdata *b) {DNAdata tempDNA;tempDN…

DeepMatch:用于推荐广告的深度召回匹配算法库

一只小狐狸带你解锁 炼丹术&NLP 秘籍前言今天介绍一下我们的一个开源项目DeepMatch&#xff0c;提供了若干主流的深度召回匹配算法的实现&#xff0c;并支持快速导出用户和物品向量进行ANN检索。非常适合同学们进行快速实验和学习&#xff0c;解放算法工程师的双手&#xf…

史上最全Spring面试71题与答案

1.什么是spring? Spring是个java企业级应用的开源开发框架。Spring主要用来开发Java应用&#xff0c;但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发&#xff0c;并通过POJO为基础的编程模型促进良好的编程习惯。 2.使用Spring框架的好处…

论文浅尝 | 近期论文精选

本文转载自公众号 PaperWeekly, 对我们近期的论文浅尝进行了精选整理并附上了相应的源码链接&#xff0c;感谢 PaperWeekly&#xff01;TheWebConf 2018■ 链接 | https://www.paperweekly.site/papers/1956■ 解读 | 花云程&#xff0c;东南大学博士&#xff0c;研究方向为自然…

海马体what where记忆推理模型

Generalisation of structural knowledge in theHippocampal-Entorhinal systemhttps://www.groundai.com/project/generalisation-of-structural-knowledge-in-the-hippocampal-entorhinal-system/海马 - 内嗅系统结构知识的泛化 实体概念信息和位置及虚拟位置信息组成记忆保存…

快速排序quicksort算法细节优化(一次申请内存/无额外内存排序)

文章目录1.只申请一次内存&#xff0c;避免多次递归调用时反复的申请和释放内存&#xff0c;提高程序运行效率2.不申请内存&#xff0c;在原数组上直接排序优化比较总结对链接中快速排序进行代码优化 https://blog.csdn.net/qq_21201267/article/details/80993672#t6 1.只申请…

在深度学习顶会ICLR 2020上,Transformer模型有什么新进展?

一只小狐狸带你解锁炼丹术&NLP秘籍大数据文摘出品来源&#xff1a;medium编译&#xff1a;一一、AndyICLR是机器学习社群最喜爱的会议平台之一。如今&#xff0c;机器学习领域的会议已成为预印本里论文质量的标志和焦点。但即使这样&#xff0c;论文的发表数量还是越来越庞…

领域应用 | 人工智能+知识图谱:如何规整海量金融大数据?

本文转载自公众号&#xff1a;恒生技术之眼。21世纪以来&#xff0c;人类社会信息资源的开发范围持续扩大&#xff0c;经济、社会信息随着经济活动加剧得到空前的开发&#xff0c;信息资源总量呈爆炸式增长&#xff0c;我们从最初的“信息匮乏”一步踏入到“信息过量”时代。个…

神经网络不应视为模型,推理过程当为机器学习问题一等公民

首发于论智关注专栏写文章神经网络不应视为模型&#xff0c;推理过程当为机器学习问题一等公民编者按&#xff1a;Microsoft Semantic Machines资深研究科学家、UC Berkeley计算机科学博士Jacob Andreas指出&#xff0c;神经网络不应视为模型&#xff0c;因为神经网络的模型和推…

2019最全BAT资深Java面试题答案合集,建议收藏~

马上进入求职招聘高峰&#xff0c;总结了一份BAT&#xff08;阿里、百度等&#xff09;资深Java相关的面试题答案合集给到大家。 该板块的各面试章节&#xff0c;后续会持续迭代更新最新一线互联网公司的面试题目&#xff0c;建议收藏该页面&#xff0c;不定期更新查看~ Java…

中国古代诗词文本挖掘项目

PoemMining 项目地址&#xff1a;https://github.com/liuhuanyong/PoemMining Chinese Classic Poem Mining Project including corpus buiding by spyder and content analysis by nlp methods, 基于爬虫与nlp的中国古代诗词文本挖掘项目 项目介绍 中国古代诗词文化无疑是…

推荐系统的价值观

一只小狐狸带你解锁炼丹术&NLP秘籍 前言 推荐系统作为满足人类不确定性需求的一种有效工具&#xff0c;是具有极大价值的&#xff0c;这种价值既体现在提升用户体验上&#xff0c;又体现在获取商业利润上。对绝大多数公司来说&#xff0c;提升用户体验的最终目标也是为了获…

POJ1003/1004/1005/1207/3299/2159/1083/3094/2388解题(刷一波水题)

POJ 1003 题目链接 http://poj.org/problem?id1003 大意&#xff1a;长度1/21/3…1/n&#xff0c;给定长度值&#xff0c;求n #include<iostream> using namespace std; int main() {float len 0,sum;int n;while(cin >> len && len ! 0){for(n2,sum0;s…

论文浅尝 | 远程监督关系抽取的生成式对抗训练

动机远程监督关系抽取方法虽然可以使用知识库对齐文本的方法得到大量标注数据&#xff0c;但是其中噪声太多&#xff0c;影响模型的训练效果。基于 bag 建模比基于句子建模能够减少噪声的影响&#xff0c;但是仍然无法克服 bag 全部是错误标注的情形。为了换机噪声标注&#xf…

谷歌最强NLP模型BERT官方代码来了!GitHub一天3000星

新智元报道 来源&#xff1a;GitHub 作者&#xff1a;Google Research 编辑&#xff1a;肖琴 【新智元导读】谷歌AI团队终于开源了最强NLP模型BERT的代码和预训练模型。从论文发布以来&#xff0c;BERT在NLP业内引起巨大反响&#xff0c;被认为开启了NLP的新时代。 BERT的官方…

Java经典基础与高级面试36题和答案

在Java面试的首轮&#xff0c;经常会问很多关于Java面试基础以及高级的问题&#xff0c;今天收集相关Java面试36题和答案分享出来。 1.”static”关键字是什么意思&#xff1f;Java中是否可以覆盖&#xff08;override&#xff09;一个private或者是static的方法&#xff1f; …