Apache Dubbo 架构与实战

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

Dubbo 是一款 高性能的Java RPC 框架

项目架构演变过程

随着互联网的发展,用户群体逐渐壮大,网站的流量成倍增长,常规的单体架构已无法满足请求压力暴增和业务的快速迭代,架构的变化势在必行。

单体架构

单体架构所有模块和功能都集中在一个项目中 ,部署时也是将项目所有功能部整体署到服务器中。如下图:
在这里插入图片描述

  • 优点
    • 小项目开发快 成本低
    • 架构简单
    • 易于测试
    • 易于部署
  • 缺点
    • 大项目模块耦合严重 不易开发 维护 沟通成本高
    • 新增业务困难
    • 核心业务与边缘业务混合在一块,出现问题互相影响

垂直架构

根据业务把项目垂直切割成多个项目,因此这种架构称之为垂直架构

为了避免上面提到的那些问题,我们开始做模块的垂直划分,做垂直划分的原则是基于业务特性,核心目标,第一个是为了业务之间互不影响,第二个是在研发团队的壮大后为了提高效率,减少之间的依赖。
在这里插入图片描述

  • 优点

    • 系统拆分实现了流量分担,解决了并发问题
    • 可以针对不同系统进行优化
    • 方便水平扩展,负载均衡,容错率提高
    • 系统间相互独立,互不影响,新的业务迭代时更加高效
  • 缺点

    • 服务系统之间接口调用硬编码
    • 搭建集群之后,实现负载均衡比较复杂
    • 服务系统接口调用监控不到位 调用方式不统一
    • 服务监控不到位
    • 数据库资源浪费,充斥慢查询,主从同步延迟大

分布式架构(SOA )

SOA全称为Service Oriented Architecture,即面向服务的架构 。它是在垂直划分的基础上,将每个项目拆分出多个具备松耦合的服务,一个服务通常以独立的形式存在于操作系统进程中。各个服务之间通过网络调用,这使得构建在各种各样的系统中的服务可以 以一种统一和通用的方式进行交互。

我们在做了垂直划分以后,模块随之增多,系统之间的RPC逐渐增多,维护的成本也越来越高,一些通用的业务和模块重复的也越来越多,这个时候上面提到的接口协议不统一、服务无法监控、服务的负载均衡等问题更加突出,为了解决上面的这些问题,我们将通用的业务逻辑下沉到服务层,通过接口暴露,供其他业务场景调用。同时引入了阿里巴巴开源的Dubbo,一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现
在这里插入图片描述
解释说明:

  • 分层: 按照业务性质分层 每一层要求简单 和 容易维护

    • 应用层: 距离用户最近的一层 也称之为接入层 使用tomcat 作为web容器 接收用户请求 使用下游的dubbo提供的接口来返回数据 并且该层禁止访问数据库
    • 业务服务层:根据具体的业务场景 演变而来的模块 比如 简历投递 职位搜索 职位推荐等
    • 基础业务层:招聘业务的核心是账号 简历 公司 职位,这一层 是与业务无关的模块 是一些通用的服务,这类服务的特点: 请求量大 逻辑简单 特性明显 功能独立
      • 消息服务(发邮件 短信 微信)
      • 附件解析 50% 自己上传附件 需要解析成pdf
    • 存储层:不同的存储类型 Mysql Mongodb ES fastDFS
  • 分级:按照业务性质分层 同一层的业务也要做好分级 依据业务的重要性进行分级 按照二八定律网站80%的流量 都在核心功能上面 要优先保证核心业务的稳定。

  • 隔离:不同性质 不同重要性的业务做好隔离 包括 业务 缓存 DB 中间件 都要做好隔离 比如 核心业务的数据库 要和活动相关的数据库隔离

  • 调用 :总体上调用要单向 可以跨层调用 但不能出现逆向调用

  • 优点

    • 服务以接口为粒度,为开发者屏蔽远程调用底层细节 使用Dubbo 面向接口远程方法调用屏蔽了底层调用细节
    • 业务分层以后架构更加清晰 并且每个业务模块职责单一 扩展性更强
    • 数据隔离,权限回收,数据访问都通过接口 让系统更加稳定 安全
    • 服务应用本身无状态化 这里的无状态化指的是应用本身不做内存级缓存 而是把数据存入db
    • 服务责任易确定 每个服务可以确定责任人 这样更容易保证服务质量和稳定
  • 缺点

    • 粒度控制复杂 如果没有控制好服务的粒度 服务的模块就会越来越多 就会引发 超时 分布式事务等问题
    • 服务接口数量不宜控制 容易引发接口爆炸 所以服务接口建议以业务场景进行单位划分 并对相近的业务做抽象 防止接口爆炸
    • 版本升级兼容困难 尽量不要删除方法 字段 枚举类型的新增字段也可能不兼容
    • 调用链路长 服务质量不可监控 调用链路变长 下游抖动可能会影响到上游业务 最终形成连锁反应 服务质量不稳定 同时链路的变成使得服务质量的监控变得困难

