架构师面试(二十六):系统拆分

news2025/4/9 10:28:56

问题

今天我们聊电商系统实际业务场景的问题,考查对业务系统问题的分析能力、解决问题的能力和对系统长期发展的整体规划能力。

一电商平台在早期阶段业务发展迅速,DAU在 10W+;整个电商系统按水平分层架构进行设计,包括【入口网关层】、【业务逻辑层】和【数据访问层】。为了进一步提升电商平台的DAU,几乎每周都会做几次运营活动,因此电商系统基本每天都会有新业务上线和服务重启,这导致电商系统的核心交易逻辑(下订单、支付等)极易受到影响。另外,电商系统的每个业务单元(如:风控系统、广告系统、营销系统等)也都处在不断地更新迭代中。

如果你是该电商系统的架构师,如何解决现有问题?对该电商系统的后续发展应该如何规划?

解析

该电商系统目前处于早期阶段,业务发展迅速,系统按水平分层架构在运行;这里多啰嗦几句,对【水平分层架构】进行简单描述。

水平分层架构一般是在“技术”扩展驱动之下,对单体架构进行水平拆分,通常可划分出【入口网关层】、【业务逻辑层】和【数据访问层】;入口网关层负责外部请求的路由、过滤和转换,业务逻辑层负责处理复杂的业务规则流程,数据访问层负责对持久化数据进行读写。

水平分层架构的每一层是整体系统的横向切面,没有拆分出独立的业务单元,也就是说:业务逻辑层是一个独立服务或进程在运行,这个独立的进程中既有运营活动逻辑也有核心的交易逻辑; 即在同一个工程中,运营活动程序很容易影响核心的交易逻辑程序,这是最根本的问题所在。然后业务逻辑层程序除了核心的交易逻辑和运营活动之外,还包括其他业务单元,比如:风控、广告、营销等;任何一个业务的升级迭代和重启,都会导致其他业务单元也需要重启,正所谓“城门失火殃及池鱼”!

那怎么解决现有问题呢?

目前最紧急的问题是“运营活动”影响“核心逻辑”,成本最低的解决方案是:对业务逻辑层拆分出一个附加的业务逻辑模块,假设目前的业务逻辑层程序叫做 Logic,那就从Logic中把运营活动逻辑单独拆分出来,不妨叫做 Extlogic;由 Logic 负责最核心的业务逻辑内容(比如下单、交易等),由 Extlogic 负责运营活动内容。

上述问题解决之后,就可以开始着手解决很重要但相对不紧急的问题,即很多业务单元(风控、广告、营销、下单、交易等)目前都还糅杂在 Logic 中,最彻底的解决方案是:对每一个业务单元进行服务化拆分;在当前的业务场景中,也叫做垂直化拆分。就是从 Logic 中分别拆分出 SpamLogic(风控逻辑服务)、AdLogic(广告逻辑服务)、MarketingLogic(营销逻辑服务)、OrderLogic(订单逻辑服务)、TradeLogic(交易逻辑服务)等。

这个问题解决之后,就可以坐等业务的发展了,如果业务发展良好,百花齐放,前端孵化出各种业务线时,就可以考虑中台化了,比如对交易业务、风控业务、广告业务等进行下沉形成可复用的业务中台。

简单总结一下:

1. 从 Logic 中拆分出 Extlogic,解决运营活动影响核心业务逻辑的问题;

2. 从 Logic 中拆分出 SpamLogic、AdLogic、MarketingLogic、OrderLogic、TradeLogic 等,解决业务单元之间互相影响的问题;

3. 业务单元中台化,解决业务复用问题,助力前端业务发展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2329791.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java中的同步和异步

一、前言 在Java中,同步(Synchronous)和异步(Asynchronous)是两种不同的任务处理模式。核心区别在任务执行的顺序控制和线程阻塞行为。 二、同步(Synchronous) 定义:任务按顺序执行…

在 Ubuntu24.04 LTS 上 Docker Compose 部署基于 Dify 重构二开的开源项目 Dify-Plus

