当前位置: 首页 > news >正文

研发中台拆分之路:深度剖析、心得总结与经验分享

背景在 21 年,中台拆分在 21 年,以下为中台拆分的过程心得,带有一定的主观,偏向于中小团队中台建设参考(这里的中小团队指 3-100 人的团队),对于大型团队不太适用,毕竟大型团队人中 / 技术充足。

前言

这里的中台架构不是平台,也不是微服务,使用的是微服务架构,这两个是不一样的概述。中台建设开源项目 alinesno-cloud 开始,社区建议沉淀和企业实践 3 年左右,于 21 年进行拆分,指导思想为轻中台,小前台,大平台,为了更适应行业发展,更好的企业落地,整合出新中台模型,每个企业中台建设不一,这里针对的是自己带队建设过程,我有我思。

原中台架构是怎么样的

中台的概念很早接触,前期从企业上云,再到 DevOps,技术中台,研发中台还有业务中台的建设,中台原带有的架构设计概念,更偏向于企业可复用的组件,多个业务线共用的服务,结合主流的微服务技术,包括 dubbo/cloud 体系 /k8s 容器化一系列的业务实践,结合出来的中台架构,如下图:

建设思想基于大中台、小前台指导,上面的架构图也是目前行业最常见的,也是原中台的架构和设计参考,也是解决了过程中的一部分问题,但是也带来了新的问题产生,但总的来说,是进步的,解决了传统研发中的弊端,包括维护、升级、自动化、发布、版本更新、重复建设等等,对架构的重构,带来新的企业机遇点。以下从几个角度进行阐述:

  • 沉淀几年过程中带来的问题
  • 为什么一定要拆分重构
  • 拆分过程是怎么升级处理
  • 中台要拆成什么最终形态

沉淀几年过程中带来的问题

中台架构解决了很多以前传统项目开发的问题,使得研发过程整体变得自动化,中步也产生了一个新的问题:中台太重。

维护中台过程重

由于前期大量的微服务技术体系,多组件整合,架构体系相对于一般的中小团队来说,已经较为庞大,基于 gitlab 的管理,原有的业务组件不断的增加能力,同时组件不断增加,前期单一基线,源码包由原来的十几个工程,迅速变成上百个工程,几百个组件,而且每一个业务项目的建设,就会增加新的中台能力沉淀,当然,这也是前期的初衷,也达到这个期望。

中台越来越庞大,对于中台团队来说,带来另一个致命性的,组件的关联性。南宁本地团队有一定的特点,一个是流动性,另一个是人员的培养性,这几个带来的问题,就是除了中台小组的几个人,其它人很难维护中台,同时由于前期放在同一个基线,代码量巨大,增加和修改功能,都需要极度的小心和避免影响项目,新人更加无从下手。工作量立杆见影的往上提升,甚至后面有些组件基本上不沉淀了,太多了无法维护。项目组开发过程中,出一个简单的问题,找人找问题都很难,业务响应速度下降,项目组不满程度突显。

前期通过招人,培养,文档来解决,后来发现,这也是一个艰难的工作,特别是文档,几百个组件的文档,对应的文档同步工作量也是庞大的,有很多陈旧的文档跟新功能对不上,特意找了写文档的人,但是产出还是没有达到预期。

另一个包括多项目,多版本,新旧版本维护等,这些维护过程来说,积累多,量也大。过程中不断增加的中间件环境,整个中间件技术宽度就很大,技术链路越来越长。

基于以上种种,针对于中小团队来说,原来小组对中台的管理,每个组件的升级管理,维护中台过程较重。

团队成长技术债过重

中台从基础框架,技术平台,研发中台,数据中台,还包括后期的智能平台规划,整体平台的技术债过重。原有的技术体系超过 120 个技术框架或者工具,每一个技术点都要求研发人员拥有快速学习和掌握的能力,需要消耗大量的周期时间。

架构体系更新太重

技术中台和研发中台的搭建,到后期的业务中台整合,前期考虑到中小团队,形成统一技术路线,这相对来说是好的,同时也避免了各种框架的混乱。但是在后期,要升级的时候,这个问题就是另一个灾难了。

前期考虑多架构融合,业务可选,在调整升级几个版本之后,发现,新旧项目切合越来越难融合。

创新和升级受约束

