当前位置: 首页 > news >正文

如何进行微服务的技术选型?

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"!

作者:陈于吉吉|慕课网讲师


随着这几年微服务的火爆,在平时的工作或者技术交流中,我们总能听到哪家公司说把自己的项目用微服务重构啦,是的,微服务确实能解决单体系统变得臃肿难以维系的问题。现在如果你的企业正在考虑采用微服务对架构进行重构,那么企业必定需要选择一个框架将微服务进行落地。

我们都知道,现在在微服务市场比较流行的有 2 大框架,一个是 Ali 的 Dubbo,一个是 SpringCloud。两者孰优孰劣一直是一个比较令人头疼的问题。接下来我们一起探讨下如何进行微服务的技术选型。

1. 技术选型考虑的要素

其实我们可以先不去考虑是采用 Dubbo 还是 SpringCloud,而是回到技术选型本身,先看下技术选型可能存在的指标,然后根据这些指标来考虑到底是选择那个微服务框架。

考虑要素评判
背景调研选型技术的背景,了解来源
是否满足业务需求是否能满足业务的需求,切记避免过重引用,技术是支撑业务,避免太过超前于业务
成本成本包含了人力成本,时间成本,还有资源硬件成本
是否开源如果是开源,应该清楚开源的组织是哪一家,谨慎使用社区版
社区活跃度社区活跃度在一定程度决定软件质量,当你碰到问题之前活跃的社区已经有其他人碰到过,并可能已经很好的解决
安全性了解框架或组件是否存在漏洞
与本公司技术栈是否一致尽可能考虑与公司技术栈一致或相差不关的技术,可以保证质量和成本
是否是自己熟悉的技术一次选型不要引用过多未知新技术,避免出现过多不可控风险,保证稳定
稳定性系统是否开源长期运行,是否已经经得住考验
扩展性是否兼容其他平台,是否可以进行二次开发
性能效率考虑吞吐率,响应时间等等
技术前进的步伐选择的技术什么周期必须明显长于项目的生命周期,确保技术本身都紧跟时间进行迭代

可以看到,技术选型需要评估的指标还是非常多的,也是要个很需要经验的决策。要进行大量的调研和输入,根据现有的业务情况作出一个符合自身情况的决策。

我们在做技术选型的时候最忌讳的是临时抱佛脚,在网上随意搜索几个对比文章利用这些碎片化信息来做出决策。一定要确保我们的选型是基于当前业务增长的判断,还要弄清楚业务事实背后的假设。

即使这样,也未必能选出一个最优的方案,但是通过这一系列的评判标准绝对可以挑选出满足当下业务的技术栈。

2. Dubbo 还是 SprigCloud

2.1 Dubbo

Dubbo,阿里巴巴公司开源的一个高性能优秀的服务框架,当前 Dubbo 支撑的阿里分布式应用内支撑万级别的应用数,运行在 20 多万的服务器实例上,每天调用量万亿级别,是国内最高的分布式应用集群。目前 Dubbo 已经被阿里赠予 apache 基金会成为顶级项目。

Dubbo 其实也经历过一段坎坷,中间出现一大段无人维护的阶段,可能是让路于阿里云收费项目 HSF。不过目前已经在 apache 顶级项目下重新维护,目前最新版本是 3.0。

2.2 SpringCloud

SpringCloud 是 Spring Source 的产物,Spring 社区的强大背书可以说是 Java 业务界无人能匹敌的组织,SpringBoot 和 SpringCloud 更是无缝的紧密相连,在 SpringCloud 发展得初期,Netfix 为其提供了强大的技术输出,在一开始的阶段 Netfix 开关套件基本上是 SpringCloud 的核心。不过随着 Netfix 的部分组件不更新,SpringCloud 已经在各个方面提供了替代甚至更强的方案。

如果只是拿两者的背景做比较,前者在国内影响力更大,后者在国外和国内新兴企业中影响力更大。但由于背靠 Spring Source 强大的靠山,在背景上,应该是 SpringCloud 略胜一筹。不过不应该作为选型框架主要依据。

2.3 社区活跃度

有人在 2017 年,Dubbo 还未加入 apache 顶级项目时,有人在做了两个框架在 github 上的活跃度对比,可以看出 SpringCloud 是以小时为活跃维度,而 Dubbo 基本上以年为维度。

但在今天,Dubbo 在加入 apache 顶级项目后,在 github 重新对比,可以看出差距正在缩小

