微服务的优点及在云原生时代的合理落地方式

news2024/12/25 9:36:08

云计算de小白

那么,微服务到底能给业务带来什么好处?在云原生时代,如何更合理地实现微服务?

架构没有好坏之分,只有适合与不适合。然而,当我们对比微服务架构与单体架构时,可以发现微服务有以下优势:

首先,微服务独立运行,以进程的方式进行隔离,可以有效控制故障范围,使架构更加可靠。

其次,微服务架构的整体可用性更高,因为故障被有效隔离,减少了单点故障对整个系统的影响。

而且微服务的粒度更小,架构演进的影响也更小,不需要大规模重构,只需要对个别微服务进行调整。

然后,可以以服务为粒度实现微服务架构,通过接口共享和重用,具有更高的可重用性。然后,可以以服务为粒度根据服务对资源的需求进行微服务架构的扩展,扩展性更加灵活。最后,服务拆分后,每个服务可以独立开发、测试、并行部署,大大提高交付效率,加快产品更新速度,提供更好的用户体验。

图片

图片

1. 团队调整

团队需要进行重组,以服务为核心,按照业务领域划分全功能团队,同时改变原有的研发流程和决策机制。比如要倡导敏捷文化,实现快速迭代,多做自动化测试,加强代码评审等工作。另外,微服务框架可以封装和抽象一些分布式场景下的通用能力(比如负载均衡、容错、远程通信等),方便开发者快速开发出高质量的服务。因此,在采用微服务之前,应该对微服务架构进行选择、学习和试用,让整个团队储备一定的微服务相关知识。

2.基础设施建设

基础设施即代码可以通过编程来管理虚拟机或容器,无需手动配置和更新每一台硬件,让基础设施变得弹性十足,实现快速、高效、准确的可重复操作。开发者可以使用同一套代码或配置来部署和管理大量物理机。

另外,当服务数量增多,交付频繁时,故障数量可能会大幅增加,因此需要构建完善的监控体系,及时发现故障并进行处理。当生产环境出现问题时,需要对故障进行分类,评估影响范围,然后分配给相应的负责人。

微服务架构的一大优势就是交付快,既体现在服务粒度更小,也体现在整体流程更快。因此需要构建基于自动化的工具链,以流水线交付的方式串联整个 DevOps 流程,这样小团队就可以基于服务独立开发、测试、部署、运维。这两点并不是采用微服务模式的必要充分条件,但如果能满足,微服务流程就会更加顺畅,后续的维护和迭代也会变得轻松而不是困难。

还有一点需要注意的是,微服务要随着业务的发展逐渐拆分。几乎所有成功的微服务架构都是从庞大的单体架构中拆分出来的,而几乎所有从头开始构建微服务架构的案例,在后来都遇到了很大的困难。面对新的业务和领域时,我们很难在一开始就把业务梳理得非常清楚,往往是经过一段时间、经过一些挫折之后,业务的内部架构才逐渐清晰起来。从现有的模块清晰的单体架构中逐渐划分服务,比从头构建微服务要简单得多。否则,会有两个弊端:第一,第一个版本的交付时间会因为需要构建很多公共服务而大大延迟;第二,服务很容易被不合理地拆分,严重影响整个调用流程的性能,甚至可能需要花费很大的精力去处理分布式事务,最后不得不将多个微服务重新整合成一个单体。

而且只有当业务复杂度达到一定程度时,微服务架构所消耗的成本才会体现出优势。微服务设计应遵循垂直分工优先的原则,让团队自上而下专注于业务实现,端到端负责,避免跨服务多次调用带来的性能和沟通成本。

图片

图片

1. 选择正确的时间

在实际实施过程中,想要享受微服务带来的好处,需要做一些前期的准备。比如,组织架构和团队文化要适应云原生的节奏,足够敏捷和自主;打造功能齐全的团队,产品、UI、前后端研发、测试等角色配备齐全;提前构建自动化流水线,实现一键构建、发布、部署和快速扩缩容功能;服务也必须提前容器化部署,因为服务容器化更利于云原生场景下其他功能组件的集成。当以上所有准备工作都完成,业务逐渐发展到一定规模,迫切需要拆分时,就该果断进行微服务拆分和架构设计了。

2. 选择正确的微服务框架

目前主流的微服务框架主要分为两类:侵入式和非侵入式。