中台立于同一个基线的管理,同时过大的关联性,在新的业务组件建设中,带着沉重的中台包袱,用还是不用中台就成了一个问题,甚至有一些感觉鸡肋。用了,后期在其它项目使用可能会带着一连串的中台组件,比如一个简单的业务新组件,后来带的是注册中心,消息中心,缓存中心,还有 n 个关联的中台组件,甚至有可能找不清,链路过程找不到,去掉,发现有些工程又跑不起来,不去掉,又太重。过程需要讨论,这过程无形中又消耗去时间。

另一个是单独升级的组件的,可能无形中又影响其它引用的服务,考虑加版本,但是你根本就不清楚到底有哪些接入,无法确定是否升级,然后又需要讨论,仅仅找到相应的负责人确定方向,过程中无形又消耗时间周期,更可怕的是,前期的负责人可能自己都会遗忘前期的设计思路,或者负责这块的人员已经离职了。

为什么一定要拆分重构

在长期的沉淀过程中,慢慢形成资产,但是也造成了隐形的约束。

产生强大的内耗

内耗跟消化过程有一定的区别,前期的团队的对中台的理解和运用,基本上已经很熟悉,新人进入,基本上一个星期内就可以了解熟悉接入项目过程,这里的内耗,指的更多的是团队对中台的管理,围绕中台问题和管理上的消耗,这些基本上是无形的,开始基本上无感。

无形中产生的错误的架构思维

中台架构的思维,无形中影响着很多项目开发人员,技术经理,基本上内部已经形成约定的规范,照着上面的思维整合项目,项目无形中,也同步形成了很多组件,形成组件虽然是对的,但是由于架构思维的偏差,形成的是大量重复的组件,这些组件的兼容性还有共性是比较大的,在进行多个项目之后,会发现可能形成多套服务架构。在这里多套也是没有问题,重点的问题,这几套的维护人员,支撑人员,还有管理人员等等都是分散的,业务也是分散的,这个一下就会形成无限的服务组件,甚至有可能是指数级的增长。

对于大型团队,比如上千人的团队来说,可能问题不大,但是对于中小团队来说,这几乎是灾难性的,外加上人员流动缘故,另一个是地方人才等问题,可能很快就会变成团队压力负担,最后产生一个疑问,还要不要使用这个技术中台。

制约企业战略规划

前期中台架构,过分依赖于技术组件的复用性,偏向于技术体系,没有能从解决方案思维架构上的整合,无法跟进当前行业的发展。

中台的建设,团队的消化,项目的接入,业务的维护过程,整个下来,中小团队少的可能 1 年,重的可能 3-5 年,这个过程基本上团队没有精力再思考其它,对一般的企业来说,有限的资源力量,就无形中成为一种制约。

拆分过程是怎么升级处理

拆分思维从大中台,小前台,转变成轻中台,小前台,大平台架构指导。

中台怎么拆

一个基线的拆分,每个组件针对颗粒度形成一个单独的管理基线,同时明确中台的管理边界,哪些可集成,哪些不可集成,哪些需要放弃,哪些需要重点建设,进行重点精度升级,在架构上形成边界。

明确中台版本的管理,稳定版本的管理,一定确定出稳定版,同时划分明确中台组基线的管理范围,中台组件范围,非团队或者企业核心组件,不做整合,做好分界线。

明确上下游关系,每个组件提供标准稳定接口,明确上下游组件,另一个是提取出核心业务领域,面向接口编程,如下图:

这样无论外围技术升级和划分,核心业务领域尽量少动,切换的是领域外围,形成稳定的企业核心资产和版本,同时避免技术升级带来的核心业务代码变动。

去掉非通用协议,当然,也可以不去掉,主要看技术债和团队问题,针对于我们团队,当时直接全量升级,从 RPC 协议调整成 Http 协议,如果是 cloud 技术,这个问题就可以免掉了。

后期怎么升级维护

基于中台服务的拆分,各个业务组件和服务,都有可能变成一个单独的业务线,在设计和方案,还有新技术的增加上面,新需求新市场变动变动上面,变得相当的轻量,不再需要关心过多的中台包袱,开发人员的思维和思绪更偏向于这个组件的完善上面。

每个服务的架构和变动上面,就会变得很轻量,升级维护可以根据每个组件和负责人不同方案,进行最合适的升级处理。需要添加的服务和模块,就不再是有累赘,过程的指导由中台运营手册去做管理指导,形成轻量级的公共组件和服务。