当然真正的活跃不是这么简单就做出评判,不过粗略的观察还是可以得出结论,Dubbo 在社区特别是中国区,活跃已经在恢复。当官方没有维护之后,还是有一些公司对 Dubbo 做了进一步的开发和维护,例如当当基于 Dubbo 研发的分布式框架 Dubbox。

2.4 两者的性能

Dubbo 和 SpringCloud 其实只是解决方案的框架,集中性能的差异主要体现在服务调用和传输协议上,Dubbo 使用的是 RPC 通讯协议,提供了 Dubbo 的序列化,Dubbo 缺省协议采用单一长链接和 NIO 异步通讯(保持连接、轮训处理),使用自定义的报文,适合小数量大并发的服务调用场景,
而 SpringCloud 缺省采用的是 HTTP 协议的 REST API。

网上有人特意做了个模拟测试两者的性能,使用一个 Pojo 对象包含 10 个属性,请求 10 万次,Dubbo 和 SpringCloud 在不同线程数量下,每次请求耗时(ms)

以上图片和测试结果均采自网上

不出意外,采用 HTTP 的 SpringCloud 确实比不过采用 RPC 的 Dubbo。但由此产生了:Http + Json 的 Rest 通信,性能上难堪重用,其实也是一种误读。

评估性能更大的程度是判断 Http 协议的通信对于应用的负载是否会成为真正的瓶颈点。

在大部分的公司网络下,网络消耗并不能算上什么太大的问题。如果真的有问题,SpringCloud 也并不是 Http + Json 强制绑定,也可以选用 Thrift,Protobuf 等高性能 RPC,序列化作为替代方案。

2.5 架构完整性

上述的几点在这次选型中,最多是参考点之一,真正决定选择的是架构的完整性,他决定了是否满足我们的需求。

其实把 SpringCloud 和 Dubbo 进行在架构完整性对比有点不太公平,Dubbo 只是实现了服务治理,而 SpringCloud 到目前为止在 github 上已经有三十多个项目,已经覆盖了微服务架构下的方方面面。在一定得程度来说,Dubbo 是指 SpringCloud 的一个子集,但在选择框架的问题上,方案完整度却恰恰是一个最需要我们重点关注。

在上面章节中,说到了,微服务虽然带来了模块清晰划分,独立部署,技术多样式的好处,但是由于分布式,也带来了非常多的复杂度,这些复杂度,是需要进行治理和必要的组件进行支撑。

DubboSpringCloud
服务注册中心ZookeeperNetflix EureKa / Consule/Nacos
服务调用凡是RPCREST API
服务网关NetFlix Zuul / gateway
断路器不完善NetFlix Hystrix
分布式配置SpringCloud Config
链路跟踪SpringCloud Sleuth
消息总线SpringCloud Bus
批量任务SpringCloud Task

以上列举出来一些常用的核心组件,从表格不难发现为何说 Dubbo 只是 SpringCloud 的一个子集,不过有一点必须声明,Dubbo 里面对比项中的” 无 “并不是代表不能实现,只是默认 Dubbo 框架自身没有提供,而我们在市面上还是可以找到很多与之相匹配的开源组件。

例如:

  • 服务网关:可以采用 Nginx+lua 作为基础网关,可以起到鉴权,路由等简单网关的规则;
  • 断路器 :可以采用 ali 的 Sentinel,Sentinel 比 Hystrix 功能还要强大,并有控制台;
  • 分布式配置 : 可以采用百度的 Disconf 或者携程的 Apollo 作为分布式配置管理,对比起,SpringCloud 的 Config,Config 是存储和配置在 git 上,使用默认配置不够直观,而 Disconf 和 Apollo 都提供了优秀的控制台,有灰度发布,权限隔离功能更加强大;
  • 链路跟踪 : 可以使用 SkyWalking,目前 SkyWalking 也已经纳入 apache 的顶级项目,这 2 年发展迅速,相比 Zipkin,Cat 更加强大,更不用说 Sleuth;
  • 消息总线 : 可以使用 RabbitMq,采用 AMQP 协议的 RabbitMq 也可以实现消息代理将分布式系统节点串联,达到广播状态;
  • 批量任务 : 可以使用 xxl-job。

你可以认为 Dubbo 是组装电脑,SpringCloud 是品牌电脑。下面给出我们组装完的 Dubbo 和 SpringCloud 的对比,其中选择组装的组件大部分来自国产:

