首页 > 其他分享 >架构与思维:微服务架构的思想本质

架构与思维:微服务架构的思想本质

时间:2024-11-13 19:31:45浏览次数:1  
标签:思维 服务 系统 业务 本质 拆分 链路 架构

架构与思维:微服务架构的思想本质

 

我们为什么需要微服务架构,它一定是为了解决我们某些问题才出现了。这篇文章我们讨论下微服务架构模式所解决的问题,带来的挑战,以及他的核心思想本质。

1 早期的服务架构

image
上图是一个典型的服务分层架构:
Client: 调用方是browser web或者App
应用层: 实现计算层的业务逻辑,从上游数据层获取数据,对下游Client返回html/json/File等
数据-缓存层: 提高访问数据的性能
数据-数据库层: 持久化数据层

2 它存在的问题

1. 重装单体模式
如果是电商类型的系统,以上的架构明显需要把 用户登录、商品浏览、下单、结算、支付、订单查询都实现在一个系统里面,实在笨重。

2. 流量和并发量限制
当系统的流量或并发量达到一定的阈值,比如日活跃用户数量超过百万,或者每秒请求数(QPS)达到数千甚至更高时,传统的单体架构可能难以支撑如此高的负载。

3. 迭代频率
如果业务需求变更非常频繁,例如每周两次以上甚至每天都有新的功能需要上线,那么整个系统要全量发布,不论你的模块是不是变更了。难顶哟!

4. 系统难以扩展
当系统需要快速扩展以满足业务增长时,微服务架构可以更容易地实现水平扩展。

4. 耦合度和依赖关系
如果旧系统中的模块之间存在高度的耦合和复杂的依赖关系,这可能导致维护和升级变得困难。

5. 缺失故障隔离和容错能力
如果系统中的某个模块出现故障,是否会影响到整个系统的正常运行?答案是肯定的

3 微服务架构的演进

上面的问题,明显是日益膨胀的功能模块和流量规模对单体架构系统的挑战,如果不优化,将衍生出一系列的问题。
我们可以通过微服务架构演进,对系统逐步的升级。以下是我们在业务实践过程中总结的一些经验,予以参考。

3.1 基于业务逻辑拆分

基于业务逻辑拆分相对好理解一点,典型的单一职责原则,我们将功能相近的业务整合到一个服务颗粒上。

业务领域模型拆分
举一个典型的电商业务例子。电商的业务体系庞大,涉及各方面的细节。但是我们大概能够根据业务的职能做一个拆分,比如阿里的电商中台业务,包含 用户账号子系统、商品子系统、订单子系统、客户子系统、物流子系统 等。
因为职能不同,这些领域之间包含清晰的界限,所以我们可以按照这个方向将服务于不同领域(商品域和订单域)的子系统拆成独立的服务颗粒。如下图:
image

用户群体拆分
根据用户群体做拆分,我们首先要了解自己的系统业务里的用户角色领域是否没有功能耦合,有清晰的领域界限。
比如教育信息化系统,教师的业务场景和学生的业务场景,基本比较独立,而且拆分后流量上有明显的削弱。如下图所示:
image

3.2 基于可扩展拆分

这个需要区分系统中变与不变的部分,不变的部分一般是成熟的、通用的服务功能,变的部分一般是改动比较多、需要不断满足业务迭代扩展性需要的功能。
根据二八原则,系统中经常变动的部分大约只占 20%(如 运营、活动),而剩下的 80% (用户信息、基本商品信息、物流信息 等模块的管理能力和视图界面)基本不变或极少变化。如下图所示:
image

3.3 基于可靠性拆分

核心模块拆分
我们团队在做MySQL数据库和Redis集群拆分的时候,总会把一些重要的模块独立放在一个集群上,不与其他模块混用,而这个独立的集群,服务机性能要是最好的。这样做的目的是,当重要度较低的模块发生故障时,不会影响重要度高的模块。同样的道理,我们将账号、支付等核心服务单独拆分在一个服务颗粒上,建立独立服务集群,保证资源独享,来提升可用性。 如下图所示:
image

主次链路拆分
在各个业务系统中,其实都会有主次业务链路。主业务链条,完成了业务系统中最核心的那部分工作。而次链路是保证其他基础功能的稳定运行。
以电商为例子:商品搜索->商品详情页->购物车模块->订单结算->支付业务,就是一条最简单的主链路。主链路是整个系统的核心主战场,最好的资源跟火力都要放在这里,保证不失守。
image
这样的拆分模式保障了核心链路的计算资源分配优先、异常容错处理优先、服务隔离保护等等。

3.4 基于性能需求拆分

根据性能需求来进行拆分。简单来说就是访问量特别大,访问频率特别高的业务,又要保证高效的响应能力,这些业务对性能的要求特别高。比如积分竞拍、低价秒杀、限量抢购。
我们要识别出某些超高并发量的业务,尽可能把这部分业务独立拆分出来。
image

4 代价

