Dubbo-引言

51 阅读9分钟

跟孙哥学java

孙哥主页

什么是Dubbo

Dubbo(Apache Dubbo)是一个由阿里巴巴开源的高性能、轻量级的开源Java RPC 框架。RPC(远程过程调用)是一种通信协议,允许程序在网络中运行的不同计算机之间进行通信。Dubbo 的目标是提供一种简单、方便、高效的远程服务调用解决方案,它主要用于构建分布式服务架构。

以下是 Dubbo 的一些主要特点和功能:

  1. 服务治理: Dubbo 提供了丰富的服务治理功能,包括服务注册与发现、负载均衡、容错机制等,以确保分布式系统中的服务能够高效可靠地运行。

  2. 通信协议: Dubbo 支持多种通信协议,包括 Dubbo 协议、HTTP、REST 等,使得它能够适应不同的场景和需求。

  3. 负载均衡: Dubbo 内置了多种负载均衡算法,可以根据实际需求进行配置,以保证服务提供者之间的负载分布均衡。

  4. 容错机制: Dubbo 提供了多种容错机制,包括失败重试、失败自动切换、失败快速失败等,以提高系统的稳定性和可用性。

  5. 跨语言支持: Dubbo 不仅支持 Java,还提供了跨语言的支持,可以让不同语言编写的服务之间进行通信。

  6. 面向接口代理: Dubbo 使用面向接口的方式进行服务调用,提供了动态代理的实现,使得服务提供者和消费者的开发更加简便。 总体而言,Dubbo 是一个强大的分布式服务框架,被广泛应用于各种规模的分布式系统中,以提供高性能、可扩展、可靠的远程服务调用解决方案。

  • Dubbo3 已在阿⾥巴巴内部微服务集群全⾯落地,成功取代运⾏多年的HSF 框架。依托于Dubbo3,阿⾥提出了⾃⼰的微服务解决⽅案DNS
  • 经过孵化,Dubbo⽬前成为Apache的顶级项⽬。
  • 官⽅⽹站:dubbo.apache.org/zh-cn/
  • GitHub :github.com/apache/dubb…

SOA与微服务

到目前为止,SOA与微服务架构基本是一个概念了。

单体架构--- 单体架构(Monolithic Architecture)是一种软件架构设计模式,其中整个应用程序被设计和构建为一个单一的、统一的代码库。在单体架构中,所有的功能模块、组件和服务都被打包到同一个应用中,并通过共享的数据库进行数据交互。这种架构形式的应用程序通常包含一个前端用户界面、一个应用服务器和一个数据库。

以下是单体架构的一些主要特点:

  1. 单一代码库: 所有的功能模块和组件都在同一个代码库中,形成一个统一的整体。
  2. 紧耦合: 模块之间存在较高的耦合性,它们直接调用彼此的函数和方法。
  3. 单一数据库: 所有服务共享同一个数据库,数据在应用内部进行交互。
  4. 部署简单: 由于整个应用是一个单一的单元,部署相对简单,只需将整个应用部署到一个服务器或一组服务器上。
  5. 开发简便: 在单体架构中,由于所有的代码都在同一个代码库中,开发人员可以更容易地理解整个应用的逻辑,并进行开发和维护。 尽管单体架构有其优点,如简单性、开发速度快、易于理解和部署等,但随着应用规模的增长和需求的变化,它也面临一些挑战。其中一些挑战包括:
  6. 可扩展性: 随着用户和数据的增长,单体应用的扩展可能变得困难。对整个应用进行水平扩展(横向扩展)可能会面临一些限制。
  7. 灵活性: 单体架构可能不够灵活,当需要引入新技术、新服务或进行特定模块的更新时,可能需要修改整个应用。
  8. 复杂性: 随着应用的不断发展,单体应用的代码库可能变得庞大且难以维护。这可能导致开发变得复杂,代码质量难以保证。

单体架构的问题---

  1. 热点问题---某个子系统访问量大,导致其他子系统的访问也出现问题
  2. 扩展性差--不能精确的给一个访问量较大的模块增加机器
  3. 模块耦合--所有模块都在一个文件中,相互影响,如果修改一个代码,会影响其他的模块
  4. 维护部署成本高--每次修改一个模块的内容,整个系统都要重新启动--费时间
  5. 技术栈受限--必须使用同一种编程语言开发

