微服务的利与弊

一、前言

自从大多数web架构从单体演进到服务拆分,到微服务一统天下的几年来,应该没有web应用不是微服务架构的吧。最开始是阿里的doubble分层架构,到后来的SpringCloud全家桶,还有各个大厂自己定义的一套服务治理框架。微服务无处不在,如果你的系统不是微服务的就会被人耻笑落后和垃圾。情况就是这样。微服务确实给web系统开发和治理带来很多的便利性,特别是随着系统越来越复杂的业务。但是是不是业务越复杂也适合用微服务架构呢。显然不是,如果涉及的微服务上千上万,那就有点适得其反。所以个人认为微服务架构适合大中型web项目架构。特别复杂的还有特殊场景下的项目可能并不是很适合。

二、微服务架构要素

 

1、 Provider(服务提供者)绑定指定端口并启动服务

2、提供者连接注册中心,并发本机 IP、端口、应用信息和服务信息发送至注册中心存储

3、Consumer(消费者),连接注册中心 ,并发送应用信息、所求服务信息至注册中心

4、注册中心根据消费者所求服务信息匹配对应的提供者列表发送至Consumer 应用缓存。

5、Consumer 在发起远程调用时基于缓存的消费者列表择其一发起调用。

6、Provider 状态变更会实时通知注册中心、在由注册中心实时推送至Consumer设计的原因:

Consumer 与 Provider 解偶,双方都可以横向增减节点数。注册中心对本身可做对等集群,可动态增减节点,并且任意一台宕掉后,将自动切换到另一台

7、去中心化,双方不直接依赖注册中心,即使注册中心全部宕机短时间内也不会影响服务的调用(Consumer应用缓存中保留提供者 Provider 列表)

8、服务提供者无状态,任意一台宕掉后,不影响使用

注册中心包含如下功能:注册中心、服务注册和反注册、心跳监测与汇报、服务订阅、服务变更查询、集群部署、服务健康状态检测、服务状态变更通知等

三、微服务架构的利与弊

1、单体架构到微服务的演进

2、微服务的优点:

  1. 灵活性高:它将应用程序分解为小型服务(松散耦合),使其开发、维护更快,更易于理解,可以提供更高的灵活性;
  2. 独立扩展:它使每个服务能够独立扩展,将系统中的不同功能模块拆分成多个不同的服务,这些服务进行独立地开发和部署,每个服务都运行在自己的进程内,这样每个服务的更新都不会影响其他服务的运行;
  3. 支持多种编程语言:微服务可通过最佳及最合适的不同的编程语言与工具进行开发,能够做到有的放矢地解决针对性问题;
  4. 自动部署与持续集成工具集成:它允许以灵活的方式将自动部署与持续集成工具集成,例如Jenkins,Hudson等;
  5. 通用性:通过服务实现应用的组件化(按功能拆分、可独立部署和维护),围绕业务能力组织服务,根据业务不同的需求进行不同组件的使用,所做产品非项目化,对于平台具有一定的通用性。

 3、微服务的缺点:

  1. 处理故障难度高:微服务架构是一个分布式系统,必须构建一个相互通信机制并处理部分故障;
  2. 部署工作量大:整体式应用程序可以部署在负载平衡器后面的相同服务器上。但对于微服务,每个服务都有不同的实例,每个实例都需要配置、部署、缩放和监控;
  3. 测试复杂度高:微服务在一定程度上也会导致系统变得越来越复杂,增加了集成测试的复杂度;
  4. 运营成本增加:整体应用可能只需部署至一小片应用服务区集群,而微服务架构可能变成需要构建/测试/部署/运行数十个独立的服务,并可能需要支持多种语言和环境。这导致一个整体式系统如果由20个微服务组成,可能需要40~60个进程;
  5. 发布风险高:把系统分为多个协作组件后会产生新的接口,这意味着简单的交叉变化可能需要改变许多组件,并需协调一起发布。在实际环境中,一个新品发布可能被迫同时发布大量服务,由于集成点的大量增加,微服务架构会有更高的发布风险;
  6. 分布性系统问题:作为一种分布式系统,微服务引入了复杂性和其他若干问题,例如网络延迟、容错性、消息序列化、不可靠的网络、异步机制、版本化、差异化的工作负载等,开发人员需要考虑以上的分布式系统问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【原创】Mac mini M1安装home-brew

Mac mini M1 所需神器 home-brew 按照官网的脚本无法安装。 无奈,从github下载安装包来安装。 Homebrew 结果,还需要先安装 Xcode command 命令行工具 xcode-select --install安装完了,却无法执行。 修改配置文件 cd vi .zshrc添加如下内…

DS二分查找_搜索二维矩阵

Description 使用二分查找法来判断m*n矩阵matrix中是否存在目标值target。 该矩阵有以下特性: 1. 每行中的整数从左到右升序排列; 2. 每行的第一个整数大于前一行的最后一个整数。 Input 第一行输入m和n,分别表示矩阵的行数和列数&#…

Redux,react-redux,dva,RTK

1.redux的介绍 Redux – 李立超 | lilichao.com 2.react-redux 1)react-Redux将所有组件分成两大类 UI组件 只负责 UI 的呈现,不带有任何业务逻辑通过props接收数据(一般数据和函数)不使用任何 Redux 的 API一般保存在components文件夹下容器组件 …

python 自动发送邮件