提供出来的接口和服务,在不影响其它人的引用即可,同时做好前后兼容即可,侧面增大了 k 中台服务组件的包容性,通过中台定制的管理运营规范,按一般的 java 项目管理维护即可,这里就不再过多阐述。

中台要拆成什么结果形态

这里的形态,整个过程由单体到服务化,再到微服务,大中台小前台,再到进一步升级的结果形态。

基于新中台模型架构

中台包括很多层面,不仅仅是技术,更多的是业务的挂钩,不仅仅是技术的改变,更多是模式的改变,比如规划、产品、沉淀、落地、资源整合等一套体系,而不是说,我们就做那么个框架或是技术平台,而是一个更高一层的思想架构提升,这里定义的新中台的模型包括以下几点:

  • 产品:企业团队沉淀能力体现
  • 解决方案:客户业务价值体现
  • 组织架构:价值落地的保障体现
  • 技术:技术是落地的直接能力输出
  • 合作体系:业务发展能力体现
  • 沉淀:发展和突破点积累体现

结合上面的新中台阐述落地体系,从几个角度思考愿景方向和发展走向形势参考,主要思考的几个点:

  • 新解决方案:业务价值能力输出
  • 新服务模式:客户业务价值输出
  • 新发展模式:S2B 商业模式输出

从整体上表述新中台的模型和愿景方向,也是数字化社区的目标和愿景,整体愿景期望的已不仅仅是数字化,更多的是以数字化为基础,进行更好的发展方向。

行业产品形态能力输出

行业模式,不仅仅是目前的业务维护,更多的是基于新中台架构行业发展地位和企业发展的基础。

相应的市面上产品示例门户体现参考:

  • 钉钉门户
  • 金蝶云苍穹门户

总结

以上为中台拆分过程的一些过程和思路,每个架构师或者技术负责人有自己的思路,上面是自己在整合过程的总结。

相关文章:

研发中台拆分之路:深度剖析、心得总结与经验分享

背景在 21 年,中台拆分在 21 年,以下为中台拆分的过程心得,带有一定的主观,偏向于中小团队中台建设参考(这里的中小团队指 3-100 人的团队),对于大型团队不太适用,毕竟大型团队人中 …...

SWIFT Payment

SWIFT stands for Society for Worldwide Interbank Financial Telecommunication SWIFT——环球银行金融电信协会 SWIFT Payment Useful Link ISO 20022https://www.iso20022.org/https://www.swift.com/standards/iso-20022MT and MX Equivalence Tableshttps://www2.swift…...

数据结构之红黑树实现(全)

一、红黑树 红黑树是一种自平衡的二叉搜索树,它通过约束节点的颜色和结构来保持平衡。红黑树是由 Rudolf Bayer 在1972年发明的,被认为是一种优秀的平衡树结构,广泛应用于各种数据结构和算法中。 1.红黑树的性质 1. 每个结点是红的或者黑的…...

冷热数据分离

优质博文:IT-BLOG-CN 一、背景 随着机票业务的快速发展,订单量持续增长对业务性能带来影响,需要进行冷热数据分离。目前机票订单模块主要使用Mysql(InnoDB)作为数据库存储,历史订单信息状态修改频率低并占用大量数据库存储空间&…...

朝花夕拾:多模态图文预训练的前世今生

Diffusion Models专栏文章汇总:入门与实战 前言:时间来到2024年,多模态大模型炙手可热。在上一个时代的【多模态图文预训练】宛若时代的遗珠,本文的时间线从2019年到2022年,从BERT横空出世讲到ViT大杀四方,…...

亳州自闭症寄宿制学校,关注孩子的学习和生活

在特殊教育领域,自闭症儿童的教育与成长一直是社会各界关注的焦点。近年来,随着对自闭症认识的加深,越来越多的寄宿制学校应运而生,致力于为这些特殊的孩子提供全面、个性化的教育服务。在安徽亳州,这样的学校正努力为…...

Root me CTF all the day靶场ssrf+redis漏洞

Rootme CTF all the day靶场ssrfredis漏洞 一、环境介绍1、漏洞地址2、漏洞介绍 二、 搭建环境三、测试过程3.1 读取系统文件3.2 探测开放的服务器端口(dict协议)3.3 redis未授权访问3.3.1 利用redis来写ssh密钥(gopher协议写入)3.3.2 利用redis写定时任…...

C#中Json序列化的进阶用法