一、安装环境信息说明 硬件资源(GB 和 GiB 的主要区别在于它们的换算基数不同,GB 使用十进制,GiB 使用二进制,导致相同数值下 GiB 表示的容量略大于 GB;换算关系:1 GiB ≈ 1.07374 GB ;1 GB ≈ …

NO.64十六届蓝桥杯备战|基础算法-简单贪心|货仓选址|最大子段和|纪念品分组|排座椅|矩阵消除(C++)

贪⼼算法是两极分化很严重的算法。简单的问题会让你觉得理所应当,难⼀点的问题会让你怀疑⼈⽣ 什么是贪⼼算法? 贪⼼算法,或者说是贪⼼策略:企图⽤局部最优找出全局最优。 把解决问题的过程分成若⼲步;解决每⼀步时…

瑞萨RA4M2使用心得-KEIL5的第一次编译

目录 前言 环境: 开发板:RA-Eco-RA4M2-100PIN-V1.0 IDE:keil5.35 一、软件的下载 编辑瑞萨的芯片,除了keil5 外还需要一个软件:RASC 路径:Releases renesas/fsp (github.com) 向下找到: …

数据分析-Excel-学习笔记

Day1 复现报表聚合函数:日期联动快速定位区域SUMIF函数SUMIFS函数环比、同比计算IFERROR函数混合引用单元格格式总结汇报 拿到一个Excel表格,首先要看这个表格个构成(包含了哪些数据),几行几列,每一列的名称…

整车CAN网络和CANoe

车载网络中主要包含有Can网络,Lin网络,FlexRay,Most,以太网。 500kbps:500波特率,表示的数据传输的速度。表示的是最大的网速传输速度。也就是每秒 500kb BodyCan车身Can InfoCan娱乐信息Can 车身CAN主要连接的是ESB电动安全带 ADB自适应远光灯等 PTCan动力Can 底盘Can

ChatGPT 的新图像生成器非常擅长伪造收据

本月,ChatGPT 推出了一种新的图像生成器,作为其 4o 模型的一部分,该模型在生成图像内的文本方面做得更好。 人们已经在利用它来生成假的餐厅收据,这可能会为欺诈者使用的已经很广泛的 AI 深度伪造工具包添加另一种工具。 多产的…

JS页面尺寸事件

元素位置 在这里插入图片描述 父元素带有定位时输出相对于父亲元素的距离值

网络协议之基础介绍

写在前面 本文看下网络协议相关基础内容。 1:为什么要有网络协议 为了实现世界各地的不同主机的互联互通。 2:协议的三要素 协议存在的目的就是立规矩,无规矩不成方圆嘛!但是这个规矩也不是想怎么立就怎么立的,也…

初识数据结构——Java集合框架解析:List与ArrayList的完美结合

📚 Java集合框架解析:List与ArrayList的完美结合 🌟 前言:为什么我们需要List和ArrayList? 在日常开发中,我们经常需要处理一组数据。想象一下,如果你要管理一个班级的学生名单,或…

uniapp微信小程序引入vant组件库

1、首先要有uniapp项目,根据vant官方文档使用yarn或npm安装依赖: 1、 yarn init 或 npm init2、 # 通过 npm 安装npm i vant/weapp -S --production# 通过 yarn 安装yarn add vant/weapp --production# 安装 0.x 版本npm i vant-weapp -S --production …

贪心进阶学习笔记

反悔贪心 贪心是指直接选择局部最优解,不需要考虑之后的影响。 而反悔贪心是在贪心上面加了一个“反悔”的操作,于是又可以撤销之前的“鲁莽行动”,让整个的选择稍微变得“理智一些”。 于是,我个人理解,反悔贪心是…

Java 大视界 -- Java 大数据在航天遥测数据分析中的技术突破与应用(177)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

架构师面试(二十七):单链表

问题 今天的问题对于架构师来说会相对容易许多。今天出一个【数据结构与算法】相关的题目,醒醒脑。 给一张【单链表】,该单链表有100个节点元素(当然,事先我们是不知道100这个数目的),要获取倒数第8个元素…

从扩展黎曼泽塔函数构造物质和时空的结构-15

回来考虑泽塔函数, 我们知道, 也就是在平面直角坐标系上反正切函数在x上的变化率,那么不难看出, 就是在s维空间上的“广义”反正切函数在单位p上的变化率,而泽塔函数,就是这些变化率的全乘积, 因…

01背包问题详解 具体样例模拟版

01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 v i v_i vi​,价值是 w i w_i wi​。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 …

网络初识 - Java

网络发展史: 单机时代(独立模式) -> 局域网时代 -> 广域网时代 -> 移动互联网时代 网络互联:将多台计算机链接再一起,完成数据共享。 数据共享的本质是网络数据传输,即计算机之间通过网络来传输数…

每日一题(小白)回溯篇4

深度优先搜索题:找到最长的路径,计算这样的路径有多少条(使用回溯) 分析题意可以得知,每次向前后左右走一步,直至走完16步就算一条走通路径。要求条件是不能超出4*4的范围,不能重复之前的路径。…

k8s进阶之路:本地集群环境搭建

概述 文章将带领大家搭建一个 master 节点,两个 node 节点的 k8s 集群,容器基于 docker,k8s 版本 v1.32。 一、系统安装 安装之前请大家使用虚拟机将 ubuntu24.04 系统安装完毕,我是基于 mac m1 的系统进行安装的,所…

C++ STL 详解 ——list 的深度解析与实践指南

在 C 的标准模板库(STL)中,list作为一种重要的序列式容器,以其独特的双向链表结构和丰富的操作功能,在许多编程场景下发挥着关键作用。深入理解list的特性与使用方法,能帮助开发者编写出更高效、灵活的代码…