主流的侵入式框架有Spring Cloud、Dubbo、brpc等,这些框架功能特点不同,应用场景不同,大部分架构师都比较熟悉,社区和文档也比较成熟。虽然传统侵入式微服务框架如Spring Cloud存在版本碎片化严重、升级成本高等问题,但总体上可以满足大部分服务治理需求。

现在大多数人都比较关注非侵入式框架的选型,也就是近几年兴起的 Service Mesh 技术。2017 年随着 Linkerd 的推出,Service Mesh 翻译成服务网格,开始进入国内社区的视野。一些大公司也同步开发了自己的适合公司内部应用场景和依赖关系的 Service Mesh 框架,助力内部服务的快速迭代和发展。

Istio 作为一个开源的 Service Mesh 框架,自推出以来就备受关注,成为各大厂商和开发者热议的话题。很多人认为 Istio 将成为继 Kubernetes 之后的又一明星产品。有了 Istio,基本就不需要其他微服务框架了,也不需要自己去实现服务治理等功能了,只要把网络层的事情交给 Istio 就可以完成这一系列工作。简单来说,Istio 就是一个提供服务治理能力的服务网格。

此外,Istio 还具备全面的可观察性能力,包括对网格控制下的所有流量进行自动测量、日志记录和跟踪。换句话说,通过选择 Istio,单体应用无需任何修改就可以轻松接入微服务,享受云原生的福利。

3.借助云厂商产品快速落地云原生和微服务

之所以提到云厂商,是因为大部分中小型公司或者传统行业都被单体应用和传统微服务框架的种种弊端所困扰,迫切需要云原生和微服务化改造,但又缺乏足够的人力和技术去维护一套功能齐全的云原生基础和基础设施服务。以Istio框架为例,其版本更新频繁,控制面和数据面在提供强大功能的同时,其代码实现也相当复杂,当出现异常时,很多工程师往往难以定位问题所在。云厂商提供了一整套云原生应用编排和微服务管理解决方案,所有技术都已经产品化,使用简单、效果易于查看,还能避免或快速解决运行过程中可能遇到的各种问题。这在一定程度上不仅提高了服务效率,还大大降低了各种成本,让人们能够快速充分地享受到云原生带来的好处。

总体来说,任何软件或架构都有其优缺点,没有十全十美的东西。在考虑是否实施微服务时,需要思考和权衡当前的软件和系统是否满足微服务改造的前提条件,微服务改造带来的好处是否大于损失,利大于弊,团队是否各方面都准备好了。如果还没准备好,那不妨再等等,毕竟单体架构也有自己的优势。

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

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

相关文章

【【通信协议之UDP协议】】

通信协议之UDP协议 UDP (user Datagram Protocol )用户数据报协议 整个的UDP数据格式 如下所示 TCP协议与UDP协议的区别 TCP协议面向连接,是流传输协议,通过连接发送数据,而 UDP 协议传输不需要连接,是数据包协议 …

[3]Opengl ES着色器

术语: VertexShader:顶点着色器,用来描述图形图像位置的顶点坐标; FragmentShader:片元着色器,用来给顶点指定的区域进行着色; Vertex:顶点 Texture:纹理…

【中级通信工程师】终端与业务(十一):市场营销计划、实施与控制

【零基础3天通关中级通信工程师】 终端与业务(十一):市场营销计划、实施与控制 本文是中级通信工程师考试《终端与业务》科目第十一章《市场营销计划、实施与控制》的复习资料和真题汇总。本章的核心内容涵盖了市场营销计划的编制、实施过程以及控制方式&#xff0…

【Java异常】(简简单单拿捏)

【Java异常】(简简单单拿捏) 1. 异常的简单介绍2. 异常的抛出2.1 语法 3. 异常的处理3.1 异常声明throws3.2 try-catch捕获并处理 4. 例子(try-catch自定义异常) 1. 异常的简单介绍 程序员在运行代码时会遇到很多异常&#xff0c…

Python :AVIF 图片与其他图片格式间的批量转换

图片格式 AVIF转换为常见的格式,比如 JPG 或 PNG。本文介绍如何使用 Pillow 库实现AVIF与其他格式的相互转换。 环境配置 使用 Python 环境管理工具 conda 和常用库 Pillow 来处理图片格式转换。环境的详细信息: Conda: 24.7.1Python: 3.8.19Pillow: 10…

【HTML|第1期】HTML5视频(Video)元素详解:从起源到应用

日期:2024年9月9日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉在这里插入代码片得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对…

plt绘图日常训练