对于工作中,如果每日需要发送具有规律性的邮件,采用python自动发送可以节约很多时间,提高效率。本文主要以腾讯企业邮箱为例,介绍python自动发送邮件(含附件)的功能。为保护隐私,代码中的邮箱及…

Edge调用Aria2下载

一、准备工作 1、Edge浏览器:Windows系统自带或点击下载;   2、Aria2 gui:点击github下载或自行搜索下载其他版本; 二、启动Aria2 gui 解压下载的Aria2 gui到任意目录,点击“Aria2c启动器”或“AriaNg启动器”皆可。…

jps 这个 Java 工具不存在怎么办

如果在系统中没有找到 jps 这个 Java 工具,通常是因为 Java 安装不完整或者相关的环境变量配置不正确。jps 是 Java Virtual Machine Process Status Tool,用于显示 Java 进程信息。 以下是一些解决方法: 1. 确认 Java 安装: 确…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《“无废”电–氢充能服务区多源微网优化运行模型》

这个文章标题涉及到“无废”电–氢充能服务区、多源微网和优化运行模型。下面我将对标题中的关键术语进行解读: “无废”电–氢充能服务区: 无废电(Waste-free electricity): 这可能指的是通过某种方式生产的电力&…

从零开始学习 JS APL(六):完整指南和实例解析

学习目标: 1. 能够利用正则表达式校验输入信息的合法性 2. 具备利用正则表达式验证小兔鲜注册页面表单的能力 学习内容: 正则表达式 综合案例 阶段案例 学习时间: 周一至周五晚上 7 点—晚上9点周六上午 9 点-上午 11 点周日下午 3 点-下…

短视频系统设计:如何支持三千万用户同时在线看视频?

Java全能学习面试指南:https://javaxiaobear.cn 短视频(short video)通常时长在 15 分钟以内,主要是在移动智能终端上进行拍摄、美化编辑或加特效,并可以在网络社交平台上进行实时分享的一种新型视频形式。短视频具有时…

地图服务 ArcGIS API for JavaScript基础用法全解析

地图服务 ArcGIS API for JavaScript基础用法全解析 前言 在接触ArcGIS之前,开发web在线地图时用过Leaflet来构建地图应用,作为一个轻量级的开源js库,在我使用下来Leaflet还有易懂易用的API文档,是个很不错的选择。在接触使用Ar…

简单地将附件POST到Notes应用中

大家好,才是真的好。 这半年我们会讲很多开发知识,这篇紧接上篇《通过URL将HTML表单数据创建到Domino应用中》,讲述如何将附件POST到Note应用中。 原理是一样,首先,你得有一个表单,我们用html写一个&…

Android 缩减、混淆处理和优化应用

为了尽可能减小应用的大小,您应在发布 build 中启用缩减功能来移除不使用的代码和资源。启用缩减功能后,您还会受益于两项功能,一项是混淆处理功能,该功能会缩短应用的类和成员的名称;另一项是优化功能,该功…

云HIS:新一代云架构医院信息管理系统源码(java语言)

云HIS信息管理云平台,提供全方位的临床系统应用,是国内领先的以云计算为基础,以云计算赋能医疗机构,是颠覆传统医疗信息化业态的技术与模式创新,以SaaS方式,为医疗机构提供信息系统服务,满足从医…

HashMap系列- key到i的转换

1.key转换成hash >>>表示无符号的右移:按照二进制把数字右移指定数位,高位直接补零,低位移除。 ^(按位异或运算):运算规则:相同的二进制数位上,数字相同,结果…

Deep Learning(wu--84)调参、正则化、优化--改进深度神经网络

文章目录 2偏差和方差正则化梯度消失\爆炸权重初始化导数计算梯度检验OptimizationMini-Batch 梯度下降法指数加权平均偏差修正RMSpropAdam学习率衰减局部最优问题 调参BNsoftmax framework 2 偏差和方差 唔,这部分在机器学习里讲的更好点 训练集误差大&#xff…

基数排序简单了解

基数排序是根据数字每一位从低到高去进行分类排序的 比如对于数组[1, 11, 2, 12],从个位数开始,1和11分到了桶1,2和12分到了桶二,接着十位数,1和2分到了一桶,但由于在上一次分桶中,2在1之后&am…

【生信分析】基因组学导论

由于工作需要,现在开始跨行学生信! 祝我成功 目标:通过一周的学习能对对不同高通量测序数据集(RNA-seq、ChIP-seq、BS-seq 和多组学集成)进行分析。 配置环境 if (!requireNamespace("BiocManager", quiet…

详解ES6中的symbol

ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。 Symbol的值是唯一的, 用来解决命名冲突的问题; 它是JavaScript 语言的第七种数据类型,是一 种类似于字符串的数据类型; 特点如下: 创建唯一值&#xff1…

二叉树的前、中和后序遍历的递归与迭代实现

1. 前序遍历 1.1 递归 /*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val (valundefined ? 0 : val)* this.left (leftundefined ? null : left)* this.right (rightundefined ? null : right)* }*/ /*** param …

Vue学习笔记-activated和deactivated生命周期

作用 路由组件所独有的2个生命周期 activated生命周期函数用于在路由组件每次由消失到出现时所调用的函数deactivated生命周期函数用于路由组件每次由出现到消失时(无论是否缓存)所调用的函数 案例 定义一个NewsVue组件,要求:…