广告
返回顶部
首页 > 资讯 > 服务器 >微服务架构拆分策略详解
  • 907
分享到

微服务架构拆分策略详解

2024-04-02 19:04:59 907人浏览 八月长安
摘要

目录1 微服务迁移准备 2 微服务颗粒的拆分策略2.1 基于业务逻辑拆分2.1.1 领域模型拆分2.1.2 用户群体拆分2.2 基于可扩展拆分 2.3 基于可靠性

微服务架构及其演进史

微服务全景架构全面瓦解

前面我们学习了微服务的全景架构,了解到相对于传统单体架构,微服务的优势,以及系统服务化的发展趋势。 

对于新启动的项目,我们在权衡之后可以大方的使用微服务架构。但其实大部分情况下,我们还要去维护一些以前研发的单体系统,这些系统可能因为访问流量的膨胀、功能的扩张而显得非常臃肿不堪,急需要向微服务架构迁移。

1 微服务迁移准备 

1、需对业务充分了解,这是服务拆分,通信设计,资源整合的必要前提。

2、适应微服务架构设计原则:小版本,高速迭代。

3、快速的环境提供能力:依赖于云计算容器技术,快速交付环境。

4、服务合理拆分:需符合团队结构或能逆向影响,能对组织架构进行微调并划分职责。(康威定律和逆康威定律)

5、基本的监控能力:包括基础的技术监控和业务监控。

6、快速的应用部署能力:需要部署管道提供快速的部署能力。

7、devops 自动化运维能力:需要具有良好的持续集成和持续交付能力,还需要对问题、故障的快速响应能力,开发测试和运维能协同工作。

2 微服务颗粒的拆分策略

前面两篇文章我们学习了What & Why(什么是微服务和为什么需要做微服务架构),这一章我们就来探讨如何做微服务架构的拆分(How)。

微服务拆分没有一个绝对的标准答案,服务拆分的粒度需要根据业务场景来规划,而随着业务的发展,原先的架构方案也需要做调整。

虽然没有固定的套路,但是我们在业务实践过程中总结的一些经验,以做参考。

2.1 基于业务逻辑拆分

基于业务逻辑拆分相对好理解一点,典型的单一职责原则,我们将功能相近的业务整合到一个服务颗粒上。比如一个办公领域系统,考勤、工作流、音视频会议是是三个截然不同的业务领域,这可能就是我们拆分的一个入手点。

2.1.1 领域模型拆分

领域驱动设计DDD(Domain-Driven Design 领域驱动设计)是一个很简单的概念,表示我们对系统的划分是基于领域的,也即是基于业务方向去思考的。

举一个典型的电商业务例子。电商的业务体系庞大,涉及各方面的细节。但是我们大概能够根据业务的职能做一个拆分,比如阿里的电商中台业务,包含 用户账号子系统、商品子系统、订单子系统、客户子系统、物流子系统 等。

因为职能不同,这些领域之间包含清晰的界限,所以我们可以按照这个方向将服务于不同领域(商品域和订单域)的子系统拆成独立的服务颗粒。如下图:

2.1.2 用户群体拆分

根据用户群体做拆分,我们首先要了解自己的系统业务里的用户角色领域是否没有功能耦合,有清晰的领域界限。

比如教育信息化系统,教师的业务场景和学生的业务场景,基本比较独立,而且拆分后流量上有明显的削弱,这时候结合具体的业务分析,看是否有价值。如下图所示:

2.2 基于可扩展拆分 

这个需要区分系统中变与不变的部分,不变的部分一般是成熟的、通用的服务功能,变的部分一般是改动比较多、满足业务迭代扩展性需要的功能,我们可以将不变的部分拆分出来,作为共用的服务,将变的部分独立出来满足个性化扩展需要。

同时根据二八原则, 系统中经常变动的部分大约只占 20%,而剩下的 80% 基本不变或极少变化,这样的拆分也解决了发布频率过多而影响成熟服务稳定性的问题。

比如一个电商领域的系统,用户信息、基本商品信息、物流信息 等模块的管理能力和视图界面,一般是比较稳定的;而类似运营活动的功能和页面一般是经常变化的(520、618、双11),会有不同的活动策略和视图界面,需要经常迭代发布。如下图所示< /p>

2.3 基于可靠性拆分

2.3.1 核心模块拆分

我们团队在做Mysql数据库Redis集群拆分的时候,总会把一些重要的模块独立放在一个集群上,不与其他模块混用,而这个独立的集群,服务机性能要是最好的。这样做的目的是,当重要度较低的模块发生故障时,不会影响重要度高的模块。

