浅谈为何选择Dubbo

2023-11-04

本文摘录至搜狐,个人觉得很值得已读,仅用于学习交流。

1. 为什么要做服务?

【编者的话】随着现在互联网行业的发展,越来越多的框架、中间件、容器等开源技术不断地涌现,更好地来服务于业务,实现业务并解决问题。然而面对众多的技术选择,我们要如何甄别出适合自己团队业务的技术呢?对于人来说,鞋子过大,可能影响奔跑的速度,鞋子过小,可能影响身体的成长。技术对于业务也是如此的关系。

所以,相对于技术的学习、搭建、使用、运维等技能,我们 对技术的甄别选择更是重中之重。那么本文要讲的Dubbox框架,又是如何在众多的服务框架中脱颖而出,被团队选中践行服务之路?

服务 为什么要做服务?

技术为业务而生,架构也为业务而出现。随着业务的发展、用户量的增长,系统数量增多,调用依赖关系也变得复杂,为了确保系统高可用、高并发的要求,系统的架构也从单体时代慢慢迁移至服务SOA时代,根据不同服务对系统资源的要求不同,我们可以更合理的配置系统资源,使系统资源利用率最大化。
在这里插入图片描述

  1. 1>单一应用架构,当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的 数据访问框架(ORM)是关键。

  2. 什么是ORM
    即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了 。
    个人理解:就是将通用的增删改查抽取成业务层或者持久层的公共方法,方便系统中重复调用。

  3. 2>垂直应用架构,当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的 Web框架(MVC)是关键。

  4. 什么是MVC
    MVC是一个架构,或者说是一个设计模式,它就是强制性使应用程序的输入,处理和输出分开。将一个应用程序分为三个部分:Model,View,Controller。
    MVC的优点:分工明确(分层)、松耦合(视图层和业务层分离)、复用性高(多个视图能够共享一个模型、提高代码复用性)。
    MVC的缺点:1、有时会导致级联的修改(变现层修改导致各层都要修改)。2、降低了系统的性能(不能直接调用数据库)。
    个人理解:MVC主要实现的就是前后端分离,视图层和业务层分离。

  5. 3>分布式服务架构,当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的 分布式服务框架(RPC)是关键。

  6. 在这里插入图片描述

  7. 4>流动计算架构当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的 资源调度和治理中心(SOA)是关键。
    在这里插入图片描述
    分布式服务框架相关文章:https://www.cnblogs.com/jiyukai/p/9459983.html

2. 服务带来的挑战
服务带来的挑战

当迎来服务SOA时代,我们面临要解决的问题会很多,比如:系统的复杂度上升、服务依赖关系、服务性能监控、全链路日志、容灾、断路器、限流等。那么面对这些问题为什么还要做分布式服务呢?因为在未来只有砥砺前行,才能走的更高更远。不过看到这些问题不要气馁,先不管这些问题,让我们一步步来梳理下现存有什么问题,我们要完成什么目标,问题自然会迎刃而解。

根据现在团队的业务系统情况,首先我们要梳理出现存的问题是什么:

1.多种调用传输方式:HTTP方式、WebService方式;
2.服务调用依赖关系:人工记录,查看代码分析;
3.服务调用性能监控:日志记录,人工查看时间;
4.服务与应用紧耦合:服务挂掉,应用无法可用;
5.服务集群负载配置:Nginx配置,存在单点问题;

1.支持当前业务需求,这是最最基本的条件;
2.服务避免单点问题,去中心化;
3.服务高可用、高并发,解耦服务依赖;
4.服务通用化,支持异构系统调用服务;
5.服务依赖关系自维护,可视化;
6.服务性能监控自统计,可视化;
7.服务需自带注册、发现、健康检查、负载均衡等特性;
8.开发人员关注度高,上手快,简单轻量,低侵入;

3. 服务未来的趋势
一谈到服务,可能大家很多听说过SOA、MSA等服务的概念名词,近几年MSA炒的比较火,其实每一个概念的背后都在解决不同的问题。此类名词的最大特点就是 一解释就懂,一问就不知,一讨论就打架。