微服务架构

微服务架构是一种将单个应用程序 作为一套小型服务开发的方法,每种应用程序都在其自己的进程中独立运行,并使用轻量级机制(通常是HTTP资源的API)进行通信。这些服务是围绕业务功能构建的,可以通过全自动部署机制进行独立部署。这些服务的集中化管理非常少,它们可以用不同的编程语言编写,并使用不同的数据存储技术。

微服务是在SOA上做的升华 , 粒度更加细致,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”。

后面单独写一篇微服务架构相关的文章,大家期待哈!!!

Dubbo架构与实战

Dubbo 架构概述

  • 什么是Dubbo
    Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的一个高性能、轻量级的开源Java RPC框架,可以和Spring框架无缝集成。

  • Dubbo 的特性

    • 基于透明接口的 RPC
    • 智能负载均衡
    • 自动服务注册和发现
    • 高扩展性
    • 运行时流量路由
    • 可视化服务治理
  • Dubbo 的服务治理
    服务治理(SOA governance),企业为了确保项目顺利完成而实施的过程,包括最佳实践、架构原则、治理规程、规律以及其他决定性的因素。服务治理指的是用来管理SOA的采用和实现的过程。

Dubbo 处理流程

在这里插入图片描述

  • 节点说明:

    节点 角色名称
    Provider 暴露服务的服务提供方
    Consumer 调用远程服务的服务消费方
    Registry 服务注册与发现的注册中心
    Monitor 统计服务的调用次数和调用时间的监控中心
    Container 服务运行容器 负责启动 加载 运行服务提供者
  • 调用流程:

    • 服务提供者在服务容器启动时 向注册中心 注册自己提供的服务
    • 服务消费者在启动时 向注册中心订阅自己所需的服务
    • 注册中心返回服务提供者地址列表给消费者 如果有变更 注册中心会基于长连接推送变更数据给消费者
    • 服务消费者 从提供者地址列表中 基于软负载均衡算法 选一台提供者进行调用 如果调用失败 则重新选择一台
    • 服务提供者和消费者 在内存中的调用次数 和 调用时间 定时每分钟发送给监控中心

服务注册中心Zookeeper

通过前面的Dubbo架构图可以看到,Registry(服务注册中心)在其中起着至关重要的作用。Dubbo官方推荐使用Zookeeper作为服务注册中心。Zookeeper 是 Apache Hadoop 的子项目,作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用 。
Zookeeper的安装及其使用见上一篇文章

Dubbo开发实战

实战案例介绍

在Dubbo中所有的的服务调用都是基于接口去进行双方交互的。双方协定好Dubbo调用中的接口,提供者来提供实现类并且注册到注册中心上。

调用方则只需要引入该接口,并且同样注册到相同的注册中心上(消费者)。即可利用注册中心来实现集群感知功能,之后消费者即可对提供者进行调用。

我们所有的项目都是基于Maven去进行创建,这样相互在引用的时候只需要以依赖的形式进行展现就可以了。

并且这里我们会通过maven的父工程来统一依赖的版本。

程序实现分为以下几步骤:

  1. 建立maven工程 并且 创建API模块: 用于规范双方接口协定
  2. 提供provider模块,引入API模块,并且对其中的服务进行实现。将其注册到注册中心上,对外来统一提供服务。
  3. 提供consumer模块,引入API模块,并且引入与提供者相同的注册中心。再进行服务调用。
开发过程
  1. 接口协定

    1. 定义maven。

      <groupId>com.learn</groupId> 
      <artifactId>service-api</artifactId>
      <version>1.0-SNAPSHOT</version>
      
    2. 定义接口,这里为了方便,只是写一个基本的方法。

      public interface HelloService {
             
              
      	String sayHello(String name); 
      }
      
  2. 创建接口提供者

    1. 引入API模块。

      	<dependency> 
      		<groupId>com.learn</groupId> 
      		<artifactId>service-api</artifactId> 
      		<version>${project.version}</version> 
      	</dependency>
      
    2. 引入Dubbo相关依赖,这里为了方便,使用注解方式。

      	<dependency> 
      		<groupId>org.apache.dubbo</groupId> 
      		<artifactId>dubbo</artifactId> 
      	</dependency> 
      	<dependency> 
      		<groupId>org.apache.dubbo</groupId>
      		<artifactId>dubbo-registry-zookeeper</artifactId> 
      	</dependency> 
      	<dependency> 
      		<groupId>org.apache.dubbo</groupId> 
      		<artifactId>dubbo-rpc-dubbo</artifactId> 
      	</dependency> 
      	<dependency> 
      		<groupId>org.apache.dubbo
