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

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

时间:2024-07-16 09:21:24浏览次数:8  
标签:思维 服务 系统 业务 本质 拆分 链路 架构

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

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/wzh2010/p/18031177

相关文章

  • 信创学习笔记(三),信创之操作系统OS思维导图
    创作不易只因热爱!!热衷分享,一起成长!“你的鼓励就是我努力付出的动力”title!!#f1c232点击上方蓝色小字即可一键关注!!!!#f1c232创作不易只因热爱!!:::primary!18热衷分享,一起成长!:::^**你好呀,我是卫码士。一个医信行业工程师,喜欢学习,喜欢搞机,喜欢......
  • lamp基本架构+wordpress
    一、安装并设置MariaDB1、时钟同步先安装chrony,重启并设置enable,最后同步yum-yinstallchrony2、安装mariadb和httpdyum-yinstallhttpdmariadbmariadb-server将httpd和mariadb重新启动并enable3、设置mariadb数据库进入数据库进行初始化mysql_secure_......
  • MySQL高级应用指南:从数据库设计到高可用架构
    引言欢迎阅读这篇MySQL文章本文旨在帮助你更深入地了解和掌握MySQL数据库的高级应用技术通过一些实际的开发案例和代码示例你将能够更好地运用MySQL进行复杂的数据操作和管理分类教程一数据库设计与优化在设计和优化数据库时需要考虑到表结构(TableStructure)索引(I......
  • Equal Cut (AtCoder - arc100_b)(前缀和,思维)
    题目来源:https://atcoder.jp/contests/abc102/tasks/arc100_b?lang=en//题意:将一串数字分为四段,求出每段的总和,怎么分,才能让这四段的各自总和的极差最小?//思路:“实在是想不出来好的算法,只会暴力,当时想的枚举中间的那一刀,然后左右二分,但是感觉也不太好写,毕竟我总是被二分的边界......
  • Serverless无服务应用架构纵横谈2:边缘计算激战正酣
     Serverless无服务应用架构纵横谈2 前言6年前,我写了一篇《Serverless无服务应用架构纵横谈》。文中说到无论是公有云FaaS还是私有云FaaS,都不是云计算的未来。因为无论是Kubernetes还是PHP、Python、Node这些传统技术栈都太重了。那么,6年来,Serverless又有了哪些变化,是否有......
  • 初涉项目架构
    初涉项目架构了解传统项目与互联网项目的区别传统项目指OA、HR、CRM这种,互联网项目则是常见的app首先是受众(服务对象)不同,传统项目是面向公司、学校等群体,互联网项目则是面向全体网民两种对象数量不同,差异较大两种对象对产品的忍耐力不一样互联网项目特点:用户多、......
  • .NET MAUI开源架构_2.什么是 .NET MAUI?
    1.什么是.NETMAUI?             .NET多平台应用UI(.NETMAUI)是一个跨平台框架,用于使用C#和XAML创建本机移动和桌面应用。使用.NETMAUI,可从单个共享代码库开发可在Android、iOS、macOS和Windows上运行的应用。         .NETMAUI是......
  • CentOS 7.9 arm64架构配置在线yum源 —— 筑梦之路
    阿里云源cat<CentOS-aliyun.repo<<'EOF'#CentOS-Base.repo##ThemirrorsystemusestheconnectingIPaddressoftheclientandthe#updatestatusofeachmirrortopickmirrorsthatareupdatedtoand#geographicallyclosetothecli......
  • 【SeverLess】架构下状态管理常用方法
    Serverless架构的核心优势之一就是它能够自动扩展和减少资源,以适应应用的需求。然而,这种架构的一个挑战是状态管理。由于Serverless函数通常是无状态的,这意味着每次函数执行时,它们都从一个干净的状态开始,不保留任何关于前一次调用的信息。对于需要持久化状态的应用,Serverle......
  • 企业网三层架构
    企业网三层架构:是一种层次化模型设计,旨在将复杂的网络设计分成三个层次,每个层次都着重于某些特定的功能,以提高效率和稳定性。企业网三层架构层次:接入层:使终端设备接入到网络中来,提供接入端口并增加端口密度汇聚层:汇聚接入层收集的流量,并作为STP的根网桥和终端设备的网关核心......