为了解决单体架构存在的问题 单体架构--->水平扩展 水平扩展就是将一个单体项目横向扩展,也就是部署多个单体项目到多个tomcat上 水平扩展在一定程度上可以提高系统的性能和可伸缩性,但也需要考虑一些挑战,例如:

  • 共享状态和数据一致性: 在多个实例之间共享状态和数据时,需要确保数据的一致性。这可能涉及到使用分布式缓存、数据库同步等机制。
  • 横向扩展的限制: 某些应用可能并不容易横向扩展,尤其是在存在共享状态或紧密耦合组件的情况下。
  • 负载均衡的管理: 管理负载均衡器和实例的配置,确保它们能够有效地处理不断变化的负载。

总体而言,水平扩展是一种常见的应对单体应用系统负载增长的方法,但在实施时需要综合考虑系统的架构、性能需求以及可能遇到的挑战。

水平扩展--->垂直架构 垂直架构就是将前端门户与后端分别部署在两个不同的tomcat上 解决了子系统的热点问题,但模块的热点问题没有解决 子系统耦合度降低,模块之间仍然存在耦合 维护部署成本有所好转 技术栈,前端和后端的语言不要求统一

垂直架构--->RPC架构 image.png RPC架构--->SOA架构

SOA架构是RPC架构的演化。代表框架Dubbo

  1. RPC
  2. 服务治理
  3. ESB RPC架构的问题: 模块与模块之间存在耦合 image.png SOA架构---将服务拆分成多个模块 image.png 企业服务总线 ESB----可以解决不同语言之间的差异 image.png SOA---微服务架构 微服务是SOA架构的升级,在微服务体系统中,没有⼦系统了,全部都是服务化功能。微服务架构代表框架,SpringCloud,DNS 微服务架构是一种将应用程序设计为由一组小型、相互独立、可独立开发、部署和扩展的服务的软件架构风格。每个服务都有自己的业务逻辑,并通过明确定义的API(应用程序接口)进行通信。这与传统的单体架构相反,后者将所有功能和组件捆绑在一起形成一个单一的应用程序。

以下是微服务架构的一些主要特点和原则:

  1. 独立性: 微服务是相互独立的服务单元,每个服务都可以独立开发、测试、部署和扩展。这种独立性允许团队在不影响整个系统的情况下修改和更新单个服务。
  2. 分布式: 微服务架构通常是分布式的,每个服务都可以在不同的服务器上运行。服务之间通过网络进行通信,通常使用轻量级的通信协议(如HTTP或消息队列)。
  3. 自治性: 每个微服务都是自治的,它有自己的数据库、业务逻辑和用户界面。这种自治性使得团队能够独立地选择技术栈、开发工具和开发方法。
  4. 弹性和可伸缩性: 微服务架构使得系统更容易实现弹性和可伸缩性。每个服务可以独立地扩展,而不必影响整个系统。
  5. 有限上下文: 微服务通过有限上下文(Bounded Context)进行划分,每个微服务只关注于特定领域或业务问题。这有助于避免大型单一数据库和复杂的耦合关系。
  6. API 网关: 通常,微服务系统会使用API网关来管理对外部客户端的所有请求,该网关负责路由请求到适当的微服务。
  7. 去中心化治理: 微服务架构推崇去中心化的治理,使得各个服务能够独立演进和升级,而不需要集中式的管理。

微服务架构的优势包括:

  • 灵活性: 团队可以独立开发和部署各个微服务,提高了灵活性和快速交付的能力。
  • 可伸缩性: 微服务使得系统更容易扩展,因为可以只扩展需要增加处理能力的具体服务。
  • 技术多样性: 不同的微服务可以使用不同的技术栈,以满足各自的需求。
  • 容错性: 单个微服务的故障不会影响整个系统的运行,系统更具容错性。

然而,微服务架构也带来了一些挑战,包括服务间通信、数据一致性、部署和监控的复杂性等。因此,采用微服务架构需要权衡其优势和挑战,并根据具体业务需求来做出决策。 image.png

Dubbo3升级的核心内容

  1. 易用性

开箱即用 易用性高

  1. 超大规模微服务实践
    1. 高新能通信(Triple GRPC)
    2. 高可扩展性(SPI多种序列化方式,多种协议)
    3. 丰富的服务治理能力
    4. 超大规模集群实例水平扩展
  2. 云原生友好
    1. 容器调度平台(K8S)
    2. Service Mesh