SOA、MSA两者说到底都是对外提供接口的一种架构设计方式。我倒觉得微服务其实就是随着互联网的发展,复杂的平台、业务的出现,导致SOA架构向更细粒度、更通用化程度发展,就成了所谓的微服务了。以这种说法做为根据,我觉得SOA与微服务的区别在于如下几个方面:

微服务相比于SOA更加精细,微服务更多的以独立的进程的方式存在,互相之间并无影响;
微服务提供的接口方式更加通用化,例如HTTP RESTful方式,各种终端都可以调用,无关语言、平台限制;
微服务更倾向于分布式去中心化的部署方式,在互联网业务场景下更适合;
在这里插入图片描述
微服务并不是一种新思想的方法。它更像是一种思想的精炼,一种SOA的精细化演进,并且更好地利用了先进的技术以解决问题,例如容器与自动化等。所以对于我们 去选择服务技术框架时,并不是非黑即白,而是针对SOA、MSA两种架构设计同时要考虑到兼容性,对于现有平台情况架构设计,退则守SOA,进则攻MSA,阶段性选择适合的。

服务框架
现在业界比较成熟的服务框架有很多,比如:Hessian、CXF、Dubbo、Dubbox、Spring Cloud、gRPC、Thrift等技术实现,都可以进行远程调用,具体技术实现优劣参考以下分析,这也是具体在技术方案选择过程中的重要依据。

服务框架对比

Dubbo是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。不过,略有遗憾的是,据说在淘宝内部,Dubbo由于跟淘宝另一个类似的框架HSF(非开源)有竞争关系,导致Dubbo团队已经解散,反到是当当网的扩展版本Dubbox仍在持续发展,墙内开花墙外香。其它的一些知名电商如当当、国美维护了自己的分支或者在Dubbo的基础开发,但是官方的库缺乏维护,相关的依赖类比如Spring,Netty还是很老的版本(Spring 3.2.16.RELEASE,Netty 3.2.5.Final),倒是有些网友写了升级Spring和Netty的插件。

Dubbox和Dubbo本质上没有区别,名字的含义扩展了Dubbo而已,以下扩展出来的功能,也是选择Dubbox很重要的考察点。

1.支持REST风格远程调用(HTTP + JSON/XML);
2.支持基于Kryo和FST的Java高效序列化实现;
3.支持基于Jackson的JSON序列化;
4.支持基于嵌入式Tomcat的HTTP remoting体系;
5.升级Spring至3.x;
6.升级ZooKeeper客户端;
7.支持完全基于Java代码的Dubbo配置;

Spring Cloud完全基于Spring Boot,是一个非常新的项目,2016年推出1.0的release版本,目前GitHub上更新速度很快。虽然Spring Cloud时间最短,但是相比Dubbo等RPC框架,Spring Cloud提供的全套的分布式系统解决方案。Spring Cloud为开发者提供了在分布式系统(配置管理、服务发现、熔断、路由、微代理、控制总线、一次性token、全局琐、leader选举、分布式session、集群状态)中快速构建的工具,使用Spring Cloud的开发者可以快速的启动服务或构建应用。它们将在任何分布式环境中工作,包括开发人员自己的笔记本电脑,裸物理机的数据中心,和像Cloud Foundry云管理平台。在未来引领这微服务架构的发展,提供业界标准的一套微服务架构解决方案。

Spring Cloud和Dubbo对比:
在这里插入图片描述
实际场景中的选择:
1.Spring Cloud:Spring全家桶,用起来很舒服,只有你想不到,没有它做不到。

2.Dubbox:相对于Dubbo支持了REST,估计是很多公司选择Dubbox的一个重要原因之一,但如果使用Dubbo的RPC调用方式,服务间仍然会存在API强依赖,各有利弊,懂的取舍吧。