本文所有json序列化,都使用的Newtonsoft.Json包 1 JsonIgnore 在 Newtonsoft.Json 中,如果你不想将某些属性转换为 JSON 字符串,可以使用多种方法来实现。以下是几种常见的方法: 1.1 使用 [JsonIgnore] 特性 [JsonIgnore] 特性…...

IO相关的常用工具包

常用工具包Commons-io Commons-io是apache开源基金组织提供的一组有关IO操作的开源工具包。 作用:提高IO流的开发效率。 使用步骤: 1、在项目中创建一个文件夹:lib 2、将jar包复制粘贴到lib文件夹 3、右键点击jar包,选择Add as Library--->点击OK …...

Spring Boot集成RBloomFilter快速入门Demo

在大数据处理和缓存优化的场景中,布隆过滤器(Bloom Filter)因其高效的空间利用和快速的查询性能而被广泛应用。RBloomFilter是布隆过滤器的一种实现,通常用于判断一个元素是否存在于一个集合中,尽管它存在一定的误判率…...

布局性能优化

布局使用不当回导致卡顿、掉帧、响应慢等问题 一、布局流程 1、应用侧会根据前端UI描述创建后端的页面节点树,其中包含了处理UI组件属性更新、布局测算、事件处理等逻辑 2、页面节点树创建完成后,UI线程会对每个元素进行测算(Measure&#…...

智云人才推荐与管理系统

1.产品介绍 产品名称:智云人才推荐与管理系统 主要功能: 智能人才匹配引擎 功能描述:利用先进的人工智能算法,根据企业岗位需求(如技能要求、工作经验、教育背景等)自动从海量人才库中筛选并推荐最合适的…...

git在远程分支上新建分支

需求: 在远程分支release/test的基础上创建一个新的分支test_20241009 确保本地仓库的信息是最新的 git fetch origin执行了 git fetch,本地仓库已经包含了 origin/release/test 的最新信息。当基于这个远程跟踪分支创建新分支时,会得到一个包…...

用Python实现的高校教师资格考试题库程序

最近朋友参加了高校教师资格考试,在考试前需要刷题来保证通过。但是教资网站上的题库只有接近考试才更新,并且官方题库的刷题效率还是有点低。 👆官方题库的样子 于是想到了是否能够将官方题库内容记录下来,然后自己创建一个高效…...

OpenVINO基本操作流程

环境配置: conda env list:可以查看有哪些环境 conda activate intel:启动某个环境 pip list:可以查看此环境下都下载了哪些软件包 from openvino.inference_engine import IEcore#从OpenVINO推理引擎中导入IECore类 import numpy as np import cv2 1&…...

Spring MVC 注解详解:@RequestBody,@RequestParam 和 @PathVariable

Spring MVC 提供了一系列注解,用于简化请求数据的获取和处理。了解并掌握这些注解的使用,对于开发RESTful API和处理HTTP请求至关重要。本文将详细介绍 RequestBody,RequestParam 和 PathVariable 注解,并附带具体的代码示例&…...

MySQL 8 中的 sql_mode

MySQL 8 中的 sql_mode 设置:提升数据库安全性与性能 在现代数据库管理中,MySQL 是一个广泛使用的开源关系型数据库。随着数据的增长和复杂性增加,良好的数据库配置显得尤为重要。sql_mode 是 MySQL 提供的一个强大功能,它可以帮…...

13种pod的状态

13种pod的状态 生命周期 Pending:Pod被创建后进入调度阶段,k8s调度器依据pod声明的资源请求量和调度规则,为pod挑选一个适合运行的节点。当集群节点不满足pod调度需求时,pod将会处于pending状态。Running:Pod被调度到节点上,k8s将pod调度到节点上后,进入running状态。S…...

2025考研今天开始预报名!攻略请查收

2025年全国硕士研究生招生考试 今天起开始预报名 有什么流程?需要准备哪些信息? 这份考研报名攻略速查收 ↓↓↓ 全国硕士研究生招生考试报名包括网上报名和网上确认两个阶段: 网上预报名时间为10月9日至10月12日(每日9&#xff1…...

JS中的Promise经典题目解析

这段代码很有代表性,涵盖了多个 JavaScript 知识点,特别是不同异步操作的执行优先级。 async function async1() {console.log(async1 start);await async2();console.log(async1 end); }async function async2() {console.log(async2); }console.log(s…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

MMaDA: Multimodal Large Diffusion Language Models

CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

基于Springboot+Vue的办公管理系统

角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...