同要的道理,我们会将  账号信息、登录信息、服务中心等重要度最高的要害模块单独拆分在一个服务颗粒上(因为这类模块不可用之后,整个系统基本完全瘫痪),再做成服务集群,来保障它的高可用。 如下图所示:

2.3.2 主次链路拆分

在各个业务系统中,其实都会有主次业务链路。主业务链条,完成了业务系统中最核心的那部分工作。而次链路是保证其他基础功能的稳定运行。

以电商为例子:商品搜索->商品详情页->购物车模块->订单结算->支付业务,就是一条最简单的主链路。主链路是整个系统的核心主战场,最好的资源跟火力都要放在这里,保证不失守。

一个系统一般有多条核心链路和多条次链路,互相支持构成一个完整的系统。而我们将主次链路进行拆分,主要为了以下几个目标。

异常容错

为主链路建立层次化的降级策略(多级降级),以及合理的熔断策略,这部分我们将在Hystrix服务容错降级的文章中详细解释。

计算资源分配

主链路通常来讲都是高频场景,自然需要更多的计算资源,最主要的体现就是集群里分配的虚机数量多。比如电商场景中特惠专场抢购等。

但是无论是虚机的分配,还是kubernetes的动态扩缩容,应该都需要单独优待,如资源分配倾斜,独立治理等。

服务隔离

主链路是高频且核心的主业务模块,把主链路的服务与其他起辅助作用的业务服务隔离开来,避免次链路服务的异常情况影响到主链路服务。 

2.4 基于性能需求拆分

根据性能需求来进行拆分。简单来说就是访问量特别大,访问频率特别高的业务,又要保证高效的响应能力,这些业务对性能的要求特别高。比如积分竞拍、低价秒杀、**抢购。

我们要识别出某些超高并发量的业务,尽可能把这部分业务独立拆分出来。这么做的原因非常简单,一个保证满足高性能业务需求,另一个保证业务的独立性,不互相影响。 

类似积分竞拍、超低价秒杀、**抢购,对瞬间峰值和计算性能要求是非常高的。这部分的业务如果跟其他通用业务放在一块,一个是可能互相影响,比如某个链路阻塞,会导致雪崩沿调用链向上传递。

另外一个是如果多个业务耦合在一块,发布频率变高、服务扩缩容变难、维护复杂度变高。

3 总结拆分原则

  • 先少后多(微服务数量)、先粗后细(粒度)
  • 基于业务逻辑进行拆分(用户群体、业务领域等模型)
  • 基于可靠性(核心模块独立化、主次链路隔离)
  • 基于性能拆分(独立拆分高性能场景)
  • 接口需保证幂等
  • 接口数据定义严禁内嵌,透传
  • 规范化工程结构,符合微服务风格
  • 不止对计算服务记性拆分,服务层 -> 缓存层 -> 数据层 的逐步拆解,才能发挥最大功效。

以上就是微服务架构拆分策略详解的详细内容,更多关于微服务拆分策略的资料请关注编程网其它相关文章!

--结束END--

本文标题: 微服务架构拆分策略详解