RPC 和 REST API
由于Dubbo是基础框架,其实现的内容对于我们实施微服务架构是否合理,也需要我们根据自身需求去考虑是否要修改,比如Dubbo的服务调用是通过RPC实现的,但是如果仔细拜读过Martin Fowler的Microservices一文,其定义的服务间通信是HTTP协议的REST API。那么这两种有何区别呢?

1.服务提供方与调用方接口依赖方式太强 我们为每个微服务定义了各自的service抽象接口,并通过持续集成发布到私有仓库中,调用方应用对微服务提供的抽象接口存在强依赖关系,因此不论开发、测试、集成环境都需要严格的管理版本依赖,才不会出现服务方与调用方的不一致导致应用无法编译成功等一系列问题,以及这也会直接影响本地开发的环境要求,往往一个依赖很多服务的上层应用,每天都要更新很多代码并install之后才能进行后续的开发。若没有严格的版本管理制度或开发一些自动化工具,这样的依赖关系会成为开发团队的一大噩梦。而REST接口相比RPC更为轻量化,服务提供方和调用方的依赖只是依靠一纸契约,不存在代码级别的强依赖,当然REST接口也有痛点,因为接口定义过轻,很容易导致定义文档与实际实现不一致导致服务集成时的问题,但是该问题很好解决,只需要通过每个服务整合swagger,让每个服务的代码与文档一体化,就能解决。所以在分布式环境下,REST方式的服务依赖要比RPC方式的依赖更为灵活。

2.服务对平台敏感,难以简单复用 通常我们在提供对外服务时,都会 以REST的方式提供出去,这样可以实现跨平台的特点,任何一个语言的调用方都可以根据接口定义来实现。那么在Dubbo中我们要提供REST接口时,不得不实现一层代理,用来将RPC接口转换成REST接口进行对外发布。若我们每个服务本身就以REST接口方式存在,当要对外提供服务时,主要在API网关中配置映射关系和权限控制就可实现服务的复用了。
相信这些痛点也是为什么当当网在Dubbox(基于Dubbo的开源扩展)中增加了对REST支持的原因之一。

Dubbo实现了服务治理的基础,但是要完成一个完备的微服务架构,还需要在各环节去扩展和完善以保证集群的健康,以减轻开发、测试以及运维各个环节上增加出来的压力,这样才能让各环节人员真正的专注于业务逻辑。

而Spring Cloud依然发扬了Spring Source整合一切的作风,以标准化的姿态将一些微服务架构的成熟产品与框架揉为一体,并继承了Spring Boot简单配置、快速开发、轻松部署的特点,让原本复杂的架构工作变得相对容易上手一些。所以,如果选择Dubbo请务必在各个环节做好整套解决方案的准备,不然很可能随着服务数量的增长,整个团队都将疲于应付各种架构上不足引起的困难。而如果选择Spring Cloud,相对来说每个环节都已经有了对应的组件支持,可能有些也不一定能满足你所有的需求,但是其活跃的社区与高速的迭代进度也会是你可以依靠的强大后盾。
在这里插入图片描述
Dubbox带来什么 Dubbo服务治理
在这里插入图片描述
在这里插入图片描述
Dubbox扩展特性

1.支持REST风格远程调用(HTTP + JSON/XML);
2.支持基于Kryo和FST的Java高效序列化实现;
3.支持基于Jackson的JSON序列化;
4.支持基于嵌入式Tomcat的HTTP remoting体系;
5.升级Spring至3.x;
6.升级ZooKeeper客户端;
7.支持完全基于Java代码的Dubbo配置;