Dubbo + 自选组件SpringCloud
服务注册中心ZookeeperNetflix EureKa / Consule/Nacos
服务调用凡是RPCREST API
服务网关Nginx + LuaNetFlix Zuul / gateway
断路器SentinelNetFlix Hystrix
分布式配置ApolloSpringCloud Config
链路跟踪SkywalkingSpringCloud Sleuth
消息总线RabbitMqSpringCloud Bus
批量任务Xxl-JobSpringCloud Task

Dubbo 在各个环节我们的选择自由度很高,也可以说,只能外部去选装。但毕竟是外部的选装,例如我们为一台组装电脑选择了一条内存或一块硬盘存在问题导致整台电脑都奔溃。如果你是 DIY 的高手,这些都不是问题,但如果你是一名小白,或对各个组件不是太熟悉,那可能品牌机会更适合你。

SpringCloud 像品牌机,在 Spring Source 的整合下,做了大量的兼容性测试,保证了机器拥有较高的稳定性,但 SpringCloud 的默认组件中也有一些不太好用的组件。

除了以上我们讲的组件的区别,还有一些小的细节,例如

笔者在早年使用 Dubbo 为了实现隐式传参,就对 Dubbo 的源码进行了改动,(因为早点 dubbo 停止了维护,所以进行了局部二次开发),在使用 SpringCloud,发现直接实现 RequestInterceptor 就可以实现,可能 SpingCloud 是后发,所以在一些细节上更加考虑周到,更适合小白的使用。

2.6 学习,招聘成本

应该说,学习成本是 SpringCloud 相比较 Dubbo 是更低的,各种组件基本都是开箱即用,并且依托于 SpringSource 大树,兼容性和可靠性是有保障的,相信写 Java 代码的人无人不熟 Spring。在编码上,依托 SpringBoot,各种组件配置即可使用,很大的降低的学习和入门成本。

3. 总结

关于 Dubbo 和 SpringCloud 的相关概念和对比,上面已经叙述清楚了,至于选型是 选择 Dubbo 还是 SpringCloud,这里得根据自身的情况需求出发,这里不做推荐选择。

笔者之前用的一直都是 Dubbo,但后面去了一家新公司新的团队,选择了是 ali 版本的 SpringCloud,考虑的原因是:新团队这方面相关经验还是比较欠缺,SpringCloud 提供了完整的组件支持,SpringCloud 不失为比较稳妥的选择。

作为后起之秀,SpringCloud 使用简单方便,并且 SpringCloud 也有强大的社区支持,文档方面也是非常完善,新团队没有必要在此投入过多的时间去阅读分散的文档和研究各种开源组件,可以分出精力和时间在业务上。

而且公司还存在其他技术栈的团队,存在接口互调的需求。Dubbo 默认使用的 RPC 并不能很好的实现跨语言,而 SpringCloud 默认 Http REST 本身就是支持跨语言实现。


欢迎关注「慕课网」帐号,我们会一直坚持提供IT圈优质内容,分享干货知识,大家一起共同成长吧!

本文原创发布于慕课网 ,转载请注明出处,谢谢合作

相关文章:

如何进行微服务的技术选型?

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"! 作者:陈于吉吉|慕课网讲师 随着这几年微服务的火爆,在平时的工作或者技术交流中,我们总能听到哪家公…...

Vue电商项目--应用开发详解

vue-cli脚手架初始化项目 首先,页面上新建一个文件夹。然后打开命令端口 vue create app 选择Default ([Vue 2] babel, eslint) 然后把项目拖拽到vscode中。项目目录看一下 脚手架项目的目录 node_modules:放置项目依赖的地方 public:一般放置一些共用的静态资源&a…...

Lvs负载均衡

系列文章目录 文章目录 系列文章目录一、集群1.集群2. 二、LVS1.LVS简介2.负载均衡的结构3.Lvs调度算法 总结 一、集群 1.集群 集群群集 cluster由多台主机构成的一个整体,提供一个放问入口(IP或域名),集群中的多台主机都干一件事提供一样的服务 负载均…...

JAVAWeb08-手动实现 Tomcat 底层机制+ 自己设计 Servlet

1. 前言 先看一个小案例, 引出对 Tomcat 底层实现思考 1.1 完成小案例 ● 快速给小伙伴完成这个小案例 0. 我们准备使用 Maven 来创建一个 WEB 项目, 老师先简单给小伙伴介绍一下 Maven 是什么, 更加详细的使用,我们还会细讲, 现在先使用一把 先创建…...

非监督学习简单介绍

