四种常用的微服务架构拆分方式

2023-11-05

微服务架构并无标准架构,不然什么架构师大会也不会各个系统架构百花齐放了。虽然没有固定的套路,却有一些经验,今天就来做一个总结。

基于角色拆分

这种拆分方式常见于基础设施以及其PaaS层的架构,比如服务治理k8skafka。所谓基础组件的PaaS层是说,基础设施本身主要作为基础设施使用,是IaaS层。但是基础设施本身需要维护功能,需要增删改查等运维操作。业界基于开源做的二次开发也着重在做这方面的工作。

下面以kafka做说明。因为要上升到PaaS层,下图基于美团对kafka的二次开发封装,产品名叫mafka

03039c1ff3452b6cbffc5a63728cad6f.png

咱们直接看★标注的部分mafka-manager,这个就是运维操作统一管理端。充当的就是管理者的角色。再看看kafka其他组件的名称:生产者( producer )、消费者( consumer )、经纪人( broker )。核查员( monitor )。架构的组织都是根据角色来来划分的。

为什么我要将mafka-manager用★标注呢。因为不管是基础设施还是别的,以产品化的观点,需要对外提供一个完整的产品体验。完整的产品包含什么呢?统一的产品外观、统一的接口定义、统一的服务运营。

我们要接入mafka,虽然最终程序里要用的是生产者、消费者这些,但是第一步都要在mafka-manager对应的界面上申请。mafka-manager类似于网关入口的角色。业界有专门把这些接口服务抽象出来叫做api网关。

k8s架构中,api网关这个概念更加明显一些。

a9080d79298152aa2f91038ae14d3006.png

kubectl是k8s的控制台命令交互界面、web UI是浏览器交互界面,不同的交互界面会走统一的api server。这里api server就是api网关服务。

基于可扩展性拆分

首先来了解一下AKF扩展立方体。


AKF扩展立方体(Scalability Cube),是《架构即未来》一书中提出的可扩展模型,这个立方体有三个轴线,每个轴线描述扩展性的一个维度:

X轴 —— 代表无差别的克隆服务和数据,工作可以很均匀的分散在不同的服务实例上;

Y轴 —— 关注应用中职责的划分,比如数据类型,交易执行类型的划分;

Z轴 —— 关注服务和数据的优先级划分,如分地域划分。

7369428762adf6d0a980b0c6e62b4c81.png

白话来说:X轴拆分就是通过加机器水平拆分;Y轴拆分就是按业务逻辑垂直拆分;Z轴拆分就是按照算法进行分片,这个算法比如按地域,不同地域访问不同的分片或者服务。

举个例子,比如一般公司的redis集群会有一个团队来进行统一维护。redis集群有主有从,数据都是一样的,多副本容灾,这是X轴水平的拆分。一个公司很多业务,redis团队会对不同的业务提供不同的集群,这是Y轴垂直拆分;集群内部数据会通过sharding做分片,这是Z轴算法拆分。

基于稳定性拆分

在业务架构中,通常会通过核心模块的划分或者主次链路的划分来进行微服务拆分。

在《三平面分离架构》中,我提到过分离出控制平面、数据平面和管理平面。这本质上也是通过核心模块划分来进行拆分的一种方式。控制平台一般是核心链路,核心数据作为控制逻辑的一部分可以通过本地缓存等措施弱依赖于数据平面。管理平台是后台管理等,用于增删改查,人工操作时才用,其他时间挂掉都没关系。

基于资源需求拆分

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

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

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

另外一个是如果多个业务耦合在一块,发布频率变高、服务扩缩容变难、维护复杂度变高。如下图例子所示,订单服务是一个性能要求高的服务,一般会单独拆分。

59c26450994cfce85769c302e3eef37c.png


总结

咱们实际工作中,通常会发现一种拆分方式和另一种拆分方式并不冲突。一个完整的架构也不只使用了一种拆分方式。领域驱动设计(DDD)中简单易用的10种技巧也可以配合来使用。

本文提到的api网关严格上不是业务划分时的一个模块。业界通常把api网关作为一个基础设施。如果在架构图中包含了api网关通常是下图所示:

6b05c1331f400f385e59484093b28a04.png

上图中的架构既包含了业务逻辑的业务划分,也有配置中心、注册中心这样的技术划分。总体上来说是一个技术架构图。而api网关本身也更多被归为是技术概念,而不是业务概念。

在《尤娜系统的第一次飞行中换引擎的架构垂直拆分改造》中,首先就拆分出来了api网关层,这说明尤娜要下一盘大棋,最终对外会提供一个统一的产品。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

四种常用的微服务架构拆分方式 的相关文章