Alibaba Dubbo or Apache Dubbo, 该如何做选择呢? 实际上,是一款高性能的Java RPC框架。而的前身是阿里巴巴公司开源的、轻量级的开源RPC框架,在2018年阿里巴巴把这个框架捐献给了Apache基金会。那和我们应该怎么去选择呢?目前alibaba.dubbo的最新版本最终为:2.6.12复制代码从的maven仓库上面Note»dubboapache.dubbo的最新版本为:3.2.0-beta.5复制代码🌈对于还是选择:如果2.6.x2.7.0开始,直接使用如果你目前选择了低版本的后面如果想升级到。 阅读详情

相关推荐

Dubbo最全详解(图文全面总结)

典型如 Dubbo、Spring Cloud、gRPC 等,有着异构微服务体系互通的诉求,Dubbo3 借助于新的服务发现模型以及可灵活扩展的 RPC 协议,可以成为 Dubbo3 未来的发展目标。5、Invoker通过路由,负载均衡选择了一个最合适的服务提供者,在通过加入各种过滤器,协议层包装生成一个新的DubboInvoker对象;8、这个Invoker对象会调用本地服务,获得结果再通过层层回调返回到服务消费者,服务消费者拿到结果后,再解析获得最终结果。

zznn0306的博客 2544

双三相电机控制技术:原理、优势应用实践

电机控制技术作为工业自动化的核心,其发展经历了从传统五相系统到双三相架构的演进。双三相电机通过两组独立的三相绕组以30°电角度错开布置,实现了系统可靠性的显著提升和电磁性能的优化。这种结构不仅支持容错运行,还能有效降低谐波含量,提升能效比。在控制算法层面,结合PID控制、滑模观测器等先进技术,双三相系统为高性能伺服控制提供了硬件基础。特别是在需要高动态响应的场景如半导体设备、医疗仪器等领域,双三相控制展现出明显优势。当前行业热点如CIA402控制、PID调节等需求,都能通过双三相架构获得更好的实现路径。

weixin_34396902的博客 385

ransac拟合2D圆(三点定圆 c++详细版)

RANSAC(Random Sample Consensus,随机采样一致性)算法是一种基于随机采样的迭代算法,主要用于从一组包含大量噪声和异常值(外点)的数据中估计数学模型的参数。

twnkie的博客 1030

Apache Dubbo的使用

.Dubbo的发展历史以及特性简介 目录 一.Dubbo的发展历史以及特性简介 1.1Dubbo的发展历史 1.2 Dubbo的特性 二、Dubbo的简单应用 2.1使用前的准备工作 2.2 Dubbo的官方demo 1.1Dubbo的发展历史 2011年,阿里巴巴宣布开源SOA服务化治理框架——Dubbo2.0.7,在当时引起很大关注,并且被众多公司使用,同时在Dubbo的基础上,也有一些公司研发出自己公司的服务化框架,如2014年,当当网的Dubbox,支持http rest协议..

小蜜蜂1010的博客 2798

SpringBoot集成org.apache.Dubbo

SpringBoot集成org.apache.Dubbo 一、前言 Dubbo作为一款优秀的RPC框架,在国内有着众多的使用者,自从2018年2月,Dubbo被阿里捐献给Apache基金会以后,Dubbo似乎以全新的名称 Apache Dubbo焕发了新的生命力。虽然有着同样优秀和优势的Spring Clould框架,但是Dubbo能焕发新生也是一件好事,期待着Dubbo能够完善机制,更新迭代出的...

Agger的博客 3847

阿里微服务架构到底多牛逼:深入解析Apache Dubbo实战

13.1 Dubbo 未来生态阿里巴巴在云栖大会宣布了全面拥抱开源的发展战略,公司开源了150 多个项目,组织排名已经到了前十,总Star数已经超过170K。为了不影响大家的阅读体验,在这里只为大家展示完整目录以及部分内容,有需要这份文档学习的朋友,文章下方即可扫码免费领取,就能得到本文档的领取方式。

java_beautiful的博客 313

Spring Boot项目实战之整合Apache Dubbo分布式应用架构

Apache Dubbo是一款高性能的Java RPC(远程过程调用:服务者、调用者隶属不同的服务器)框架! 一、dubbo基础架构 节点 角色说明 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方 Registry 服务注册发现的注册中心 Monitor 统计服务的调用次数和调用时间的监控中心 Container 服务运行容...