文章目录 非监督学习简单介绍聚类K-meansHierarchical聚类DBSCAN 降维PCAt-SNE 其他非监督学习技术结论 非监督学习简单介绍 非监督学习是机器学习中的一种方法,其目标是基于数据的内在结构和关系,从而在无标签数据中识别样本的潜在结构和模式。非监督学…...

香港科技大学有什么好的专业?

香港科技大学创办于1991年10月,是一所坐落于香港清水湾半岛的公立研究型大学。大学设有4个学院:工学院、理学院、人文社会科学学院和工商管理学院,还设有2个研究院:香港科技大学公共政策和行政研究生院和香港科技大学霍英东研究院…...

【两个月算法速成】day04

本文以收录专题刷题记录 目录 24. 两两交换链表中的节点 题目链接 思路 代码 19. 删除链表的倒数第 N 个结点 题目链接 思路-双指针 代码 面试题 02.07. 链表相交 题目链接 思路 代码 24. 两两交换链表中的节点 题目链接 力扣 思路 建议使用虚拟节点&#xff0…...

【Python】实战:生成无关联单选问卷 csv《压疮风险评估表》

目录 一、适用场景 二、业务需求 三、Python 文件 (1)创建文件 (2)代码示例 四、csv 文件 一、适用场景 实战场景: 问卷全部为单选题问卷问题全部为必填问题之间无关联关系每个问题的答案分数不同根据问卷全部问…...

rsync 远程删除文件

rsync 远程删除文件 rsync是一个强大的远程数据同步工具,它不仅可以实现远程文件复制,也可以实现远程文件删除。 要使用rsync实现远程删除文件,可以使用如下命令: bash rsync -avz --delete usernameremotehost:/path/to/files /path/to/local/dir这个命令的主要参数: -a:归…...

LinkedBlockingQueue原理