分布式系统的固有复杂性
微服务架构是基于分布式的系统,而构建分布式系统必然会带来额外的性能开销和可靠性挑战。
服务的依赖管理和测试
在单体应用中,通常使用集成测试来验证依赖是否正常。而在微服务架构中,单元测试和整条服务链路的可用性都需要关注。
有效的配置版本管理
需要引入配置的版本管理、环境管理。
自动化的部署流程
有效地构建自动化部署体系,配合服务网格、容器技术,是微服务面临的另一个挑战。
对于DevOps有更高的要求
开发者也需承担起整个服务的生命周期的责任,包括部署、链路追踪、监控。构建全功能的团队,也是一个不小的挑战。
运维成本飙升
运维主要包括配置、部署、监控与告警和日志收集四大方面。微服务架构中,每个微服务粒度都需要独立地配置、部署、监控和收集日志,成本呈指数级增长。服务化粒度越细,运维成本越高。

5 微服务架构思想本质

最终的微服务架构可能是这种状态:
image

所以我们可以看出微服务架构的本质应该有如下几个:

  • 风险隔离: 高度自治和高度隔离,明显不让低等级的服务影响高等级
  • 分治原理: 单个服务的吞吐始终是有限的,通过微服务拆分可以突破扩展上限,分拆流量可支撑全球化的业务,不再受机房规模甚至地域影响
  • 单一职责: 单体系统逐渐演变成具有单一职责的细粒度微服务

标签:思维,服务,系统,业务,本质,拆分,链路,架构
From: https://www.cnblogs.com/sexintercourse/p/18544632

相关文章

  • DNS在架构中的使用
    DNS在架构中的使用 1介绍DNS(DomainNameSystem,域名系统)是一种服务,它是域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP地址数串。简单来说,DNS就是一个将我们输入的网址(比如www.baidu.com)转换成对应的IP地址(比如192......
  • 弹性伸缩:高可用架构利器(架构+算法+思维)
    弹性伸缩:高可用架构利器(架构+算法+思维) 1介绍云计算资源弹性伸缩是一种根据业务需求动态调整计算资源规模的技术。它可以根据系统的性能指标(如CPU使用率、内存占用率、磁盘IO、网卡读写率、请求响应时间等)或者预定义的规则(如时间周期、业务事件等),自动增加或减少计算资源的......
  • 微架构
    在硬件加速器中,微架构(Microarchitecture)指的是计算设备(如CPU、GPU、TPU等)内部的硬件设计和组织结构,它定义了硬件组件之间的具体布局、操作方式以及彼此如何交互。微架构可以视为硬件在逻辑层面的实现方式,确定了如何实现指令集架构(ISA)的细节。在微架构中,典型的组成部分包括:指令流......
  • 架构师之路-学渣到学霸历程-58
    Nginx的反向代理实验今天分享的实验其实就是一个变形;变形uri看看nginx的配置有什么区别;这个就更加绕,是比较不同的配置路径会有什么的区别?来看看这个变形会得出什么的效果1.首先配置后端服务器的资源首页资源–>192.168.75.73的配置如下#设置别名-->偷懒而已[root@Lin......
  • AI 产品的四层架构:开启智能未来的密码
    在人工智能飞速发展的今天,AI产品正逐渐渗透到我们生活的方方面面,从智能助手到自动驾驶,AI的应用正不断拓宽我们的想象边界。但构建一个成功的AI产品并非易事,它需要深入理解AI产品的架构和开发流程。AI对我们来说已经不算是新鲜词了,尤其是ChatGPT发布后,关于AI、大模型的讨论......
  • NGINX负载均衡实战教程:打造高可用性架构 转载
    nginx负载均衡nginx负载均衡介绍反向代理与负载均衡nginx负载均衡配置Keepalived高可用nginx负载均衡器修改Web服务器的默认主页开启nginx负载均衡和反向代理安装Keepalived配置Keepalived编写脚本监控Keepalived和nginx的状态配置keepalived......
  • DDCA —— 内存架构和子系统&存储器控制器
    1.内存架构和子系统1.1如何控制访问?访问控制:存储单元的访问是通过访问晶体管(accesstransistors)进行控制的。访问晶体管像开关一样,可以连接或断开存储单元和位线(bitline)的连接。存取控制由字线(wordline)控制。当字线激活时,访问晶体管开启,允许存储单元的数据流入或流出......
  • 初学者的深度学习指南:核心概念、模型架构与实践路径
    初学者的深度学习指南:核心概念、模型架构与实践路径深度学习作为人工智能的一个重要分支,近年来在图像识别、自然语言处理、语音识别和自动驾驶等领域取得了突破性进展。深度学习通过多层神经网络的结构来模仿人脑的学习方式,处理复杂的非线性问题,识别隐藏在数据中的模式。它......
  • Linux CPU 拓扑结构之调度域 调度组 - 以8核ARM big.Little架构处理器为例
    CPU拓扑结构简介SMTLevel超线程处理器的一个核心MCLevel多核CPU的一个核心DIELevel一个物理CPU的晶片(注意不是package,package是封装好了的,肉眼看到的CPU处理器)(覆盖系统所有的CPU(CPU0~CPUN))cpu最小级别的就是超线程处理器的一个smt核,次小的一级就是一个多核cpu......
  • Flutter【05】企业级Flutter架构实践
    企业级Flutter架构实践:多端统一的移动应用解决方案一、架构概述本文介绍一个完整的企业级Flutter应用架构设计,采用三层架构模式,实现了Android、iOS和Web多端统一开发。二、架构层次详解2.1宿主层宿主层是整个应用的容器层,负责承载Flutter模块:移动端集成Android端通......