随机推荐

  • Android 状态栏、标题栏、屏幕高度

    http xqjay19910131 yahoo cn iteye com blog 1435249 android 状态栏 标题栏 屏幕高度 博客分类 android app 1 获取状态栏高度 decorView是window中的最顶层
  • VS2019配置Qt5.14.2以及在线配置Qt5.15.2

    简单记录下配置过程 一 配置Qt5 14 2 1 官网下载QT Index of archive qt 5 14 5 14 2 2 下载后 双击exe进行安装 博主这里安装到了目录D Qt Qt5 14 2 结合自己的路径 完毕后 环境变量
  • php关注获取微信code,基于PHP方法,微信公众号小程序获取code,access_token,openid,用户信息...

    发起获得code值链接 public function doPageGetcode appid yourappid 修改你的appid if appid return this gt result 10008 参数错误 这里的 redire
  • 蓝桥杯(Java) -day03

    1 蓝桥杯 Java day01 2 蓝桥杯 Java day02 一 滑行 蓝桥杯 2023省赛模拟题 滑行 问题描述 小蓝准备在一个空旷的场地里面滑行 这个场地的高度不一 小蓝用一个 n 行 m 列的矩阵来表示场地 矩阵中的数值表示场地
  • Flutter 图片选取及裁剪

    在开发项目里修改用户头像的功能 涉及到图片选取及裁剪 基本实现步骤如下 1 pubspec yaml 添加 image picker 1 0 1 image cropper 4 0 1 dependencies image picker 1
  • VMware ESXI 6 开启VT-x硬件虚拟化技术

    一般虚拟化主ESXi都会开启BIOS中的CPU虚拟化技术 INTEL叫VT x AMD的叫AMD V ESXI 6 0 CPU虚拟化是在web端设置的 在客户端vSphere中没有这个设置 切记
  • Qt中的坐标体系和内存回收

    目录 坐标体系 窗口的坐标原点 窗口的相对坐标 示例 内存回收 1 自动垃圾回收机制 2 对象树机制 示例 坐标体系 窗口的坐标原点 在Qt中 坐标系统一般是以窗口左上角为原点 向右为正方向X轴 向下为正方向Y轴 窗口的相对坐标 在一个 Q
  • GPU及GPU通用计算编程模型简介

    以下内容来自网络总结 NVIDIA公司在1999年发布GeForce256时首先提出GPU 图形处理器 的概念 随后大量复杂的应用需求促使整个产业蓬勃发展至今 GPU英文全称Graphic Processing Unit 中文翻译为 图形处
  • 报错记录torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 90.00 MiB (GPU 0; 7.93 GiB to

    torch cuda OutOfMemoryError CUDA out of memory Tried to allocate 90 00 MiB GPU 0 7 93 GiB total capacity 758 34 MiB alre
  • poi 解析word文档 一分钟入门,超简单

    最近一段时间再研究文件解析和转换 网上找了好多资料用的版本都是比较老的 干脆自己去啃poi了 今天开始分享给大家 先从最近简单的做起 花不多说直接开始 项目基于maven构建
  • 酒店宽带运营系统远程命令执行

    他是在社会的最低层挣扎 为了几个钱而受尽折磨 但他已不仅仅将此看作是谋生活命 职业的高贵与低贱 不能说明一个人生活的价值 恰恰相反 他现在倒很 热爱 自己的苦难 通过一段血火般的洗礼 他相信 自己历尽千辛万苦而酿造出的生活之蜜 肯定比轻而易
  • adb devices错误提示:adb server version (39) doesn‘t match this client (41)

    问题 当前client版本41 与server端的版本不匹配 当前版本过高引起的 client就是你电脑已经安装的adb程序的版本 而server 是你的服务端 将要connect的设备 我这里用的是Genymotion虚拟器 解决方法 步
  • 比赛细节笔记总结

    2020 10 06 res 的思想 与 ensemble 的 思想 加入很多层 ensemble 一下 也算是集成模型 res 的思想 一般是加比较好 序列问题可以加入 pos embedding an照 transformer 的方法加
  • KNIME + Python = 数据分析+报表全流程

    一 Python 数据分析环境 数据分析领域有很多可选方案 例如SPSS傻瓜式分析工具 SAS专业性商业分析工具 R和python这类需要代码编程类的工具 个人选择是python这类 包括pandas numpy matplotlib sk
  • 有趣的USB接口和颜色分类

    USB2 0 接口颜色为白色以及黑色 USB3 0 接口颜色为蓝色 蓝色的USB接口是USB 3 2 Gen 1 原USB 3 0 红色的是USB 3 2 Gen 2 原USB 3 1 USB2 0 Powered USB 接口颜色为黄色
  • 如何做到带HINT的Spinner??

    如题 搜了各大搜索引擎 连国外的都看过了 终于在github发现一个非常好的带hint的spinner 原理也很简单 这里有一个adapter 只要实现了 你的系统spinner便可以完美得到hint package com wangzij
  • JAVA电商平台免费搭建 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城

    1 涉及平台 平台管理 商家端 PC端 手机端 买家平台 H5 公众号 小程序 APP端 IOS Android 微服务平台 业务服务 2 核心架构 Spring Cloud Spring Boot Mybatis Redis 3 前端框架
  • android项目迁移到androidX:类映射(android.support.constraint*)

    支持库类 AndroidX 类 android support constraint Barrier androidx constraintlayout widget Barrier android support constraint C
  • 怎么把文件传给小米电视

    小米电视支持多种文件传输方式 其中一种是通过无线网络将文件从电脑或手机传输到电视上 这需要在电视和电脑 手机上连接同一个无线网络 并在电视上打开 文件共享 功能 接下来 在电脑或手机上打开文件管理器 找到要传输的文件 并使用 投放 或 传输
  • 四种常用的微服务架构拆分方式

    微服务架构并无标准架构 不然什么架构师大会也不会各个系统架构百花齐放了 虽然没有固定的套路 却有一些经验 今天就来做一个总结 基于角色拆分 这种拆分方式常见于基础设施以及其PaaS层的架构 比如服务治理 k8s kafka 所谓基础组件的P