1. 基本的入队出队 public class LinkedBlockingQueue<E> extends AbstractQueue<E>implements BlockingQueue<E>, java.io.Serializable {static class Node<E> {E item;/*** 下列三种情况之一* - 真正的后继节点* - 自己, 发生在出队时* - null, 表…...

哈希表题目:网格照明

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;网格照明 出处&#xff1a;1001. 网格照明 难度 6 级 题目描述 要求 在 n n \texttt{n} \times \texttt{n} nn 的二维网格 grid \texttt{grid}…...

Python多线程爬虫为何效率低下?解析原因并提高爬虫速度的方法

目录 一、知识点二、多线程语法GIL单线程多线程单线程多线程 最后的惊喜 一、知识点 线程&#xff08;Thread&#xff09;也叫轻量级进程&#xff0c;是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程中的实际运作单位。线程自己不拥有…...

Python 标准方形信号定义(完美实现)

之前我们介绍了如何定义一个标准的正弦信号,这里我们做一下延申,简单说明一下如何定义一个方形函数。 方形信号表达式 square signal = g ( t ) = sign [ sin ⁡ ( 2 π f t +...

[Daimayuan] 走不出的迷宫(C++,图论,DP)

有一个 H H H 行 W W W 列的迷宫&#xff08;行号从上到下是 1 − H 1−H 1−H&#xff0c;列号从左到右是 1 − W 1−W 1−W&#xff09;&#xff0c;现在有一个由 . 和 # 组成的 H 行 W 列的矩阵表示这个迷宫的构造&#xff0c;. 代表可以通过的空地&#xff0c;# 代表不…...

【LeetCode: 1416. 恢复数组 | 暴力递归=>记忆化搜索=>动态规划 】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

centos7查看磁盘io

1.查看所使用到的命令为iostat&#xff0c;centos7没有自带iostat&#xff0c;需要安装一下 2.安装iostat命令 yum -y install sysstat 3.使用iostat命令 iostat %user&#xff1a;表示用户空间进程使用 CPU 时间的百分比 %nice&#xff1a;表示用户空间进程以降低优先级的…...

浅析低代码开发的典型应用构建场景v

在数字经济蓬勃发展的大势之下&#xff0c;企业软件开发人员供给不足、开发速度慢、开发成本高、数字化和智能化成效不明显等问题日益凸出&#xff0c;阻碍了企业的数字化转型。 而近年来&#xff0c;低代码的出现推动了经济社会的全面提效&#xff0c;也成为人才供求矛盾的润…...

3 连续模块(二)

3.5 零极点增益模块 在控制系统设计和分析中&#xff0c;常用的函数包括 传递函数&#xff08;tf&#xff09;、零极点&#xff08;zpk&#xff09;和状态空间&#xff08;ss&#xff09;函数 传递函数&#xff08;tf&#xff09;&#xff1a;用于表示线性时不变系统的输入输出…...

ElasticSearch 部署及安装ik分词器

ansiable playbook链接&#xff1a; https://download.csdn.net/download/weixin_43798031/87719490 需要注意的点&#xff1a;公司es集群现以三个角色部署分别为 Gateway、Master、Data 简单的理解可以理解为在每台机器上部署了三个es&#xff0c;以端口和配置文件来区分这三…...

汽车充电桩检测设备TK4860C交流充电桩检定装置

TK4860C是一款在交流充电桩充电过程中实时检测充电电量的标准仪器&#xff0c;仪器以新能源车为负载&#xff0c;结合宽动态范围测量技术、电能ms级高速刷新等技术&#xff0c;TK4860C实现充电全过程的累积电能精准计量&#xff0c;相比于传统的预设检定点的稳态计量&#xff0…...

备份和恢复:确保数据安全

备份和恢复&#xff1a;确保数据安全 在计算机领域中&#xff0c;备份和恢复数据对于确保数据安全至关重要。本文将介绍备份策略概述、使用mysqldump进行备份、使用MySQL Enterprise Backup进行备份、恢复数据以及备份和恢复的最佳实践。 备份策略概述 在制定备份策略时&…...

8 DWA(一)

8 DWA DMA简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取&#xff08;可以直接访问32内部存储器&#xff0c;包括内存SRAM&#xff0c;Flash&#xff09; DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#x…...

mysql慢查询日志

概念 MySQL的慢查询日志是MySQL提供的一种日志记录&#xff0c;它用来记录在MySQL中响应时间超过阀值的语句&#xff0c;具体指运行时间超过long_query_time值的SQL&#xff0c;则会被记录到慢查询日志中。long_query_time的默认值为10&#xff0c;意思是运行10秒以上的语句。…...

Sentinel介绍及搭建

分布式流量防护 服务雪崩 服务提供者不可用导致服务调用者也跟着不可用&#xff0c;以此类推引起整个链路中的所有微服务都不可用 分布式流量防护 在分布式系统中&#xff0c;服务之间的相互调用会生成分布式流量。如何通过组件进行流量防护&#xff0c;并有效控制流量&…...

最受信任的低代码平台排行榜

近年来&#xff0c;随着数字化转型的兴起&#xff0c;低代码平台获得了大量关注。它允许用户在几乎没有编码知识的情况下创建应用程序&#xff0c;从而使企业能够简化其流程并提高效率。随着低代码平台的日益流行&#xff0c;要确定哪些平台最可靠、最值得信赖并非易事。在本文…...

Django框架之创建项目、应用并配置数据库

django3.0框架创建项目、应用并配置数据库 创建项目 进入命令行 新建一个全英文的目录 进入目录 输入命令 django-admin startproject project 项目目录层级 查看当前目录层级 tree /f 目录文件说明 创建数据库 做一个学生管理系统做演示&#xff0c;使用navicat创建数据…...

软件测试之基础概念学习篇(需求 + 测试用例 + 开发模型 + 测试模型 + BUG)

文章目录 1. 什么是软件测试2. 软件测试和软件开发的区别3. 软件测试和软件调试的区别4. 什么是需求1&#xff09;以需求为依据设计测试用例 5. 测试用例是什么6. 什么是 BUG&#xff08;软件错误&#xff09;7. 五个开发模型1&#xff09;瀑布模型2&#xff09;螺旋模型3&…...

Windows下版本控制器(SVN) - 1、开发中的实际问题+2、版本控制简介

文章目录 基础知识-Windows下版本控制器(SVN)1、开发中的实际问题2、版本控制简介2.1 版本控制[Revision control]2.2 Subversion2.3 Subversion 的优良特性2.4 SVN 的工作原理&#xff1a;2.5 SVN 基本操作 本人其他相关文章链接 基础知识-Windows下版本控制器(SVN) 1、开发中…...

Learning Dynamic Facial Radiance Fields for Few-Shot Talking Head Synthesis 笔记

Learning Dynamic Facial Radiance Fields for Few-Shot Talking Head Synthesis 笔记 摘要 Talking head synthesis is an emerging technology with wide applications in film dubbing, virtual avatars and online education. Recent NeRF-based methods generate more n…...

SpringBoot 项目整合 Redis 教程详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...