1.《分布式RPC框架性能大比拼》
2.《实施微服务,我们需要哪些基础框架?》
3.《微服务(Microservice)那点事》
4.《Spring Cloud微服务框架主要子项目和RPC框架的对比》
5.《微服务、SOA 和 API:是敌是友?》
6.《微服务与SOA的实践应用对比》
7.《微服务架构的基础框架选择:Spring Cloud还是Dubbo?》
8.《微服务与SOA架构》
9.《Web Service实践之REST vs RPC》
10.《RPC好,还是RESTful好?》
11.《Rpc和Rest接口,微服务之Rpc》
12.《WEB开发中,使用JSON-RPC好,还是RESTful API好?》
原文链接:http://m.sohu.com/a/222328540_756465

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈为何选择Dubbo 的相关文章

  • Mybatis代码生成器——让Java开发更高效

    Mybatis是一款优秀的ORM框架 在Java开发中广泛应用 然而 手写Mybatis代码工作量大 效率低 而Mybatis代码生成器可以帮助开发人员自动生成基本的CRUD代码 极大地提高了开发效率 本文将介绍如何使用Mybatis代码生
  • Zipkin进行链路跟踪

    Zipkin 简介 Zipkin 是 Twitter 开源的分布式跟踪系统 基于 Dapper 的论文设计而来 它的主要功能是收集系统的时序数据 从而追踪微服务架构的系统延时等问题 Zipkin 还提供了一个非常友好的界面 便于我们分析追踪
  • Struts的优点/缺点

    lt 一 gt 优点 1 struts简单 易懂 容易被人采用 功能强大
  • 什么是node,node怎么用?

    Node js 是一个基于Chrome V8 引擎的JavaScript运行环境 Node js使用了一个事件驱动 非阻塞式I O的模型 使其轻量又高效 事件驱动 任务执行 发布者 订阅者 事件驱动 on emit 非阻塞 执行某一个任务的
  • SSM三层架构之间整合

    一 前言 之前学习ssm框架的时候都是每个框架独立分散的系统性学习 对于框架的整体 总结效果不太好 后来看了黑马视频教程有个老师的思路给了我比较大的启发 以spring为中心 去整合springmvc mybatis 无论是搭建环境 还是理
  • please remember me(auto login)

    记住我 用户自动登录的实现 auto login 一 什么是用户自动登录 对于我们的网站向已注册用户提供某些专门的服务 比如网上购物 在线下载 收费浏览等等 就会要求用户在使用这些服务之前进入登录页面 输入用户名和密码 并进行验证 如果用户
  • Struts2 重点总结 (2)

    国际化 资源文件和资源包 要用Struts实现国际化和本地化 首先要定义资源文件的名称 这个文件会包含用默认语言编写的会在程序中出现的所有消息 这些消息以 键 值 对的形式存储 如下 error validation localtion T
  • Rxjava初步理解

    本质就是通过回调实现 Observable被观察对像 成员变量onSubscribe Subscriber 观察对象 订阅 Observable subscribe先调用Subscriber onStart 然后调用onSubscribe中
  • 狂神说 MyBatis 笔记

    这里写目录标题 Mybatis 1 简介 1 1 什么是MyBaits 1 2 持久话 1 3 持久层 1 4 为什么需要Mybatis 2 第一个Mybatis程序 2 1 搭建环境 2 2 创建一个模块 2 3 编写代码 2 4 测试
  • POI框架导出EXCEL的简单列子(跨行跨列)合并单元格

    public static void main String args throws IOException try HSSFWorkbook wb new HSSFWorkbook HSSFSheet sheet wb createShe
  • style-components的熟练运用

    安装 首先下一个包 npm install save styled components 使用 创建组价以及根据属性加样式 import React Component from react import styled from style
  • SSM框架之MyBatis(二)--多表查询及查询结果映射

    使用MyBatis这一强大的框架可以解决很多赋值的问题 其中对于子配置文件中的小细节有很多需要注意的地方 使用这个框架后主要就是对于配置文件的编写和配置 今天我写了一个多表查询 表的基本结构如下 用户表t user 用户编号uid 账号ac
  • 访谈:小学学历的程序员自主研发出框架级产品

    提到许松森 也许你并不知道他是谁 在Google中敲入这个名字 能找到的结果也寥寥无几 那么做为我们这一期采访的主角 他究竟是用什么在吸引着我们呢 打开许松森的blog 开篇就是 我的悲惨人生 读在字里行间 对他在逆境中的自我成长很是敬佩
  • 服务器架构的演进

    服务器端的架构随着公司以及业务的发展 它不断演进 其演进的过程如下 https www cnblogs com joelan0927 p 10425530 html https blog csdn net daogla article de
  • 框架的注解

    文章目录 一 mybatis 1 MyBatis的常用注解 2 MyBatis的注解实现复杂映射开发 二 Spring 1 Spring原始注解 2 Spring新注解 3 注解配置 AOP 详解 三 springMVC 1 Request
  • Vue框架--Ruoyi解析(前端)

    路由router注册 router目录下的 index js 配合 permission js 是整套vue前端项目的权限判断核心 index js 里面的path 配置都是一些不会与权限挂钩的路由 例如 404 登录页面路径等 permi
  • 封装的几种形式

    你说的时cpu的封装吗 供你参考 集成电路芯片的封装形式 自从美国Intel公司1971年设计制造出4位微处a理器芯片以来 在20多年时间内 CPU从Intel4004 80286 80386 80486发展到Pentium和Pentium
  • Spring Boot入门&整合常用框架整理丨深度好文

    一 SpringBoot简介 1 1 原有Spring优缺点分析 1 1 1 Spring的优点分析 Spring是Java企业版 Java Enterprise Edition JEE 也称J2EE 的轻量级代替品 无需开发重量级的Ent
  • html理解MVC模型与MVVM模型底层实现

    一 MVC模型的底层实现 1 1 相关代码 div div
  • iOS自动布局——Masonry详解

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由鹅厂新鲜事儿发表于云 社区专栏 作者 oceanlong 腾讯 移动客户端开发工程师 前言 UI布局是整个前端体系里不可或缺的一环 代码的布局是设计语言与用户视觉感受沟通的桥梁