目录 练习1练习2练习3练习4练习5 前几节课已经介绍plt常用的函数,这节课主要是一些练习,方便大家熟悉 练习1 主要学习plt.figure()及plt的基本操作 import matplotlib.pyplot as plt import numpy as npxnp.linspace(-3,3,50) y1 2*x1 y2x**2plt.figur…

Windows下安装 LLama-Factory 保姆级教程

本机配置 品牌:联想拯救者Y9000x-2022CPU:12th Gen Intel Core™ i7-12700H 2.30 GHzRAM:24.0 GB (23.8 GB 可用)GPU: NVIDIA GeForce RTX 3060 Laptop GPU 6GCUDA版本:12.3 (可以在PowerShell下输入 nvidia-smi 命令…

短剧向左,体育向右,快手前途未卜?

最近,辗转于多项业务的快手收到了来自于市场“寓褒于贬”的评价。 麦格理发表报告表示,短剧业务正成为快手近期新的增长动力,亦维持对快手的正面看法,给予“跑赢大市”评级,预期上市前投资者出售2%股份对基本面没有太…

深入理解 `torch.nn.Linear`:维度变换的过程详解与实践(附图、公式、代码)

在深度学习中,线性变换是最基础的操作之一。PyTorch 提供了 torch.nn.Linear 模块,用来实现全连接层(Fully Connected Layer)。在使用时,理解维度如何从输入映射到输出,并掌握其具体的变换过程,…

更改远程访问端口

1、背景 在客户现场,由于安全限制,在内网的交换机中配置的某些限制,不允许使用22端口作为远程访问服务器的端口,此时就需要更改远程访问的端口。 2、前提 在修改默认的远程访问端口22时,可以需要在Linux服务器中支持…

三.python入门语法1

目录 1. 算数运算和关系运算 1.1. 算术运算符 1.2. 关系运算符 习题 2.赋值运算和逻辑运算 2.1. 赋值运算符 2.2. 逻辑运算符 3.位运算符 1)位与运算(A&B) 2)位或运算(A|B) 3)异或位…

uni-app运行到 Android 真机和Android studio模拟器

文章目录 1、运行到Android 真机2、运行到Android studio模拟器2.1、运行到Android studio模拟器Android studio的安装步骤2.2、安装android SDK2.3、新增虚拟设备2.4、项目运行 3、安装报错3.1、安卓真机调试提示检测不到手机【解决办法】3.2、Android Studio中缺少System Ima…

OpenCV与AI深度学习 | 实战 | 使用OpenCV和Streamlit搭建虚拟化妆应用程序(附源码)

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:实战 | 使用OpenCV和Streamlit搭建虚拟化妆应用程序(附源码) 现看看demo演示。 本文将介绍如何使用Streamlit和OpenCV…

Excel锁定单元格,使其不可再编辑

‌在Excel中,锁定单元格后仍然可以编辑‌,这主要涉及到对特定单元格或区域的锁定与保护工作表的设置。以下是实现这一功能的具体步骤: ‌解除工作表的锁定状态‌:首先,需要全选表格(使用CtrlA快捷键&#x…

C语言进程

什么是进程 什么是程序 一组可以被计算机直接识别的 有序 指令 的集合。 通俗讲:C语言编译后生成的可执行文件就是一个程序。 那么程序是静态还是动态的? 程序是可以被存储在磁盘上的,所以程序是静态的。 那什么是进程 进程是程序的执行过…

VS code 使用 Jupyter Notebook 时显示 line number

VS code 使用 Jupyter Notebook 时显示 line number 引言正文引言 有些时候,我们在 VS code 中必须要使用 Jupyter Notebook,但是默认情况下,Jupyter Notebook 是不显示 Line number 的,这对于调试工作的定位是不友好的,这里我们将介绍如何让 Jupyter Notebook 显示 Line…

认识联合体和枚举

目录 一.联合体 1.联合体的声明 2.联合体的特点 (一)内存共享 (二)大小等于最大成员的大小 另一特殊情况: (三)一次只能使用一个成员 3.联合体相比较于结构体 (一)内存分配 …

c++反汇编逆向还原指令add sub imul idiv cdq

add 加法指令 比如add a,b 逆向还原为aab; sub 减法 比如sub a,b 逆向还原为aa-b; imul 乘法 比如sub a,b 逆向还原为aa*b; idiv 除法 比如sub a,b 逆向还原为aa/b; cdq 在x86 汇编中,用于扩展 eax 寄存器的符号位…

基于python深度学习遥感影像地物分类与目标识别、分割实践技术

我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB,遥感大数据时…