分布式框架——Dubbo入门篇

112 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

👨‍🎓作者:生无clean

🏦仓库:GithubGitee

✏️博客:CSDN掘金InfoQ云+社区

🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。

☠️每日毒鸡汤:好的容貌和很多钱,是进入上流社交活动的通行证。

Dubbo是一套PRC框架。既然是框架,我们可以在框架结构高度,定义Dubbo中使用的通信协议,使用的序列化框架技术,而数据格式由Dubbo定义,我们负责配置之后直接通过客户端调用服务端代码。
简单来说,Dubbo是PRC概念的实现。

Dubbo

一、前言

1.1 什么是分布式框架

  • 分布式框架是若干个独立系统的集合,但是用户使用起来像是在使用一套系统。

1.2 为什么需要分布式系统

  • 随着系统规模的逐步扩大和业务的复杂,单台计算机扛不住像双十一那样的流量,此时就需要将一个系统分开成多个模块分别部署到不同的计算机上来分担流量的压力。

1.3 应用架构的发展演变

单一架构 : 当网站流量很小的时候,我们将所有的应用(业务)放到一台服务器上,打包运行即可,开发简单,部署简单。但是扩展性差,不容易维护,性能提升难。

垂直应用架构 :将大应用拆分为多个小应用(一般按照业务拆分),根据不同的访问频率决定各自业务部署的服务器数量。页面一改,可能造成整个项目重新部署,业务和界面没有分离开,随着业务种类的增加,怎么解决这个业务之间相互调用问题,订单服务器和用户服务器交互效率的问题。

分布式架构 :将业务拆分后,用某种方式实现各个业务模块的远程调用和复用,这时一个好的 RPC(远程调用过程) 框架就决定了你的分布式架构的性能,怎么调用,何时调用,服务器挂了怎么办....我们需要一个框架来帮助我们解决这个问题。

二、Dubbo

2.1 Dubbo概念

  • Dubbo是一个高性能的 RPC 框架,解决了分布式中的调用问题。

优点:

  • 解决了分布式系统中相互调用的问题。

缺点:

  • 假设有100台服务器,50台用户业务服务器,50台订单业务服务器,但是上线之后发现,用户服务器使用率很小,但是订单服务器压力很大,最佳配比应该是4:1,这时候就需要我们还有一个统一管理的调度中心。

2.2 为什么Dubbo新能高

高性能要从底层的原理说起,既然是一个RPC框架,主要干的就是远程过程(方法)调用,那么提升性能就要从最关键、最耗时的两个方面入手:序列化和网络通信。

  • 序列化: 在学习Java网络开发的时候,我们知道本地的对象要在网络上传输,必须要实现 Serializable 接口,也就是必须序列化。我们序列化的方案很多:xml、json、二进制流...其中效率最高的就是二进制流(因为计算机就是二进制的)。然后Dubbo采用的就是效率最高的二进制。
  • 网络通信: 不同于 HTTP 需要进行7步走(三次握手四次挥手),Dubbo采用 Socket 通信机制,一步到位,提升了通信效率,并且可以建立长连接,不用反复连接,直接传输数据。

2.3 Dubbo的发展历史

  • dubbo之前一直都作为Alibaba公司内部使用的框架。
  • 2011年,dubbo被托管带了 GitHub上(开源)。
  • 2014年11月底发布了2.4.11版本之后宣布停止更新。此后一段时间很多公司开源了自己基于Dubbo的变种版本(例如:当当网的 dubbo X,网易考拉的 Dubbo K)。
  • 2017年SpringCloud横空出世,Douub感觉到了压力后连续更新了几个版本。
  • 2018年,阿里联合当当网将 Dubbo 和 Dubbo X合并,发布了2.6版本。
  • 2018年阿里将 Dubbo 贡献给了 Apacha 基金会,代表中从面向国内到面向全球了。
  • 2018除夕夜至今,Apache维护和更新 Dubbo。

2.3 Apache Duboo

  • Apache Duboo 是一款好性能、轻量级的开源 Java RPC 框架。它提供了三大核心能力:面向接口的远程方法调用、智能容错和负载均衡,以及服务自动注册和发现。
  • Dubbo是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案、服务治理方案。

2.4 Dubbo特性

2.5 Dubbo RPC框架

  • 框架结构

  • Provider : 生产者。生产者负责生产信息。
  • Container : 容器。在初始化的时候需要把生产者生产的信息放入到容器中,来启动这个服务,Dubbo和Spring是无缝对接的,此时就可以完全理解为放入到Spring的容器中。
  • Registry : 注册中心。当启动服务之后需要到注册中心中进行注册声明。如果有变更,注册中心将基于长连接推送变更数据给消费者。
  • Consumer : 消费者。消费者也需要放入到spring容器中的,消费者会去注册中心中订阅自己需要的服务。当在注册中心找到对应的服务的时候,会把服务的地址返回给消费者,此时消费者就可以使用这个地址去寻找生产者中对应的服务进行消费使用。
  • Monitor :监控中心。服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

2.6 Dubbo支持的协议

  • dubbo、hessian、rmi、http、webservice、thrift、memcached、redis。
  • dubbo官方推荐使用 dubbo 协议。dubbo协议默认端口是 20880。