随机推荐

  • Element-UI中的下拉栏

    好久没有写博客了 今天在做毕业设计的图形化界面时遇到了一些问题 是有关Element UI中的下来栏的问题 我需要有一个下拉栏用于选择网络的模式 原先从来没有涉及相关的前端的这方面知识 找到了下面两个博客问题得到了解决 链接一 链接2 还有
  • java中UTC转Date或者时间戳

    public static long utcToTimestamp DateTime dataTime throws ParseException SimpleDateFormat df2 new SimpleDateFormat yyyy
  • 快速排序实现以及时间复杂度分析

    原文 http www cnblogs com fengty90 p 3768827 html 之前只知道快速排序的平均时间复杂度为O n log n 最糟糕时复杂度为O n 2 但却不知道具体原因 今天好好证明一下 最后部分摘自 算法导论
  • "==" undefined== null ?

    1 undefined null true 这个奇葩我也不知道为什么就相等了 毕竟在进行类型转换的时候都是转换为数字 undefined 转换为数字是 NaN null 转换为数字是0 2 null 0 false null有属于自己的类型
  • npm 安装、删除依赖命令

    npm安装依赖 npm install xxx 利用 npm 安装xxx依赖到当前命令行所在目录 npm install xxx g 利用npm安装全局依赖xxx npm install xxx save 安装并写入package json
  • 抖音视频根据用户ID下载方法

    在这说一下我提取抖音视频的方法 1 首先是抖音视频我不是从APP上抓取的 因为对应用户视频列表抓取链接存在字段加密 无法获取我的视频信息获取步骤如下 1 通过访问登录新抖微信小程序 采用fiddler对其进行抓包 获取到根据用户名搜索的AP
  • LevelDb之七:根据Key读取记录

    LevelDb之七 根据Key读取记录 2012 09 08 17 54 41 分类 云计算 LevelDb是针对大规模Key Value数据的单机存储库 从应用的角度来看 LevelDb就是一个存储工具 而作为称职的存储工具 常见的调用接
  • Javaweb 自定义 Servlet 实现按照访问路径转发

    前言 HttpServlet Service方法 提供的 doGet 和 doPost 方法只能根据请求方式进行分发 假设我们现在有多个服务 添加 删除 查询 每个服务都要对应一个 Servlet AddServlet DeleteServ
  • 圆柱体的投影特点_圆柱体三面投影作图方法分析

    摘要 工程制图作为一门重要的专业技术基础课 旨在培养学生的空间思维和读图 绘图的能力 结合工程制图的教学实践 指出了求圆柱截切体投影的关键是求其截交线的投影 明确了圆柱截交线的类型与投影方法 以多平面截切圆柱体产生的圆柱截切体为例 通过逐个
  • Flowable基本使用介绍和Flowable数据库表解释

    1 Flowable是什么 Flowable是一个使用Java编写的轻量级业务流程引擎 Flowable流程引擎可用于部署BPMN 2 0流程定义 用于定义流程的行业XML标准 创建这些流程定义的流程实例 进行查询 访问运行中或历史的流程实
  • MybatisPlus生成主键策略方法

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 解答:什么是卫星链路

    本文足对卫星链路预算做的一个最基本 简单 通俗的介绍 以期使普通读者都能够对链路预算有一个了解 有个概念 如感兴趣则需再深入学下去 就会将链路预算彻底搞明白 链路预算的目的和作用卫星链路预算的目的和作用 简单的讲就是帮助新用户经济合理地选配
  • 睿智的seq2seq模型4——往英文到法文的翻译里加上注意力机制

    睿智的seq2seq模型4 往英文到法文的翻译里加上注意力机制 学习前言 什么是注意力机制 如何将注意力机制应用到翻译中 英文翻译到法文的思路 1 对英文进行特征提取 2 将提取到的特征传入到decoder 3 将 t 作为起始符预测第一个
  • vue项目中使用可选链 ( ?. )和双问号 ( ?? )配置

    1 安装插件 babel plugin proposal optional chaining npm install save dev babel plugin proposal optional chaining 2 配置babel ba
  • 2017中国大学生程序设计竞赛 - 女生专场

    1 HDU 6023 点我看题 此链接为vjudge链接 题意 给出题目的数量 提交的次数 每次提交的题目编号 提交时间以及结果 其中罚时为每次错误提交20min 第一次成功提交的时间 问最后AC的题目数量以及总罚时 提交结果不存在CE 分
  • 宋浩概率论与数理统计-第六章-笔记

    概率论与数理统计 第六章 6 1 总体与样本 6 2 1 统计量的定义 6 2 2 常用统计量 6 3 1 抽样分布 2 chi 2 2分布
  • 在Linux上将作业提交到Yarn上运行报错Caused by: java.io.IOException: Exceeded MAX_FAILED_UNIQUE_FETCHES的解决办法

    楼主在Linux服务器上将作业提交到Yarn上报错 Caused by java io IOException Exceeded MAX FAILED UNIQUE FETCHES bailing out 经过网上的搜索以及自己的实验 解决
  • zabbix监控——监控主机

    目录 一 zabbix介绍 二 部署zabbix 2 1 server端部署 2 2 agent端部署 2 3 中文字体乱码设置 三 Zabbix API方式配置 一 zabbix介绍 1 zabbix是一个基于WEB界面的提供分布式系统监
  • 项目js文件修改后chrome不能及时更新的解决办法

    在做web开发过程中 经常需要调试js代码 而在这个时候我们修改过的代码可能不能生效 这是因为浏览器默认是有缓存的 但是这个时候缓存就会影响我们的调试工作 在这里就介绍一下chrome浏览器解决该问题的方法 方法一 调试前清除浏览器缓存 在
  • 浅谈为何选择Dubbo

    本文摘录至搜狐 个人觉得很值得已读 仅用于学习交流 1 为什么要做服务 编者的话 随着现在互联网行业的发展 越来越多的框架 中间件 容器等开源技术不断地涌现 更好地来服务于业务 实现业务并解决问题 然而面对众多的技术选择 我们要如何甄别出适