本文链接: https://www.lsjlt.com/news/164096.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 微服务架构拆分策略详解
    目录1 微服务迁移准备 2 微服务颗粒的拆分策略2.1 基于业务逻辑拆分2.1.1 领域模型拆分2.1.2 用户群体拆分2.2 基于可扩展拆分 2.3 基于可靠性...
    99+
    2022-11-13
  • Java微服务架构的重构策略是什么
    本篇内容介绍了“Java微服务架构的重构策略是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.将新功能实现为服务“挖坑法则”(The ...
    99+
    2023-06-16
  • 微服务架构:拆分单体应用的难点
    拆分单体应用为服务的难点从表面上看,通过定义与业务能力或子域相对应的服务来创建微服务架构的策略看起来很简单。但是,你可能会遇到几个障碍:网络延迟。同步进程间通信导致可用性降低。 在服务之间维持数据一致性。获取一致的数据视图。上帝类...
    99+
    2023-06-05
  • SpringCloud 微服务架构详解
    SpringCloud 微服务学习(一) SpringCloud Alibaba1.1、单体 分布式 集群1.2、系统架构的演变1.2.1、单体应用架构1.2.2、垂直应用架构1.2.3、分层架构1.2.4、SOA架构1.2.5、微...
    99+
    2023-08-16
    java 分布式
  • 详解Rainbond内置ServiceMesh微服务架构
    目录ServiceMesh微服务架构对比为何使用ServiceMeshServiceMesh相对其他微服务架构优势最大层度透明学习成本低架构灵活ServiceMesh架构性能Serv...
    99+
    2022-11-13
  • 详解微服务架构及其演进史
    目录1 传统单体系统介绍1.1 单体系统的问题1.2 单体系统的优点1.3 单体服务到微服务的发展过程2 关于微服务2.1 单一职责2.2 轻量级通信2.3 独立性2.4 进程隔离2...
    99+
    2022-11-13
  • 阿里架构师:带你快速理解微服务架构,理解微服务架构的核心
    什么是微服务首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。传统的WEB应用核心分为业务逻辑、适配器以及API或通过UI访问的WEB界面。业务逻辑定义业务流程、业务规则以及领域...
    99+
    2023-06-04
  • 如何理解微服务架构
    因为Martin Fowler和Chris Richardson两位大神的布道,及NetFlix和Amazon公司的实践,国内对于微服务的一些基础问题理解基本一致,但受限于自身单体应用的限制,过度到微服务架构,又要各想办法,具体问...
    99+
    2023-06-05
  • 从0到1搭建后端架构的演进(MVC,服务拆分,微服务,领域驱动)
    目录一、MVC二、服务拆分三、微服务架构四、领域驱动设计产品是一款服务于人力资源的SaaS在线服务,面向HR有Web Android/iOS 小程序多个客户端 后端采用RESTful...
    99+
    2022-11-12
  • SpringCloudHystrix服务降级限流策略详解
    目录前言Hystrix简介Hystrix的使用服务降级system服务控制层System2调System降级场景服务熔断总结前言 前面说到在我们应对高并发的场景,请求量过于大的情况...
    99+
    2023-01-04
    Spring Cloud Hystrix 服务降级限流 Spring Cloud Hystrix
  • 详解多云架构下的JAVA微服务技术解析
    目录微服务生态多云微服务架构的两种方案采用开源微服务框架适配多供应商开发框架微服务生态 微服务生态本质上是一种微服务架构模式的实现,包括微服务开发SDK,以及微服务基础设施。 目前比...
    99+
    2022-11-12
  • 微服务架构之服务注册与发现功能详解
    目录微服务的注册与发现1、服务注册2、服务发现3、注册中心4、现下的主流注册中心4.1 Eureka4.1.1 介绍4.1.2 整体架构4.1.3 接入Spring Cloud4.2...
    99+
    2022-11-13
  • 浅谈架构模式变迁之从分层架构到微服务架构
    目录前言单体架构分布式架构软件设计中的谬误谬误1:网络是可靠的谬误2:时延是0谬误3:带宽是无限的谬误4:网络是安全的谬误5:网络拓扑一成不变谬误6:只有一个网络管理员谬误7:通信成...
    99+
    2022-11-12
  • 分布式微服务云架构实例分析
    今天就跟大家聊聊有关分布式微服务云架构实例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。源码结构JEESZ驱动式项目构建内置高效可靠的代码生成器支持多种数据模型,根据数据库表生成...
    99+
    2023-06-05
  • 详解GaussDB(for MySQL)服务:复制策略与可用性分析
    摘要:本文通过介绍GaussDB(for MySQL)读写路径,分析其可用性。 简介 数据持久性和服务可用性是数据库服务的关键特征。 在实践中,通常认为拥有 3 份数据副本,就足以保证持久性。 但是 3 份副本,对于可用...
    99+
    2020-02-17
    详解GaussDB(for MySQL)服务:复制策略与可用性分析
  • 微服务架构之服务注册与发现实践示例详解
    目录1 服务注册中心4种注册中心技术对比2 Spring Cloud 框架下实现2.1 Spring Cloud Eureka2.1.1 创建注册中心2.1.2 创建客户端2.2 S...
    99+
    2022-11-13
  • 微服务全景架构全面瓦解
    目录1 微服务优势与挑战1.1 微服务的优势1.1.1 单一职责1.1.2 轻量级通信1.1.3 独立性1.1.4 进程隔离1.1.5 混合技术栈和混合部署方式1.1.6 简化治理1...
    99+
    2022-11-13
  • 如何理解Spring Cloud微服务架构
    这篇文章主要讲解了“如何理解Spring Cloud微服务架构”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Spring Cloud微服务架构”吧!...
    99+
    2022-10-19
  • 如何分析Java高可用集群架构与微服务架构
    这篇文章将为大家详细讲解有关如何分析Java高可用集群架构与微服务架构,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 序可能大部分读者都在想,为什么在这以 dubbo、spring...
    99+
    2023-06-16
  • 微服务架构设计RocketMQ进阶事务消息原理详解
    目录前言RocketMQ事务流程概要RocketMQ事务流程关键实现基础配置引入组件添加配置发送半消息执行本地事务与回查消费消息测试总结前言 分布式消息选型的时候是否支持事务消息是一...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作