林大侠 703

3-3-1 架构演变及Dubbo使用回顾

2、单体架构 2、垂直架构 3、分布式-SOA架构

qq_42082278的博客 514

org.apache.dubbo 2.7.x 再聚首

Dubbo 版本 :   Dubbo 社区目前主力维护的有 2.6.x 和 2.7.x 两大版本,其中, 2.6.x 主要以 bugfix 和少量 enhancements 为主,因此能完全保证稳定性 2.7.x 作为社区的主要开发版本,得到持续更新并增加了大量新 feature 和优化,同时也带来了一些稳定性挑战   版本更多信息请参考官网。相信小伙伴们对于Dubbo 都有一定的了...

吴振照 1162

org.apache.dubbo 3.2.2 的一些报错。

【代码】org.apache.dubbo 3.2.2 的一些报错。

2019想做自己的游戏的人加群95303036 2411

org.apache.dubbo 2.7.7 服务消费源码

org.apache.dubbo服务消费原理源码分析:   本文主要针对dubbo-spring-boot-starter 2.7.7版本, 对应的 org.apache.dubbo 2.7.7 版本的源码。   本文主要从以下几个点来分析: 服务消费的入口。 构建远程服务的代理。 RegistryDirectory 目录服务获取目标服务的url地址。 客户端服务通信的建立。 ...

吴振照 697

org.apache.dubbo 2.7.7 服务发布注册源码

org.apache.dubbo服务注册原理源码分析:   本文主要针对dubbo-spring-boot-starter 2.7.7版本, 对应的 org.apache.dubbo 2.7.7 版本的源码。   本文主要从以下几个点来分析: 前置知识点--Dubbo的SPI机制。 服务发布注册的入口。 服务发布源码分析 服务注册源码分析。 Dubbo的SPI机制:   没接...

吴振照 1013

Dubbo 的连接方式

Dubbo 连方式

ziania_cumt的博客 1605

springCloud整合Dubbo

springCloud整合Dubbo 前言 项目之间的服务的调用之前是用的openFeign,openFeigndubbo相比的话从传输速度等方面来讲明显是dubbo更好一些,所以也就是为什么要舍弃openFeign转用dubbo的原因,本文只讲整合dubbo中遇到的坑以及一些必须的配置,远程调用实例建议参考其他文章。 一、引入jar包 <dependency> <groupId>com.alibaba</groupId>

qq_53080491的博客 2782

Apache Dubbo(概念篇)

文章目录什么是dubbo?概念特性1.服务发现2.RPC远程服务调用2.1 服务调用过程2.2 提供方暴露一个服务的详细过程2.3 消费方消费一个服务的过程3.负载均衡4.容错机制5.配置管理5.1 启动阶段配置项5.2 服务治理规则5.3 动态配置项 什么是dubbo? 概念 Dubbo是阿里巴巴公司开源的一个高性能优秀的分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 现已成为 Apache 基金会孵化项目,2021年6月已经发布3.0版本! 官方文档 h

疯狂小草的博客 3431

带你了解Apache Dubbo

文章目录一、Dubbo概述1、什么是RPC?2、Dubbo简述3、Dubbo架构二、服务注册中心Zookeeperzookeeper的介绍安装Zookeeper 一、Dubbo概述 1、什么是RPC? 在了解Dubbo之前,先来认识一下什么是RPC? RPC全称为remote procedure call,即远程过程调用,比如现在我有两台服务器A和B,分别都部署着一个任务,A服务器上的应用想调用B服务器上的应用提供的方法,由于两个应用不 在一个内存空间,不能直接调用,所以需要通过远程调用来表达调用的语义

weixin_46157889的博客 828

Apache Dubbo 技术总结

Apache Dubbo 技术总结

weixin_40426261的博客 193

SD卡烧写Linux kernel——SD卡分区,并烧写uboot,kernel,DTB及filesystem

Linux Ubuntu环境下对SD卡分区(烧写uboot,kernel,及filesystem) 介绍dd命令的使用,SD卡分区、格式化、复制文件等 fdisk命令

weixin_42408707的博客 5016

华证ESG评级-得分2009-2023.dta

1、资源内容地址:https://blog.csdn.net/2301_79696294/article/details/1437365242、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题3、适用对象:大学生,本科生,研究生小白可用,容易上手!!!4、课程引用: 经济学,地理学,城市规划城市研究,公共政策管理,社会学,商业管理

上一篇: Zookeeper深入进阶,协议和源码分析
下一篇: Dubbo高级实战
Captain Leo
博客等级 码龄12年 5407粉丝 · 43原创
评论 15
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Captain Leo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值